[llvm-commits] [llvm] r72496 - in /llvm/trunk: lib/Transforms/Scalar/LoopStrengthReduce.cpp test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-2.ll

Dan Gohman gohman at apple.com
Wed May 27 14:10:47 PDT 2009


Author: djg
Date: Wed May 27 16:10:47 2009
New Revision: 72496

URL: http://llvm.org/viewvc/llvm-project?rev=72496&view=rev
Log:
Revert 72493 and replace it with a more conservative fix, for now: don't
rewrite the comparison if there is any implicit extension or truncation
on the induction variable. I'm planning for IVUsers to eventually take
over some of the work of this code, and for it to be generalized.

Modified:
    llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp
    llvm/trunk/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-2.ll

Modified: llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp?rev=72496&r1=72495&r2=72496&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp Wed May 27 16:10:47 2009
@@ -1993,6 +1993,12 @@
           ValidScale(!CommonExprs->isZero(), Scale, UsersToProcess))
         continue;
 
+      // Avoid rewriting the compare instruction with an iv which has
+      // implicit extension or truncation built into it.
+      // TODO: This is over-conservative.
+      if (SE->getTypeSizeInBits(CondUse->getOffset()->getType()) != TyBits)
+        continue;
+
       // If scale is negative, use swapped predicate unless it's testing
       // for equality.
       if (Scale < 0 && !Cond->isEquality())
@@ -2005,16 +2011,11 @@
         ConstantInt *CI = ConstantInt::get(NewCmpIntTy, NewCmpVal);
         NewCmpRHS = ConstantExpr::getIntToPtr(CI, NewCmpTy);
       }
-      NewOffset = CondUse->getOffset();
-      if (CondUse->isSigned())
-        NewOffset = SE->getNoopOrSignExtend(CondUse->getOffset(), NewCmpTy);
-      else
-        NewOffset = SE->getNoopOrZeroExtend(CondUse->getOffset(), NewCmpTy);
       NewOffset = TyBits == NewTyBits
-        ? SE->getMulExpr(NewOffset,
+        ? SE->getMulExpr(CondUse->getOffset(),
                          SE->getConstant(ConstantInt::get(CmpTy, Scale)))
         : SE->getConstant(ConstantInt::get(NewCmpIntTy,
-          cast<SCEVConstant>(NewOffset)->getValue()
+          cast<SCEVConstant>(CondUse->getOffset())->getValue()
             ->getSExtValue()*Scale));
       break;
     }

Modified: llvm/trunk/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-2.ll?rev=72496&r1=72495&r2=72496&view=diff

==============================================================================
--- llvm/trunk/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-2.ll (original)
+++ llvm/trunk/test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-2.ll Wed May 27 16:10:47 2009
@@ -31,3 +31,28 @@
 	%indvar.next689 = add i64 %indvar688, 1		; <i64> [#uses=1]
 	br i1 %phitmp654, label %for.cond.i.preheader, label %if.end
 }
+
+define void @promote(%struct.dumperinfo* %di) nounwind {
+entry:
+	br label %if.end
+
+if.end:		; preds = %if.end52, %entry
+	br label %for.cond.i.preheader
+
+for.cond.i.preheader:		; preds = %if.end52, %if.end
+	%indvar688 = phi i32 [ 0, %if.end ], [ %indvar.next689, %if.end52 ]		; <i64> [#uses=3]
+	%tmp690 = shl i32 %indvar688, 12		; <i64> [#uses=1]
+	%pa.0642 = add i32 %tmp690, 0		; <i64> [#uses=1]
+	%tmp692693 = add i32 %indvar688, 1		; <i32> [#uses=1]
+	%phitmp = sext i32 %tmp692693 to i64		; <i64> [#uses=1]
+	br i1 false, label %if.end52, label %land.lhs.true.i
+
+land.lhs.true.i:		; preds = %for.cond.i.preheader
+	%shr2.i = lshr i32 %pa.0642, 18		; <i64> [#uses=0]
+	unreachable
+
+if.end52:		; preds = %for.cond.i.preheader
+	%phitmp654 = icmp ult i64 %phitmp, 512		; <i1> [#uses=1]
+	%indvar.next689 = add i32 %indvar688, 1		; <i64> [#uses=1]
+	br i1 %phitmp654, label %for.cond.i.preheader, label %if.end
+}





More information about the llvm-commits mailing list