diff options
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index bec557b4cbf..fe0b727b1d9 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -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. |

