if (LHS->getType()->isPointerTy())
if (auto *C = computePointerICmp(Q.DL, Q.TLI, Q.DT, Pred, Q.CxtI, LHS, RHS))
return C;
+ if (auto *CLHS = dyn_cast<PtrToIntOperator>(LHS))
+ if (auto *CRHS = dyn_cast<PtrToIntOperator>(RHS))
+ if (Q.DL.getTypeSizeInBits(CLHS->getPointerOperandType()) ==
+ Q.DL.getTypeSizeInBits(CLHS->getType()) &&
+ Q.DL.getTypeSizeInBits(CRHS->getPointerOperandType()) ==
+ Q.DL.getTypeSizeInBits(CRHS->getType()))
+ if (auto *C = computePointerICmp(Q.DL, Q.TLI, Q.DT, Pred, Q.CxtI,
+ CLHS->getPointerOperand(),
+ CRHS->getPointerOperand()))
+ return C;
if (GetElementPtrInst *GLHS = dyn_cast<GetElementPtrInst>(LHS)) {
if (GEPOperator *GRHS = dyn_cast<GEPOperator>(RHS)) {
; CHECK-NEXT: ret i1 false
}
+define i1 @gep17() {
+; CHECK-LABEL: @gep17(
+ %alloca = alloca i32, align 4
+ %bc = bitcast i32* %alloca to [4 x i8]*
+ %gep1 = getelementptr inbounds i32, i32* %alloca, i32 1
+ %pti1 = ptrtoint i32* %gep1 to i32
+ %gep2 = getelementptr inbounds [4 x i8], [4 x i8]* %bc, i32 0, i32 1
+ %pti2 = ptrtoint i8* %gep2 to i32
+ %cmp = icmp ugt i32 %pti1, %pti2
+ ret i1 %cmp
+; CHECK-NEXT: ret i1 true
+}
+
define i1 @zext(i32 %x) {
; CHECK-LABEL: @zext(
%e1 = zext i32 %x to i64