Constant fold ptrtoint + compare with address spaces

llvm-svn: 191699
This commit is contained in:
Matt Arsenault 2013-09-30 21:06:18 +00:00
parent 6ca84e3758
commit 06adecabe7
2 changed files with 21 additions and 1 deletions

View File

@ -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);

View File

@ -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