From 9562d4a2d7828460d3613bff29df094d1413f838 Mon Sep 17 00:00:00 2001 From: Nadav Rotem Date: Thu, 1 Aug 2013 22:56:53 +0000 Subject: [PATCH] If -fslp-vectorize or -fno-slp-vectorize are given, honor this selection. If no flag is given, enable it for -O3. llvm-svn: 187630 --- clang/lib/Driver/Tools.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 3a23732..b6f6c3d 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/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. -- 2.7.4