summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2009-12-17 21:27:47 +0000
committerEli Friedman <eli.friedman@gmail.com>2009-12-17 21:27:47 +0000
commit7cc86b4cc63ccb0d3117255a3b9b724c7f86f40f (patch)
tree31fb31329017e31440a01012e459bc56a7c532d6
parente43b403c87cf5432c57c0d841bd6beb65154b249 (diff)
downloadbcm5719-llvm-7cc86b4cc63ccb0d3117255a3b9b724c7f86f40f.tar.gz
bcm5719-llvm-7cc86b4cc63ccb0d3117255a3b9b724c7f86f40f.zip
Make the ptrtoint comparison simplification work if one side is a global.
llvm-svn: 91624
-rw-r--r--llvm/lib/Transforms/Scalar/InstructionCombining.cpp2
-rw-r--r--llvm/test/Transforms/InstCombine/cast_ptr.ll9
2 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
index c7359c4de76..2c73e7ae0fe 100644
--- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -6452,7 +6452,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
// if (X) ...
// For generality, we handle any zero-extension of any operand comparison
// with a constant or another cast from the same type.
- if (isa<ConstantInt>(Op1) || isa<CastInst>(Op1))
+ if (isa<Constant>(Op1) || isa<CastInst>(Op1))
if (Instruction *R = visitICmpInstWithCastAndCast(I))
return R;
}
diff --git a/llvm/test/Transforms/InstCombine/cast_ptr.ll b/llvm/test/Transforms/InstCombine/cast_ptr.ll
index 6544e7d735a..6a00e839784 100644
--- a/llvm/test/Transforms/InstCombine/cast_ptr.ll
+++ b/llvm/test/Transforms/InstCombine/cast_ptr.ll
@@ -27,3 +27,12 @@ define i1 @test2(i8* %a, i8* %b) {
ret i1 %r
}
+; These casts should also be folded away.
+; CHECK: @test3
+; CHECK: icmp eq i8* %a, @global
+@global = global i8 0
+define i1 @test3(i8* %a) {
+ %tmpa = ptrtoint i8* %a to i32
+ %r = icmp eq i32 %tmpa, ptrtoint (i8* @global to i32)
+ ret i1 %r
+}
OpenPOWER on IntegriCloud