Skip to content

Commit 4c118f2

Browse files
shivaramaaraobryanpkc
authored andcommitted
Fix for Issue #1413 (cherry-pick #179 to release_18x) (#185)
PGMATH has AVX512 runtime functions and can be executed only when the application is compiled in avx512 mode. The VecFuncs.def has no information about the TargetOptions and avx512 functions are selected even in avx2 mode. This issue is fixed by creating separate table for AVX512 functions and using them only when avx512 mode is specified.
1 parent 659da9d commit 4c118f2

File tree

6 files changed

+151
-109
lines changed

6 files changed

+151
-109
lines changed

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -580,8 +580,11 @@ bool EmitAssemblyHelper::AddEmitPasses(legacy::PassManager &CodeGenPasses,
580580
raw_pwrite_stream &OS,
581581
raw_pwrite_stream *DwoOS) {
582582
// Add LibraryInfo.
583-
std::unique_ptr<TargetLibraryInfoImpl> TLII(
584-
llvm::driver::createTLII(TargetTriple, CodeGenOpts.getVecLib()));
583+
bool TargetHasAVX512 =
584+
std::find(TargetOpts.Features.begin(), TargetOpts.Features.end(),
585+
"+avx512f") != TargetOpts.Features.end();
586+
std::unique_ptr<TargetLibraryInfoImpl> TLII(llvm::driver::createTLII(
587+
TargetTriple, CodeGenOpts.getVecLib(), TargetHasAVX512));
585588
CodeGenPasses.add(new TargetLibraryInfoWrapperPass(*TLII));
586589

587590
// Normal mode, emit a .s or .o file by running the code generator. Note,
@@ -930,8 +933,11 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
930933

931934
// Register the target library analysis directly and give it a customized
932935
// preset TLI.
933-
std::unique_ptr<TargetLibraryInfoImpl> TLII(
934-
llvm::driver::createTLII(TargetTriple, CodeGenOpts.getVecLib()));
936+
bool TargetHasAVX512 =
937+
std::find(TargetOpts.Features.begin(), TargetOpts.Features.end(),
938+
"+avx512f") != TargetOpts.Features.end();
939+
std::unique_ptr<TargetLibraryInfoImpl> TLII(llvm::driver::createTLII(
940+
TargetTriple, CodeGenOpts.getVecLib(), TargetHasAVX512));
935941
FAM.registerPass([&] { return TargetLibraryAnalysis(*TLII); });
936942

937943
// Register all the basic analyses with the managers.

llvm/include/llvm/Analysis/TargetLibraryInfo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ class TargetLibraryInfoImpl {
130130
MASSV, // IBM MASS vector library.
131131
#ifdef ENABLE_CLASSIC_FLANG
132132
PGMATH, // PGI math library.
133+
PGMATH_AVX512, // PGI math library (AVX512 subset).
133134
#endif
134135
SVML, // Intel short vector math library.
135136
SLEEFGNUABI, // SLEEF - SIMD Library for Evaluating Elementary Functions.

0 commit comments

Comments
 (0)