[llvm] 9c5a84b - [InstCombine] Support nusw in icmp of gep with base
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 3 02:51:22 PST 2024
Author: Nikita Popov
Date: 2024-12-03T11:51:14+01:00
New Revision: 9c5a84b394518cb8087eb0b14e9b55244adb61e7
URL: https://github.com/llvm/llvm-project/commit/9c5a84b394518cb8087eb0b14e9b55244adb61e7
DIFF: https://github.com/llvm/llvm-project/commit/9c5a84b394518cb8087eb0b14e9b55244adb61e7.diff
LOG: [InstCombine] Support nusw in icmp of gep with base
Proof: https://alive2.llvm.org/ce/z/omnQXt
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
llvm/test/Transforms/InstCombine/icmp-gep.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
index 58719737766837..74684a81d8aac7 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
@@ -691,7 +691,8 @@ Instruction *InstCombinerImpl::foldGEPICmp(GEPOperator *GEPLHS, Value *RHS,
RHS = RHS->stripPointerCasts();
Value *PtrBase = GEPLHS->getOperand(0);
- if (PtrBase == RHS && (GEPLHS->isInBounds() || ICmpInst::isEquality(Cond))) {
+ if (PtrBase == RHS &&
+ (GEPLHS->hasNoUnsignedSignedWrap() || ICmpInst::isEquality(Cond))) {
// ((gep Ptr, OFFSET) cmp Ptr) ---> (OFFSET cmp 0).
Value *Offset = EmitGEPOffset(GEPLHS);
return new ICmpInst(ICmpInst::getSignedPredicate(Cond), Offset,
diff --git a/llvm/test/Transforms/InstCombine/icmp-gep.ll b/llvm/test/Transforms/InstCombine/icmp-gep.ll
index 776716fe908733..aaa04ade7513e7 100644
--- a/llvm/test/Transforms/InstCombine/icmp-gep.ll
+++ b/llvm/test/Transforms/InstCombine/icmp-gep.ll
@@ -133,6 +133,16 @@ define i1 @ult_base_inbounds(ptr %x, i64 %y) {
ret i1 %r
}
+define i1 @ult_base_nusw(ptr %x, i64 %y) {
+; CHECK-LABEL: @ult_base_nusw(
+; CHECK-NEXT: [[R:%.*]] = icmp slt i64 [[Y:%.*]], 0
+; CHECK-NEXT: ret i1 [[R]]
+;
+ %g = getelementptr nusw i8, ptr %x, i64 %y
+ %r = icmp ult ptr %g, %x
+ ret i1 %r
+}
+
define i1 @ugt_base_inbounds_commute(i64 %y) {
; CHECK-LABEL: @ugt_base_inbounds_commute(
; CHECK-NEXT: [[X:%.*]] = call ptr @getptr()
More information about the llvm-commits
mailing list