Skip to content

Commit 23585d3

Browse files
committed
Relax equality no wrap constraints & remove swap handling
1 parent c0cf491 commit 23585d3

File tree

2 files changed

+18
-17
lines changed

2 files changed

+18
-17
lines changed

llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7751,18 +7751,11 @@ Instruction *InstCombinerImpl::visitICmpInst(ICmpInst &I) {
77517751
bool I1NUW = I1->hasNoUnsignedWrap();
77527752
bool I0NSW = I0->hasNoSignedWrap();
77537753
bool I1NSW = I1->hasNoSignedWrap();
7754-
bool Swaped = false;
77557754
if ((UnsignedCmp && I0NUW && I1NUW) || (SignedCmp && I0NSW && I1NSW) ||
7756-
(EqualityCmp && I0NUW && I0NSW && I1NUW && I1NSW)) {
7757-
if (I0->getOpcode() == Instruction::Add &&
7758-
I1->getOpcode() == Instruction::Sub) {
7759-
std::swap(I0, I1);
7760-
Swaped = true;
7761-
}
7755+
(EqualityCmp && ((I0NUW && I1NUW) || (I0NSW && I1NSW)))) {
77627756
if (match(I0, m_Sub(m_Value(A), m_Value(B))) &&
7763-
(match(I1, m_Add(m_Specific(A), m_Specific(B))) ||
7764-
match(I1, m_Add(m_Specific(B), m_Specific(A))))) {
7765-
return new ICmpInst(Swaped ? Pred : I.getSwappedPredicate(), B,
7757+
match(I1, m_Add(m_Specific(A), m_Specific(B)))) {
7758+
return new ICmpInst(I.getSwappedPredicate(), B,
77667759
ConstantInt::get(Op0->getType(), 0));
77677760
}
77687761
}

llvm/test/Transforms/InstCombine/icmp-subadd.ll

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,10 @@ define i1 @test-same-operands-sub-add-nsw-nuw-icmp-eq(i8 %a, i8 %b) {
4949
ret i1 %cmp
5050
}
5151

52-
; Check not folded
5352
define i1 @test-same-operands-sub-add-nsw-icmp-eq(i8 %a, i8 %b) {
5453
; CHECK-LABEL: define i1 @test-same-operands-sub-add-nsw-icmp-eq(
5554
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {
56-
; CHECK-NEXT: [[SUB:%.*]] = sub nsw i8 [[A]], [[B]]
57-
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[A]], [[B]]
58-
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[SUB]], [[ADD]]
55+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[B]], 0
5956
; CHECK-NEXT: ret i1 [[CMP]]
6057
;
6158
%sub = sub nsw i8 %a, %b
@@ -64,10 +61,13 @@ define i1 @test-same-operands-sub-add-nsw-icmp-eq(i8 %a, i8 %b) {
6461
ret i1 %cmp
6562
}
6663

64+
; Should floded by foldICmpCommutative in the future
6765
define i1 @test-add-sub-nsw-icmp-sgt(i8 %a, i8 %b) {
6866
; CHECK-LABEL: define i1 @test-add-sub-nsw-icmp-sgt(
6967
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {
70-
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[B]], 0
68+
; CHECK-NEXT: [[SUB:%.*]] = sub nsw i8 [[A]], [[B]]
69+
; CHECK-NEXT: [[ADD:%.*]] = add nsw i8 [[A]], [[B]]
70+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[ADD]], [[SUB]]
7171
; CHECK-NEXT: ret i1 [[CMP]]
7272
;
7373
%sub = sub nsw i8 %a, %b
@@ -76,10 +76,14 @@ define i1 @test-add-sub-nsw-icmp-sgt(i8 %a, i8 %b) {
7676
ret i1 %cmp
7777
}
7878

79+
; Should floded by foldICmpCommutative in the future
7980
define i1 @test-add-sub-nuw-icmp-uge(i8 %a, i8 %b) {
8081
; CHECK-LABEL: define i1 @test-add-sub-nuw-icmp-uge(
8182
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {
82-
; CHECK-NEXT: ret i1 true
83+
; CHECK-NEXT: [[SUB:%.*]] = sub nuw i8 [[A]], [[B]]
84+
; CHECK-NEXT: [[ADD:%.*]] = add nuw i8 [[A]], [[B]]
85+
; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[ADD]], [[SUB]]
86+
; CHECK-NEXT: ret i1 [[CMP]]
8387
;
8488
%sub = sub nuw i8 %a, %b
8589
%add = add nuw i8 %a, %b
@@ -102,10 +106,14 @@ define i1 @test-add-sub-nuw-icmp-sge(i8 %a, i8 %b) {
102106
ret i1 %cmp
103107
}
104108

109+
; Should floded by foldICmpCommutative in the future
105110
define i1 @test-add-swap-sub-nuw-icmp-uge(i8 %a, i8 %b) {
106111
; CHECK-LABEL: define i1 @test-add-swap-sub-nuw-icmp-uge(
107112
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {
108-
; CHECK-NEXT: ret i1 true
113+
; CHECK-NEXT: [[SUB:%.*]] = sub nuw i8 [[A]], [[B]]
114+
; CHECK-NEXT: [[ADD:%.*]] = add nuw i8 [[B]], [[A]]
115+
; CHECK-NEXT: [[CMP:%.*]] = icmp uge i8 [[ADD]], [[SUB]]
116+
; CHECK-NEXT: ret i1 [[CMP]]
109117
;
110118
%sub = sub nuw i8 %a, %b
111119
%add = add nuw i8 %b, %a

0 commit comments

Comments
 (0)