]> granicus.if.org Git - clang/commitdiff
Disable loop vectorizer unrolling when no unrolling requested
authorHal Finkel <hfinkel@anl.gov>
Wed, 28 Aug 2013 04:40:22 +0000 (04:40 +0000)
committerHal Finkel <hfinkel@anl.gov>
Wed, 28 Aug 2013 04:40:22 +0000 (04:40 +0000)
In addition to the regular loop unrolling transformation, the loop vectorizer
can also unroll loops. If no unrolling has specifically been requested (by
-fno-unroll-loops), and the loop vectorizer will be used, then add the backend
option to (also) prevent the loop vectorizer from unrolling loops.

I confirmed with Nadav (off list) that disabling vectorizer loop unrolling when
-fno-unroll-loops is provided is the desired behavior.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189440 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/Tools.cpp
test/Driver/clang_f_opts.c

index c30c45d26bd165e78b4ab562ba06ac6304667cef..89df632d5c0a62193184a14589529779eb051c11 100644 (file)
@@ -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))
index 0cf4cc910b2c6b4ccc3e0cfba9e0304ad2832f7b..5ab89d5c641972f95ae9be0169ece08262bf4d23 100644 (file)
@@ -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