summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Driver')
-rw-r--r--clang/lib/Driver/Tools.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index c30c45d26bd..89df632d5c0 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -3382,9 +3382,19 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
OptSpecifier VectorizeAliasOption = EnableVec ? options::OPT_O_Group :
options::OPT_fvectorize;
if (Args.hasFlag(options::OPT_fvectorize, VectorizeAliasOption,
- options::OPT_fno_vectorize, EnableVec))
+ options::OPT_fno_vectorize, EnableVec)) {
CmdArgs.push_back("-vectorize-loops");
+ // In addition to the regular loop unrolling transformation, the loop
+ // vectorizer can also unroll loops. If no unrolling has specifically been
+ // requested, then also prevent the loop vectorizer from unrolling loops.
+ if (Args.hasFlag(options::OPT_fno_unroll_loops,
+ options::OPT_funroll_loops, false)) {
+ CmdArgs.push_back("-backend-option");
+ CmdArgs.push_back("-force-vector-unroll=1");
+ }
+ }
+
// -fslp-vectorize is default.
if (Args.hasFlag(options::OPT_fslp_vectorize,
options::OPT_fno_slp_vectorize, true))
OpenPOWER on IntegriCloud