[llvm-commits] [llvm] r111352 - in /llvm/trunk: lib/Analysis/ValueTracking.cpp test/Analysis/BasicAA/featuretest.ll

Chris Lattner sabre at nondot.org
Tue Aug 17 21:28:19 PDT 2010


Author: lattner
Date: Tue Aug 17 23:28:19 2010
New Revision: 111352

URL: http://llvm.org/viewvc/llvm-project?rev=111352&view=rev
Log:
fix PR7589: In brief:
  gep P, (zext x) != gep P, (sext x)

DecomposeGEPExpression was getting this wrong, confusing
basicaa.


Modified:
    llvm/trunk/lib/Analysis/ValueTracking.cpp
    llvm/trunk/test/Analysis/BasicAA/featuretest.ll

Modified: llvm/trunk/lib/Analysis/ValueTracking.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ValueTracking.cpp?rev=111352&r1=111351&r2=111352&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/ValueTracking.cpp (original)
+++ llvm/trunk/lib/Analysis/ValueTracking.cpp Tue Aug 17 23:28:19 2010
@@ -1018,9 +1018,9 @@
     }
   }
   
-  // Since clients don't care about the high bits of the value, just scales and
-  // offsets, we can look through extensions.
-  if (isa<SExtInst>(V) || isa<ZExtInst>(V)) {
+  // Since GEP indices are sign extended anyway, we don't care about the high
+  // bits of a sign extended value - just scales and offsets.
+  if (isa<SExtInst>(V)) {
     Value *CastOp = cast<CastInst>(V)->getOperand(0);
     unsigned OldWidth = Scale.getBitWidth();
     unsigned SmallWidth = CastOp->getType()->getPrimitiveSizeInBits();

Modified: llvm/trunk/test/Analysis/BasicAA/featuretest.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/BasicAA/featuretest.ll?rev=111352&r1=111351&r2=111352&view=diff
==============================================================================
--- llvm/trunk/test/Analysis/BasicAA/featuretest.ll (original)
+++ llvm/trunk/test/Analysis/BasicAA/featuretest.ll Tue Aug 17 23:28:19 2010
@@ -104,3 +104,24 @@
 ; CHECK: @constexpr_test
 ; CHECK: ret i32 0
 }
+
+
+
+; PR7589
+; These two index expressions are different, this cannot be CSE'd.
+define i16 @zext_sext_confusion(i16* %row2col, i5 %j) nounwind{
+entry:
+  %sum5.cast = zext i5 %j to i64             ; <i64> [#uses=1]
+  %P1 = getelementptr i16* %row2col, i64 %sum5.cast
+  %row2col.load.1.2 = load i16* %P1, align 1 ; <i16> [#uses=1]
+  
+  %sum13.cast31 = sext i5 %j to i6          ; <i6> [#uses=1]
+  %sum13.cast = zext i6 %sum13.cast31 to i64      ; <i64> [#uses=1]
+  %P2 = getelementptr i16* %row2col, i64 %sum13.cast
+  %row2col.load.1.6 = load i16* %P2, align 1 ; <i16> [#uses=1]
+  
+  %.ret = sub i16 %row2col.load.1.6, %row2col.load.1.2 ; <i16> [#uses=1]
+  ret i16 %.ret
+; CHECK: @zext_sext_confusion
+; CHECK: ret i16 %.ret
+}





More information about the llvm-commits mailing list