Skip to content

Commit aa88812

Browse files
committed
[InstCombine] Relax the one-use constraints for icmp pred (binop X, Z), (binop Y, Z)
1 parent 7177f67 commit aa88812

File tree

2 files changed

+6
-7
lines changed

2 files changed

+6
-7
lines changed

llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4911,8 +4911,9 @@ Instruction *InstCombinerImpl::foldICmpBinOp(ICmpInst &I,
49114911
}
49124912
}
49134913

4914-
if (BO0 && BO1 && BO0->getOpcode() == BO1->getOpcode() && BO0->hasOneUse() &&
4915-
BO1->hasOneUse() && BO0->getOperand(1) == BO1->getOperand(1)) {
4914+
if (BO0 && BO1 && BO0->getOpcode() == BO1->getOpcode() &&
4915+
(BO0->hasOneUse() || BO1->hasOneUse()) &&
4916+
BO0->getOperand(1) == BO1->getOperand(1)) {
49164917
switch (BO0->getOpcode()) {
49174918
default:
49184919
break;

llvm/test/Transforms/InstCombine/icmp.ll

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -819,8 +819,7 @@ define i1 @test46_multiuse1(i32 %X, i32 %Y, i32 %Z) {
819819
; CHECK-LABEL: @test46_multiuse1(
820820
; CHECK-NEXT: [[A:%.*]] = ashr exact i32 [[X:%.*]], [[Z:%.*]]
821821
; CHECK-NEXT: call void @use_i32(i32 [[A]])
822-
; CHECK-NEXT: [[B:%.*]] = ashr exact i32 [[Y:%.*]], [[Z]]
823-
; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[A]], [[B]]
822+
; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[X]], [[Y:%.*]]
824823
; CHECK-NEXT: ret i1 [[C]]
825824
;
826825
%A = ashr exact i32 %X, %Z
@@ -832,10 +831,9 @@ define i1 @test46_multiuse1(i32 %X, i32 %Y, i32 %Z) {
832831

833832
define i1 @test46_multiuse2(i32 %X, i32 %Y, i32 %Z) {
834833
; CHECK-LABEL: @test46_multiuse2(
835-
; CHECK-NEXT: [[A:%.*]] = ashr exact i32 [[X:%.*]], [[Z:%.*]]
836-
; CHECK-NEXT: [[B:%.*]] = ashr exact i32 [[Y:%.*]], [[Z]]
834+
; CHECK-NEXT: [[B:%.*]] = ashr exact i32 [[Y:%.*]], [[Z:%.*]]
837835
; CHECK-NEXT: call void @use_i32(i32 [[B]])
838-
; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[A]], [[B]]
836+
; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[X:%.*]], [[Y]]
839837
; CHECK-NEXT: ret i1 [[C]]
840838
;
841839
%A = ashr exact i32 %X, %Z

0 commit comments

Comments
 (0)