diff --git a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp index 2e41886359dab..38a79f055e9ed 100644 --- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp +++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp @@ -370,14 +370,14 @@ static bool simplifyAssocCastAssoc(BinaryOperator *BinOp1, // inttoptr ( ptrtoint (x) ) --> x Value *InstCombinerImpl::simplifyIntToPtrRoundTripCast(Value *Val) { auto *IntToPtr = dyn_cast(Val); - if (IntToPtr && DL.getPointerTypeSizeInBits(IntToPtr->getDestTy()) == + if (IntToPtr && DL.getTypeSizeInBits(IntToPtr->getDestTy()) == DL.getTypeSizeInBits(IntToPtr->getSrcTy())) { auto *PtrToInt = dyn_cast(IntToPtr->getOperand(0)); Type *CastTy = IntToPtr->getDestTy(); if (PtrToInt && CastTy->getPointerAddressSpace() == PtrToInt->getSrcTy()->getPointerAddressSpace() && - DL.getPointerTypeSizeInBits(PtrToInt->getSrcTy()) == + DL.getTypeSizeInBits(PtrToInt->getSrcTy()) == DL.getTypeSizeInBits(PtrToInt->getDestTy())) { return CastInst::CreateBitOrPointerCast(PtrToInt->getOperand(0), CastTy, "", PtrToInt); diff --git a/llvm/test/Transforms/InstCombine/ptr-int-ptr-icmp.ll b/llvm/test/Transforms/InstCombine/ptr-int-ptr-icmp.ll index a73dc419d7e6b..5249aa4269e87 100644 --- a/llvm/test/Transforms/InstCombine/ptr-int-ptr-icmp.ll +++ b/llvm/test/Transforms/InstCombine/ptr-int-ptr-icmp.ll @@ -17,6 +17,28 @@ define i1 @func(ptr %X, ptr %Y) { ret i1 %cmp } +define <2 x i1> @func_vec(<2 x ptr> %X, <2 x ptr> %Y) { +; CHECK-LABEL: @func_vec( +; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x ptr> [[X:%.*]], [[Y:%.*]] +; CHECK-NEXT: ret <2 x i1> [[CMP]] +; + %i = ptrtoint <2 x ptr> %X to <2 x i64> + %p = inttoptr <2 x i64> %i to <2 x ptr> + %cmp = icmp eq <2 x ptr> %p, %Y + ret <2 x i1> %cmp +} + +define @func_svec( %X, %Y) { +; CHECK-LABEL: @func_svec( +; CHECK-NEXT: [[CMP:%.*]] = icmp eq [[X:%.*]], [[Y:%.*]] +; CHECK-NEXT: ret [[CMP]] +; + %i = ptrtoint %X to + %p = inttoptr %i to + %cmp = icmp eq %p, %Y + ret %cmp +} + define i1 @func_pointer_different_types(ptr %X, ptr %Y) { ; CHECK-LABEL: @func_pointer_different_types( ; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[X:%.*]], [[Y:%.*]]