Skip to content

Commit 48cf4f0

Browse files
Enable vectorization of libpgmath intrinsic calls
1 parent 4cd0029 commit 48cf4f0

File tree

6 files changed

+23
-4
lines changed

6 files changed

+23
-4
lines changed

CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,11 @@ endif()
388388

389389
add_definitions( -D_GNU_SOURCE )
390390

391+
option(FLANG_LLVM_EXTENSIONS "enable the Flang LLVM extensions" OFF)
392+
if(FLANG_LLVM_EXTENSIONS)
393+
add_definitions( -DFLANG_LLVM_EXTENSIONS )
394+
endif()
395+
391396
option(CLANG_BUILD_TOOLS
392397
"Build the Clang tools. If OFF, just generate build targets." ON)
393398

include/clang/Driver/Options.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1246,7 +1246,7 @@ def fno_experimental_new_pass_manager : Flag<["-"], "fno-experimental-new-pass-m
12461246
Group<f_clang_Group>, Flags<[CC1Option]>,
12471247
HelpText<"Disables an experimental new pass manager in LLVM.">;
12481248
def fveclib : Joined<["-"], "fveclib=">, Group<f_Group>, Flags<[CC1Option]>,
1249-
HelpText<"Use the given vector functions library">, Values<"Accelerate,SVML,none">;
1249+
HelpText<"Use the given vector functions library">, Values<"Accelerate,SVML,PGMATH,none">;
12501250
def fno_lax_vector_conversions : Flag<["-"], "fno-lax-vector-conversions">, Group<f_Group>,
12511251
HelpText<"Disallow implicit conversions between vectors with a different number of elements or different element types">, Flags<[CC1Option]>;
12521252
def fno_merge_all_constants : Flag<["-"], "fno-merge-all-constants">, Group<f_Group>,

include/clang/Frontend/CodeGenOptions.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ class CodeGenOptions : public CodeGenOptionsBase {
5252
enum VectorLibrary {
5353
NoLibrary, // Don't use any vector library.
5454
Accelerate, // Use the Accelerate framework.
55-
SVML // Intel short vector math library.
55+
SVML, // Intel short vector math library.
56+
PGMATH // PGI math library.
5657
};
5758

5859

lib/CodeGen/BackendUtil.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,9 @@ static TargetLibraryInfoImpl *createTLII(llvm::Triple &TargetTriple,
314314
case CodeGenOptions::SVML:
315315
TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::SVML);
316316
break;
317+
case CodeGenOptions::PGMATH:
318+
TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::PGMATH);
319+
break;
317320
default:
318321
break;
319322
}

lib/Driver/ToolChains/Clang.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3286,8 +3286,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
32863286
else
32873287
CmdArgs.push_back(Args.MakeArgString(getToolChain().getThreadModel()));
32883288

3289-
Args.AddLastArg(CmdArgs, options::OPT_fveclib);
3290-
32913289
if (Args.hasFlag(options::OPT_fmerge_all_constants,
32923290
options::OPT_fno_merge_all_constants, false))
32933291
CmdArgs.push_back("-fmerge-all-constants");
@@ -4352,6 +4350,16 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
43524350
options::OPT_fno_vectorize, EnableVec))
43534351
CmdArgs.push_back("-vectorize-loops");
43544352

4353+
#ifdef FLANG_LLVM_EXTENSIONS
4354+
if(Args.getLastArg(options::OPT_fveclib))
4355+
Args.AddLastArg(CmdArgs, options::OPT_fveclib);
4356+
else if (Args.hasFlag(options::OPT_fvectorize, VectorizeAliasOption,
4357+
options::OPT_fno_vectorize, EnableVec))
4358+
CmdArgs.push_back("-fveclib=PGMATH");
4359+
#else
4360+
Args.AddLastArg(CmdArgs, options::OPT_fveclib);
4361+
#endif
4362+
43554363
// -fslp-vectorize is enabled based on the optimization level selected.
43564364
bool EnableSLPVec = shouldEnableVectorizerAtOLevel(Args, true);
43574365
OptSpecifier SLPVectAliasOption =

lib/Frontend/CompilerInvocation.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,8 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
486486
Opts.setVecLib(CodeGenOptions::Accelerate);
487487
else if (Name == "SVML")
488488
Opts.setVecLib(CodeGenOptions::SVML);
489+
else if (Name == "PGMATH")
490+
Opts.setVecLib(CodeGenOptions::PGMATH);
489491
else if (Name == "none")
490492
Opts.setVecLib(CodeGenOptions::NoLibrary);
491493
else

0 commit comments

Comments
 (0)