@@ -61,11 +61,7 @@ define i32 @scmp_x_y_from_gt_sext_lt(i32 %x, i32 %y) {
61
61
define i32 @ucmp_x_y_from_le_sub_zext_ne (i32 %x , i32 %y ) {
62
62
; CHECK-LABEL: define i32 @ucmp_x_y_from_le_sub_zext_ne(
63
63
; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
64
- ; CHECK-NEXT: [[YM1:%.*]] = add i32 [[Y]], -1
65
- ; CHECK-NEXT: [[CMP1_NOT:%.*]] = icmp ugt i32 [[X]], [[YM1]]
66
- ; CHECK-NEXT: [[NEQ:%.*]] = icmp ne i32 [[X]], [[Y]]
67
- ; CHECK-NEXT: [[ZEXT:%.*]] = zext i1 [[NEQ]] to i32
68
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP1_NOT]], i32 [[ZEXT]], i32 -1
64
+ ; CHECK-NEXT: [[SEL:%.*]] = call i32 @llvm.ucmp.i32.i32(i32 [[X]], i32 [[Y]])
69
65
; CHECK-NEXT: ret i32 [[SEL]]
70
66
;
71
67
%ym1 = sub i32 %y , 1
@@ -80,11 +76,7 @@ define i32 @ucmp_x_y_from_le_sub_zext_ne(i32 %x, i32 %y) {
80
76
define i32 @ucmp_x_y_from_le_sub_zext_gt (i32 %x , i32 %y ) {
81
77
; CHECK-LABEL: define i32 @ucmp_x_y_from_le_sub_zext_gt(
82
78
; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
83
- ; CHECK-NEXT: [[YM1:%.*]] = add i32 [[Y]], -1
84
- ; CHECK-NEXT: [[CMP1_NOT:%.*]] = icmp ugt i32 [[X]], [[YM1]]
85
- ; CHECK-NEXT: [[GT:%.*]] = icmp ugt i32 [[X]], [[Y]]
86
- ; CHECK-NEXT: [[ZEXT:%.*]] = zext i1 [[GT]] to i32
87
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP1_NOT]], i32 [[ZEXT]], i32 -1
79
+ ; CHECK-NEXT: [[SEL:%.*]] = call i32 @llvm.ucmp.i32.i32(i32 [[X]], i32 [[Y]])
88
80
; CHECK-NEXT: ret i32 [[SEL]]
89
81
;
90
82
%ym1 = sub i32 %y , 1
@@ -99,11 +91,7 @@ define i32 @ucmp_x_y_from_le_sub_zext_gt(i32 %x, i32 %y) {
99
91
define i32 @ucmp_x_y_from_ge_add_sext_ne (i32 %x , i32 %y ) {
100
92
; CHECK-LABEL: define i32 @ucmp_x_y_from_ge_add_sext_ne(
101
93
; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
102
- ; CHECK-NEXT: [[YP1:%.*]] = add i32 [[Y]], 1
103
- ; CHECK-NEXT: [[CMP1_NOT:%.*]] = icmp ult i32 [[X]], [[YP1]]
104
- ; CHECK-NEXT: [[NEQ:%.*]] = icmp ne i32 [[X]], [[Y]]
105
- ; CHECK-NEXT: [[SEXT:%.*]] = sext i1 [[NEQ]] to i32
106
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP1_NOT]], i32 [[SEXT]], i32 1
94
+ ; CHECK-NEXT: [[SEL:%.*]] = call i32 @llvm.ucmp.i32.i32(i32 [[X]], i32 [[Y]])
107
95
; CHECK-NEXT: ret i32 [[SEL]]
108
96
;
109
97
%yp1 = add i32 %y , 1
@@ -118,11 +106,7 @@ define i32 @ucmp_x_y_from_ge_add_sext_ne(i32 %x, i32 %y) {
118
106
define i32 @ucmp_x_y_from_ge_add_sext_lt (i32 %x , i32 %y ) {
119
107
; CHECK-LABEL: define i32 @ucmp_x_y_from_ge_add_sext_lt(
120
108
; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
121
- ; CHECK-NEXT: [[YP1:%.*]] = add i32 [[Y]], 1
122
- ; CHECK-NEXT: [[CMP1_NOT:%.*]] = icmp ult i32 [[X]], [[YP1]]
123
- ; CHECK-NEXT: [[LT:%.*]] = icmp ult i32 [[X]], [[Y]]
124
- ; CHECK-NEXT: [[SEXT:%.*]] = sext i1 [[LT]] to i32
125
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP1_NOT]], i32 [[SEXT]], i32 1
109
+ ; CHECK-NEXT: [[SEL:%.*]] = call i32 @llvm.ucmp.i32.i32(i32 [[X]], i32 [[Y]])
126
110
; CHECK-NEXT: ret i32 [[SEL]]
127
111
;
128
112
%yp1 = add i32 %y , 1
@@ -137,11 +121,7 @@ define i32 @ucmp_x_y_from_ge_add_sext_lt(i32 %x, i32 %y) {
137
121
define i32 @scmp_x_y_from_gt_sub_zext_ne (i32 %x , i32 %y ) {
138
122
; CHECK-LABEL: define i32 @scmp_x_y_from_gt_sub_zext_ne(
139
123
; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
140
- ; CHECK-NEXT: [[YM1:%.*]] = add i32 [[Y]], -1
141
- ; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[X]], [[YM1]]
142
- ; CHECK-NEXT: [[NE:%.*]] = icmp ne i32 [[X]], [[Y]]
143
- ; CHECK-NEXT: [[ZEXT:%.*]] = zext i1 [[NE]] to i32
144
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP1]], i32 [[ZEXT]], i32 -1
124
+ ; CHECK-NEXT: [[SEL:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[X]], i32 [[Y]])
145
125
; CHECK-NEXT: ret i32 [[SEL]]
146
126
;
147
127
%ym1 = sub i32 %y , 1
@@ -156,11 +136,7 @@ define i32 @scmp_x_y_from_gt_sub_zext_ne(i32 %x, i32 %y) {
156
136
define i32 @ucmp_x_y_from_gt_sub_zext_gt (i32 %x , i32 %y ) {
157
137
; CHECK-LABEL: define i32 @ucmp_x_y_from_gt_sub_zext_gt(
158
138
; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
159
- ; CHECK-NEXT: [[YM1:%.*]] = add i32 [[Y]], -1
160
- ; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i32 [[X]], [[YM1]]
161
- ; CHECK-NEXT: [[GT:%.*]] = icmp ugt i32 [[X]], [[Y]]
162
- ; CHECK-NEXT: [[ZEXT:%.*]] = zext i1 [[GT]] to i32
163
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP1]], i32 [[ZEXT]], i32 -1
139
+ ; CHECK-NEXT: [[SEL:%.*]] = call i32 @llvm.ucmp.i32.i32(i32 [[X]], i32 [[Y]])
164
140
; CHECK-NEXT: ret i32 [[SEL]]
165
141
;
166
142
%ym1 = sub i32 %y , 1
@@ -175,11 +151,7 @@ define i32 @ucmp_x_y_from_gt_sub_zext_gt(i32 %x, i32 %y) {
175
151
define i32 @scmp_x_y_from_lt_add_sext_ne (i32 %x , i32 %y ) {
176
152
; CHECK-LABEL: define i32 @scmp_x_y_from_lt_add_sext_ne(
177
153
; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
178
- ; CHECK-NEXT: [[YP1:%.*]] = add i32 [[Y]], 1
179
- ; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[X]], [[YP1]]
180
- ; CHECK-NEXT: [[NE:%.*]] = icmp ne i32 [[X]], [[Y]]
181
- ; CHECK-NEXT: [[SEXT:%.*]] = sext i1 [[NE]] to i32
182
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP1]], i32 [[SEXT]], i32 1
154
+ ; CHECK-NEXT: [[SEL:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[X]], i32 [[Y]])
183
155
; CHECK-NEXT: ret i32 [[SEL]]
184
156
;
185
157
%yp1 = add i32 %y , 1
@@ -194,11 +166,7 @@ define i32 @scmp_x_y_from_lt_add_sext_ne(i32 %x, i32 %y) {
194
166
define i32 @ucmp_x_y_from_lt_add_sext_lt (i32 %x , i32 %y ) {
195
167
; CHECK-LABEL: define i32 @ucmp_x_y_from_lt_add_sext_lt(
196
168
; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
197
- ; CHECK-NEXT: [[YP1:%.*]] = add i32 [[Y]], 1
198
- ; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i32 [[X]], [[YP1]]
199
- ; CHECK-NEXT: [[LT:%.*]] = icmp ult i32 [[X]], [[Y]]
200
- ; CHECK-NEXT: [[SEXT:%.*]] = sext i1 [[LT]] to i32
201
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP1]], i32 [[SEXT]], i32 1
169
+ ; CHECK-NEXT: [[SEL:%.*]] = call i32 @llvm.ucmp.i32.i32(i32 [[X]], i32 [[Y]])
202
170
; CHECK-NEXT: ret i32 [[SEL]]
203
171
;
204
172
%yp1 = add i32 %y , 1
@@ -214,10 +182,7 @@ define i32 @ucmp_x_y_from_lt_add_sext_lt(i32 %x, i32 %y) {
214
182
define i32 @scmp_x_0_inverted (i32 %x ) {
215
183
; CHECK-LABEL: define i32 @scmp_x_0_inverted(
216
184
; CHECK-SAME: i32 [[X:%.*]]) {
217
- ; CHECK-NEXT: [[TMP4:%.*]] = icmp ne i32 [[X]], 0
218
- ; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[TMP4]] to i32
219
- ; CHECK-NEXT: [[TMP3:%.*]] = icmp sgt i32 [[X]], -1
220
- ; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[TMP3]], i32 [[TMP2]], i32 -1
185
+ ; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[X]], i32 0)
221
186
; CHECK-NEXT: ret i32 [[TMP1]]
222
187
;
223
188
%2 = icmp ne i32 %x , 0
@@ -230,10 +195,7 @@ define i32 @scmp_x_0_inverted(i32 %x) {
230
195
define i32 @scmp_x_neg_6_sgt_form (i32 %x ) {
231
196
; CHECK-LABEL: define i32 @scmp_x_neg_6_sgt_form(
232
197
; CHECK-SAME: i32 [[X:%.*]]) {
233
- ; CHECK-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[X]], -6
234
- ; CHECK-NEXT: [[NE:%.*]] = icmp ne i32 [[X]], -5
235
- ; CHECK-NEXT: [[ZEXT:%.*]] = zext i1 [[NE]] to i32
236
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP1]], i32 [[ZEXT]], i32 -1
198
+ ; CHECK-NEXT: [[SEL:%.*]] = call i32 @llvm.scmp.i32.i32(i32 [[X]], i32 -5)
237
199
; CHECK-NEXT: ret i32 [[SEL]]
238
200
;
239
201
%cmp1 = icmp sgt i32 %x , -6
@@ -246,10 +208,7 @@ define i32 @scmp_x_neg_6_sgt_form(i32 %x) {
246
208
define i32 @ucmp_x_5_ult_form (i32 %x ) {
247
209
; CHECK-LABEL: define i32 @ucmp_x_5_ult_form(
248
210
; CHECK-SAME: i32 [[X:%.*]]) {
249
- ; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i32 [[X]], 6
250
- ; CHECK-NEXT: [[NE:%.*]] = icmp ne i32 [[X]], 5
251
- ; CHECK-NEXT: [[SEXT:%.*]] = sext i1 [[NE]] to i32
252
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[CMP1]], i32 [[SEXT]], i32 1
211
+ ; CHECK-NEXT: [[SEL:%.*]] = call i32 @llvm.ucmp.i32.i32(i32 [[X]], i32 5)
253
212
; CHECK-NEXT: ret i32 [[SEL]]
254
213
;
255
214
%cmp1 = icmp ult i32 %x , 6
0 commit comments