Add fveclib option.
Review: http://reviews.llvm.org/D8097 llvm-svn: 232533
This commit is contained in:
parent
ba05a784ff
commit
c888dd0cb8
|
@ -756,6 +756,8 @@ def fno_exceptions : Flag<["-"], "fno-exceptions">, Group<f_Group>;
|
|||
def fno_gnu_keywords : Flag<["-"], "fno-gnu-keywords">, Group<f_Group>, Flags<[CC1Option]>;
|
||||
def fno_inline_functions : Flag<["-"], "fno-inline-functions">, Group<f_clang_Group>, Flags<[CC1Option]>;
|
||||
def fno_inline : Flag<["-"], "fno-inline">, Group<f_clang_Group>, Flags<[CC1Option]>;
|
||||
def fveclib : Joined<["-"], "fveclib=">, Group<f_Group>, Flags<[CC1Option]>,
|
||||
HelpText<"Use the given vector functions library">;
|
||||
def fno_lax_vector_conversions : Flag<["-"], "fno-lax-vector-conversions">, Group<f_Group>,
|
||||
HelpText<"Disallow implicit conversions between vectors with a different number of elements or different element types">, Flags<[CC1Option]>;
|
||||
def fno_merge_all_constants : Flag<["-"], "fno-merge-all-constants">, Group<f_Group>,
|
||||
|
|
|
@ -162,6 +162,9 @@ VALUE_CODEGENOPT(DwarfVersion, 3, 0)
|
|||
/// The kind of inlining to perform.
|
||||
ENUM_CODEGENOPT(Inlining, InliningMethod, 2, NoInlining)
|
||||
|
||||
// Vector functions library to use.
|
||||
ENUM_CODEGENOPT(VecLib, VectorLibrary, 1, NoLibrary)
|
||||
|
||||
/// The default TLS model to use.
|
||||
ENUM_CODEGENOPT(DefaultTLSModel, TLSModel, 2, GeneralDynamicTLSModel)
|
||||
|
||||
|
|
|
@ -46,6 +46,11 @@ public:
|
|||
OnlyAlwaysInlining // Only run the always inlining pass.
|
||||
};
|
||||
|
||||
enum VectorLibrary {
|
||||
NoLibrary, // Don't use any vector library.
|
||||
Accelerate // Use the Accelerate framework.
|
||||
};
|
||||
|
||||
enum ObjCDispatchMethodKind {
|
||||
Legacy = 0,
|
||||
NonLegacy = 1,
|
||||
|
|
|
@ -237,6 +237,14 @@ static TargetLibraryInfoImpl *createTLII(llvm::Triple &TargetTriple,
|
|||
TargetLibraryInfoImpl *TLII = new TargetLibraryInfoImpl(TargetTriple);
|
||||
if (!CodeGenOpts.SimplifyLibCalls)
|
||||
TLII->disableAllFunctions();
|
||||
|
||||
switch (CodeGenOpts.getVecLib()) {
|
||||
case CodeGenOptions::Accelerate:
|
||||
TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::Accelerate);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TLII;
|
||||
}
|
||||
|
||||
|
|
|
@ -2864,6 +2864,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
else
|
||||
CmdArgs.push_back(Args.MakeArgString(getToolChain().getThreadModel()));
|
||||
|
||||
Args.AddLastArg(CmdArgs, options::OPT_fveclib);
|
||||
|
||||
if (!Args.hasFlag(options::OPT_fmerge_all_constants,
|
||||
options::OPT_fno_merge_all_constants))
|
||||
CmdArgs.push_back("-fno-merge-all-constants");
|
||||
|
|
|
@ -367,6 +367,16 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
|||
Opts.setInlining(Args.hasArg(OPT_fno_inline_functions) ?
|
||||
CodeGenOptions::OnlyAlwaysInlining : Opts.getInlining());
|
||||
|
||||
if (Arg *A = Args.getLastArg(OPT_fveclib)) {
|
||||
StringRef Name = A->getValue();
|
||||
if (Name == "Accelerate")
|
||||
Opts.setVecLib(CodeGenOptions::Accelerate);
|
||||
else if (Name == "none")
|
||||
Opts.setVecLib(CodeGenOptions::NoLibrary);
|
||||
else
|
||||
Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;
|
||||
}
|
||||
|
||||
if (Args.hasArg(OPT_gline_tables_only)) {
|
||||
Opts.setDebugInfo(CodeGenOptions::DebugLineTablesOnly);
|
||||
} else if (Args.hasArg(OPT_g_Flag) || Args.hasArg(OPT_gdwarf_2) ||
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
// RUN: %clang -### -c -fveclib=none %s 2>&1 | FileCheck -check-prefix CHECK-NOLIB %s
|
||||
// RUN: %clang -### -c -fveclib=Accelerate %s 2>&1 | FileCheck -check-prefix CHECK-ACCELERATE %s
|
||||
// RUN: not %clang -c -fveclib=something %s 2>&1 | FileCheck -check-prefix CHECK-INVALID %s
|
||||
|
||||
// CHECK-NOLIB: "-fveclib=none"
|
||||
// CHECK-ACCELERATE: "-fveclib=Accelerate"
|
||||
|
||||
// CHECK-INVALID: error: invalid value 'something' in '-fveclib=something'
|
Loading…
Reference in New Issue