forked from OSchip/llvm-project
[driver] Enable the slp vectorizer at -Oz.
PR19568 llvm-svn: 207858
This commit is contained in:
parent
7cdc8a1f30
commit
3ba81bdb45
|
@ -2146,7 +2146,8 @@ static void SplitDebugInfo(const ToolChain &TC, Compilation &C,
|
|||
}
|
||||
|
||||
/// \brief Vectorize at all optimization levels greater than 1 except for -Oz.
|
||||
static bool shouldEnableVectorizerAtOLevel(const ArgList &Args) {
|
||||
/// For -Oz the loop vectorizer is disable, while the slp vectorizer is enabled.
|
||||
static bool shouldEnableVectorizerAtOLevel(const ArgList &Args, bool isSlpVec) {
|
||||
if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
|
||||
if (A->getOption().matches(options::OPT_O4) ||
|
||||
A->getOption().matches(options::OPT_Ofast))
|
||||
|
@ -2162,9 +2163,9 @@ static bool shouldEnableVectorizerAtOLevel(const ArgList &Args) {
|
|||
if (S == "s")
|
||||
return true;
|
||||
|
||||
// Don't vectorize -Oz.
|
||||
// Don't vectorize -Oz, unless it's the slp vectorizer.
|
||||
if (S == "z")
|
||||
return false;
|
||||
return isSlpVec;
|
||||
|
||||
unsigned OptLevel = 0;
|
||||
if (S.getAsInteger(10, OptLevel))
|
||||
|
@ -3900,7 +3901,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
// Enable vectorization per default according to the optimization level
|
||||
// selected. For optimization levels that want vectorization we use the alias
|
||||
// option to simplify the hasFlag logic.
|
||||
bool EnableVec = shouldEnableVectorizerAtOLevel(Args);
|
||||
bool EnableVec = shouldEnableVectorizerAtOLevel(Args, false);
|
||||
OptSpecifier VectorizeAliasOption = EnableVec ? options::OPT_O_Group :
|
||||
options::OPT_fvectorize;
|
||||
if (Args.hasFlag(options::OPT_fvectorize, VectorizeAliasOption,
|
||||
|
@ -3908,10 +3909,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
CmdArgs.push_back("-vectorize-loops");
|
||||
|
||||
// -fslp-vectorize is enabled based on the optimization level selected.
|
||||
OptSpecifier SLPVectAliasOption = EnableVec ? options::OPT_O_Group :
|
||||
bool EnableSLPVec = shouldEnableVectorizerAtOLevel(Args, true);
|
||||
OptSpecifier SLPVectAliasOption = EnableSLPVec ? options::OPT_O_Group :
|
||||
options::OPT_fslp_vectorize;
|
||||
if (Args.hasFlag(options::OPT_fslp_vectorize, SLPVectAliasOption,
|
||||
options::OPT_fno_slp_vectorize, EnableVec))
|
||||
options::OPT_fno_slp_vectorize, EnableSLPVec))
|
||||
CmdArgs.push_back("-vectorize-slp");
|
||||
|
||||
// -fno-slp-vectorize-aggressive is default.
|
||||
|
|
|
@ -92,6 +92,7 @@
|
|||
// RUN: %clang -### -S -O %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
|
||||
// RUN: %clang -### -S -O2 %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
|
||||
// RUN: %clang -### -S -Os %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
|
||||
// RUN: %clang -### -S -Oz %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
|
||||
// RUN: %clang -### -S -O3 %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
|
||||
// RUN: %clang -### -S -fno-slp-vectorize -O3 %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
|
||||
// RUN: %clang -### -S -O1 -fslp-vectorize %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s
|
||||
|
@ -99,7 +100,6 @@
|
|||
// RUN: %clang -### -S %s 2>&1 | FileCheck -check-prefix=CHECK-NO-SLP-VECTORIZE %s
|
||||
// RUN: %clang -### -S -O0 %s 2>&1 | FileCheck -check-prefix=CHECK-NO-SLP-VECTORIZE %s
|
||||
// RUN: %clang -### -S -O1 %s 2>&1 | FileCheck -check-prefix=CHECK-NO-SLP-VECTORIZE %s
|
||||
// RUN: %clang -### -S -Oz %s 2>&1 | FileCheck -check-prefix=CHECK-NO-SLP-VECTORIZE %s
|
||||
// CHECK-SLP-VECTORIZE: "-vectorize-slp"
|
||||
// CHECK-NO-SLP-VECTORIZE-NOT: "-vectorize-slp"
|
||||
|
||||
|
|
Loading…
Reference in New Issue