@@ -49,13 +49,10 @@ define i1 @test-same-operands-sub-add-nsw-nuw-icmp-eq(i8 %a, i8 %b) {
49
49
ret i1 %cmp
50
50
}
51
51
52
- ; Check not folded
53
52
define i1 @test-same-operands-sub-add-nsw-icmp-eq (i8 %a , i8 %b ) {
54
53
; CHECK-LABEL: define i1 @test-same-operands-sub-add-nsw-icmp-eq(
55
54
; 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
59
56
; CHECK-NEXT: ret i1 [[CMP]]
60
57
;
61
58
%sub = sub nsw i8 %a , %b
@@ -64,10 +61,13 @@ define i1 @test-same-operands-sub-add-nsw-icmp-eq(i8 %a, i8 %b) {
64
61
ret i1 %cmp
65
62
}
66
63
64
+ ; Should floded by foldICmpCommutative in the future
67
65
define i1 @test-add-sub-nsw-icmp-sgt (i8 %a , i8 %b ) {
68
66
; CHECK-LABEL: define i1 @test-add-sub-nsw-icmp-sgt(
69
67
; 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]]
71
71
; CHECK-NEXT: ret i1 [[CMP]]
72
72
;
73
73
%sub = sub nsw i8 %a , %b
@@ -76,10 +76,14 @@ define i1 @test-add-sub-nsw-icmp-sgt(i8 %a, i8 %b) {
76
76
ret i1 %cmp
77
77
}
78
78
79
+ ; Should floded by foldICmpCommutative in the future
79
80
define i1 @test-add-sub-nuw-icmp-uge (i8 %a , i8 %b ) {
80
81
; CHECK-LABEL: define i1 @test-add-sub-nuw-icmp-uge(
81
82
; 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]]
83
87
;
84
88
%sub = sub nuw i8 %a , %b
85
89
%add = add nuw i8 %a , %b
@@ -102,10 +106,14 @@ define i1 @test-add-sub-nuw-icmp-sge(i8 %a, i8 %b) {
102
106
ret i1 %cmp
103
107
}
104
108
109
+ ; Should floded by foldICmpCommutative in the future
105
110
define i1 @test-add-swap-sub-nuw-icmp-uge (i8 %a , i8 %b ) {
106
111
; CHECK-LABEL: define i1 @test-add-swap-sub-nuw-icmp-uge(
107
112
; 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]]
109
117
;
110
118
%sub = sub nuw i8 %a , %b
111
119
%add = add nuw i8 %b , %a
0 commit comments