From: Nadav Rotem Date: Thu, 1 Aug 2013 22:56:53 +0000 (+0000) Subject: If -fslp-vectorize or -fno-slp-vectorize are given, honor this selection. If no flag... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bd30bf8ac99b433e221cdf444cc2d11fc1753984;p=clang If -fslp-vectorize or -fno-slp-vectorize are given, honor this selection. If no flag is given, enable it for -O3. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187630 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 3a23732ad3..b6f6c3d737 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -1974,6 +1974,12 @@ static bool isOptimizationLevelFast(const ArgList &Args) { return false; } +static bool isOptimizationLevel3(const ArgList &Args) { + if (Arg *A = Args.getLastArg(options::OPT_O_Group)) + return StringRef(A->getValue()).equals("3"); + return false; +} + void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, @@ -3452,9 +3458,17 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, options::OPT_fno_vectorize, true)) CmdArgs.push_back("-vectorize-loops"); - // -fslp-vectorize is default. - if (Args.hasFlag(options::OPT_fslp_vectorize, - options::OPT_fno_slp_vectorize, true)) + bool EnableSLP = false; + // If -fslp-vectorize or -fno-slp-vectorize are given, honor this selection. + if (Arg *A = Args.getLastArg(options::OPT_fslp_vectorize, + options::OPT_fno_slp_vectorize)) { + EnableSLP = A->getOption().matches(options::OPT_fslp_vectorize); + } else { + // Also enable SLP vectorization on O3 or OFast + EnableSLP = isOptimizationLevel3(Args) || isOptimizationLevelFast(Args); + } + + if (EnableSLP) CmdArgs.push_back("-vectorize-slp"); // -fno-slp-vectorize-aggressive is default.