[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