diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2013-09-30 21:06:18 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2013-09-30 21:06:18 +0000 |
commit | 06adecabe74d3836931f289034b7ff5dd556acad (patch) | |
tree | 2430da25e4be6ddef0b4cdbfdaf7911a2de7f18a | |
parent | 6ca84e3758c3a74982fe3cfb1ae0ecca59371388 (diff) | |
download | bcm5719-llvm-06adecabe74d3836931f289034b7ff5dd556acad.tar.gz bcm5719-llvm-06adecabe74d3836931f289034b7ff5dd556acad.zip |
Constant fold ptrtoint + compare with address spaces
llvm-svn: 191699
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp | 2 | ||||
-rw-r--r-- | llvm/test/Transforms/InstCombine/cast_ptr.ll | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp index 402f8c33029..f691350fed8 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp @@ -1782,7 +1782,7 @@ Instruction *InstCombiner::visitICmpInstWithCastAndCast(ICmpInst &ICI) { // Turn icmp (ptrtoint x), (ptrtoint/c) into a compare of the input if the // integer type is the same size as the pointer type. if (TD && LHSCI->getOpcode() == Instruction::PtrToInt && - TD->getPointerSizeInBits() == DestTy->getIntegerBitWidth()) { + TD->getPointerTypeSizeInBits(SrcTy) == DestTy->getIntegerBitWidth()) { Value *RHSOp = 0; if (Constant *RHSC = dyn_cast<Constant>(ICI.getOperand(1))) { RHSOp = ConstantExpr::getIntToPtr(RHSC, SrcTy); diff --git a/llvm/test/Transforms/InstCombine/cast_ptr.ll b/llvm/test/Transforms/InstCombine/cast_ptr.ll index 62166adf01e..d415810694d 100644 --- a/llvm/test/Transforms/InstCombine/cast_ptr.ll +++ b/llvm/test/Transforms/InstCombine/cast_ptr.ll @@ -27,6 +27,26 @@ define i1 @test2(i8* %a, i8* %b) { ret i1 %r } +; These casts should be folded away. +; CHECK-LABEL: @test2_as2_same_int( +; CHECK: icmp eq i8 addrspace(2)* %a, %b +define i1 @test2_as2_same_int(i8 addrspace(2)* %a, i8 addrspace(2)* %b) { + %tmpa = ptrtoint i8 addrspace(2)* %a to i16 + %tmpb = ptrtoint i8 addrspace(2)* %b to i16 + %r = icmp eq i16 %tmpa, %tmpb + ret i1 %r +} + +; These casts should be folded away. +; CHECK-LABEL: @test2_as2_larger( +; CHECK: icmp eq i8 addrspace(2)* %a, %b +define i1 @test2_as2_larger(i8 addrspace(2)* %a, i8 addrspace(2)* %b) { + %tmpa = ptrtoint i8 addrspace(2)* %a to i32 + %tmpb = ptrtoint i8 addrspace(2)* %b to i32 + %r = icmp eq i32 %tmpa, %tmpb + ret i1 %r +} + ; These casts should also be folded away. ; CHECK-LABEL: @test3( ; CHECK: icmp eq i8* %a, @global |