[llvm-commits] [llvm] r58075 - in /llvm/trunk: lib/Analysis/ConstantFolding.cpp test/Transforms/InstCombine/2008-10-23-ConstFoldWithoutMask.ll

Nick Lewycky nicholas at mxc.ca
Thu Oct 23 23:14:27 PDT 2008


Author: nicholas
Date: Fri Oct 24 01:14:27 2008
New Revision: 58075

URL: http://llvm.org/viewvc/llvm-project?rev=58075&view=rev
Log:
Don't try to create a mask when we don't need one. Fixes a crash.

Added:
    llvm/trunk/test/Transforms/InstCombine/2008-10-23-ConstFoldWithoutMask.ll
Modified:
    llvm/trunk/lib/Analysis/ConstantFolding.cpp

Modified: llvm/trunk/lib/Analysis/ConstantFolding.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ConstantFolding.cpp?rev=58075&r1=58074&r2=58075&view=diff

==============================================================================
--- llvm/trunk/lib/Analysis/ConstantFolding.cpp (original)
+++ llvm/trunk/lib/Analysis/ConstantFolding.cpp Fri Oct 24 01:14:27 2008
@@ -368,10 +368,12 @@
       if (TD && CE->getOpcode() == Instruction::IntToPtr) {
         Constant *Input = CE->getOperand(0);
         unsigned InWidth = Input->getType()->getPrimitiveSizeInBits();
-        Constant *Mask = 
-          ConstantInt::get(APInt::getLowBitsSet(InWidth,
-                                                TD->getPointerSizeInBits()));
-        Input = ConstantExpr::getAnd(Input, Mask);
+        if (TD->getPointerSizeInBits() < InWidth) {
+          Constant *Mask = 
+            ConstantInt::get(APInt::getLowBitsSet(InWidth,
+                                                  TD->getPointerSizeInBits()));
+          Input = ConstantExpr::getAnd(Input, Mask);
+        }
         // Do a zext or trunc to get to the dest size.
         return ConstantExpr::getIntegerCast(Input, DestTy, false);
       }

Added: llvm/trunk/test/Transforms/InstCombine/2008-10-23-ConstFoldWithoutMask.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/2008-10-23-ConstFoldWithoutMask.ll?rev=58075&view=auto

==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/2008-10-23-ConstFoldWithoutMask.ll (added)
+++ llvm/trunk/test/Transforms/InstCombine/2008-10-23-ConstFoldWithoutMask.ll Fri Oct 24 01:14:27 2008
@@ -0,0 +1,8 @@
+; RUN: llvm-as < %s | opt -instcombine
+; PR2940
+
+define i32 @tstid() {
+	%var0 = inttoptr i32 1 to i8*		; <i8*> [#uses=1]
+	%var2 = ptrtoint i8* %var0 to i32		; <i32> [#uses=1]
+	ret i32 %var2
+}





More information about the llvm-commits mailing list