[llvm] r240556 - [LoopVectorizer] Fix bailing-out condition for OptForSize case.

Michael Zolotukhin mzolotukhin at apple.com
Wed Jun 24 10:26:25 PDT 2015


Author: mzolotukhin
Date: Wed Jun 24 12:26:24 2015
New Revision: 240556

URL: http://llvm.org/viewvc/llvm-project?rev=240556&view=rev
Log:
[LoopVectorizer] Fix bailing-out condition for OptForSize case.

With option OptForSize enabled, the Loop Vectorizer is not supposed to
create tail loop. The condition checking that was invalid and was not
matching to the comment above.

Patch by Marianne Mailhot-Sarrasin.

Added:
    llvm/trunk/test/Transforms/LoopVectorize/optsize.ll
Modified:
    llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp

Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=240556&r1=240555&r2=240556&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp (original)
+++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Wed Jun 24 12:26:24 2015
@@ -4642,10 +4642,9 @@ LoopVectorizationCostModel::selectVector
 
     if (VF == 0)
       VF = MaxVectorSize;
-
-    // If the trip count that we found modulo the vectorization factor is not
-    // zero then we require a tail.
-    if (VF < 2) {
+    else {
+      // If the trip count that we found modulo the vectorization factor is not
+      // zero then we require a tail.
       emitAnalysis(VectorizationReport() <<
                    "cannot optimize for size and vectorize at the "
                    "same time. Enable vectorization of this loop "

Added: llvm/trunk/test/Transforms/LoopVectorize/optsize.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopVectorize/optsize.ll?rev=240556&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/LoopVectorize/optsize.ll (added)
+++ llvm/trunk/test/Transforms/LoopVectorize/optsize.ll Wed Jun 24 12:26:24 2015
@@ -0,0 +1,34 @@
+; This test verifies that the loop vectorizer will NOT produce a tail
+; loop with Optimize for size attibute.
+; REQUIRES: asserts
+; RUN: opt < %s -loop-vectorize -Os -debug -debug-only=loop-vectorize -S 2>&1 | FileCheck %s
+
+;CHECK-NOT: <2 x i8>
+;CHECK-NOT: <4 x i8>
+;CHECK: Aborting. A tail loop is required in Os.
+
+target datalayout = "E-m:e-p:32:32-i64:32-f64:32:64-a:0:32-n32-S128"
+
+ at tab = common global [32 x i8] zeroinitializer, align 1
+
+; Function Attrs: nounwind optsize
+define i32 @foo() #0 {
+entry:
+  br label %for.body
+
+for.body:                                         ; preds = %for.body, %entry
+  %i.08 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
+  %arrayidx = getelementptr inbounds [32 x i8], [32 x i8]* @tab, i32 0, i32 %i.08
+  %0 = load i8, i8* %arrayidx, align 1
+  %cmp1 = icmp eq i8 %0, 0
+  %. = select i1 %cmp1, i8 2, i8 1
+  store i8 %., i8* %arrayidx, align 1
+  %inc = add nsw i32 %i.08, 1
+  %exitcond = icmp eq i32 %i.08, 202
+  br i1 %exitcond, label %for.end, label %for.body
+
+for.end:                                          ; preds = %for.body
+  ret i32 0
+}
+
+attributes #0 = { nounwind optsize "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }





More information about the llvm-commits mailing list