From f9dd19f49833e083f8d32ea015d6d5b57be5e4f4 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Mon, 30 Sep 2013 21:06:18 +0000 Subject: [PATCH] Constant fold ptrtoint + compare with address spaces git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191699 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../InstCombine/InstCombineCompares.cpp | 2 +- test/Transforms/InstCombine/cast_ptr.ll | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/Transforms/InstCombine/InstCombineCompares.cpp b/lib/Transforms/InstCombine/InstCombineCompares.cpp index 402f8c33029..f691350fed8 100644 --- a/lib/Transforms/InstCombine/InstCombineCompares.cpp +++ b/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(ICI.getOperand(1))) { RHSOp = ConstantExpr::getIntToPtr(RHSC, SrcTy); diff --git a/test/Transforms/InstCombine/cast_ptr.ll b/test/Transforms/InstCombine/cast_ptr.ll index 62166adf01e..d415810694d 100644 --- a/test/Transforms/InstCombine/cast_ptr.ll +++ b/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 -- 2.34.1