diff options
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 12 | ||||
| -rw-r--r-- | clang/test/Driver/clang_f_opts.c | 3 |
2 files changed, 14 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)) diff --git a/clang/test/Driver/clang_f_opts.c b/clang/test/Driver/clang_f_opts.c index 0cf4cc910b2..5ab89d5c641 100644 --- a/clang/test/Driver/clang_f_opts.c +++ b/clang/test/Driver/clang_f_opts.c @@ -45,6 +45,7 @@ // CHECK-NO-UNROLL-LOOPS: "-fno-unroll-loops" // RUN: %clang -### -S -fvectorize %s 2>&1 | FileCheck -check-prefix=CHECK-VECTORIZE %s +// RUN: %clang -### -S -fvectorize -fno-unroll-loops %s 2>&1 | FileCheck -check-prefix=CHECK-VECTORIZE-NO-UNROLL %s // RUN: %clang -### -S -fno-vectorize -fvectorize %s 2>&1 | FileCheck -check-prefix=CHECK-VECTORIZE %s // RUN: %clang -### -S -fno-vectorize %s 2>&1 | FileCheck -check-prefix=CHECK-NO-VECTORIZE %s // RUN: %clang -### -S -fvectorize -fno-vectorize %s 2>&1 | FileCheck -check-prefix=CHECK-NO-VECTORIZE %s @@ -65,6 +66,8 @@ // RUN: %clang -### -S -Oz %s 2>&1 | FileCheck -check-prefix=CHECK-NO-VECTORIZE %s // CHECK-VECTORIZE: "-vectorize-loops" // CHECK-NO-VECTORIZE-NOT: "-vectorize-loops" +// CHECK-VECTORIZE-NOT: "-backend-option" "-force-vector-unroll=1" +// CHECK-VECTORIZE-NO-UNROLL: "-backend-option" "-force-vector-unroll=1" // RUN: %clang -### -S -fslp-vectorize %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s // RUN: %clang -### -S -fno-slp-vectorize -fslp-vectorize %s 2>&1 | FileCheck -check-prefix=CHECK-SLP-VECTORIZE %s |

