@@ -6,12 +6,14 @@ define i1 @andn_icmp_eq_i8(i8 signext %a, i8 signext %b) nounwind {
6
6
; LA32-LABEL: andn_icmp_eq_i8:
7
7
; LA32: # %bb.0:
8
8
; LA32-NEXT: andn $a0, $a1, $a0
9
+ ; LA32-NEXT: andi $a0, $a0, 255
9
10
; LA32-NEXT: sltui $a0, $a0, 1
10
11
; LA32-NEXT: ret
11
12
;
12
13
; LA64-LABEL: andn_icmp_eq_i8:
13
14
; LA64: # %bb.0:
14
15
; LA64-NEXT: andn $a0, $a1, $a0
16
+ ; LA64-NEXT: andi $a0, $a0, 255
15
17
; LA64-NEXT: sltui $a0, $a0, 1
16
18
; LA64-NEXT: ret
17
19
%and = and i8 %a , %b
@@ -23,12 +25,14 @@ define i1 @andn_icmp_eq_i16(i16 signext %a, i16 signext %b) nounwind {
23
25
; LA32-LABEL: andn_icmp_eq_i16:
24
26
; LA32: # %bb.0:
25
27
; LA32-NEXT: andn $a0, $a1, $a0
28
+ ; LA32-NEXT: bstrpick.w $a0, $a0, 15, 0
26
29
; LA32-NEXT: sltui $a0, $a0, 1
27
30
; LA32-NEXT: ret
28
31
;
29
32
; LA64-LABEL: andn_icmp_eq_i16:
30
33
; LA64: # %bb.0:
31
34
; LA64-NEXT: andn $a0, $a1, $a0
35
+ ; LA64-NEXT: bstrpick.d $a0, $a0, 15, 0
32
36
; LA64-NEXT: sltui $a0, $a0, 1
33
37
; LA64-NEXT: ret
34
38
%and = and i16 %a , %b
@@ -76,12 +80,14 @@ define i1 @andn_icmp_ne_i8(i8 signext %a, i8 signext %b) nounwind {
76
80
; LA32-LABEL: andn_icmp_ne_i8:
77
81
; LA32: # %bb.0:
78
82
; LA32-NEXT: andn $a0, $a1, $a0
83
+ ; LA32-NEXT: andi $a0, $a0, 255
79
84
; LA32-NEXT: sltu $a0, $zero, $a0
80
85
; LA32-NEXT: ret
81
86
;
82
87
; LA64-LABEL: andn_icmp_ne_i8:
83
88
; LA64: # %bb.0:
84
89
; LA64-NEXT: andn $a0, $a1, $a0
90
+ ; LA64-NEXT: andi $a0, $a0, 255
85
91
; LA64-NEXT: sltu $a0, $zero, $a0
86
92
; LA64-NEXT: ret
87
93
%and = and i8 %a , %b
@@ -93,12 +99,14 @@ define i1 @andn_icmp_ne_i16(i16 signext %a, i16 signext %b) nounwind {
93
99
; LA32-LABEL: andn_icmp_ne_i16:
94
100
; LA32: # %bb.0:
95
101
; LA32-NEXT: andn $a0, $a1, $a0
102
+ ; LA32-NEXT: bstrpick.w $a0, $a0, 15, 0
96
103
; LA32-NEXT: sltu $a0, $zero, $a0
97
104
; LA32-NEXT: ret
98
105
;
99
106
; LA64-LABEL: andn_icmp_ne_i16:
100
107
; LA64: # %bb.0:
101
108
; LA64-NEXT: andn $a0, $a1, $a0
109
+ ; LA64-NEXT: bstrpick.d $a0, $a0, 15, 0
102
110
; LA64-NEXT: sltu $a0, $zero, $a0
103
111
; LA64-NEXT: ret
104
112
%and = and i16 %a , %b
@@ -145,13 +153,15 @@ define i1 @andn_icmp_ne_i64(i64 %a, i64 %b) nounwind {
145
153
define i1 @andn_icmp_ult_i8 (i8 signext %a , i8 signext %b ) nounwind {
146
154
; LA32-LABEL: andn_icmp_ult_i8:
147
155
; LA32: # %bb.0:
148
- ; LA32-NEXT: and $a0, $a0, $a1
156
+ ; LA32-NEXT: andi $a1, $a1, 255
157
+ ; LA32-NEXT: and $a0, $a1, $a0
149
158
; LA32-NEXT: sltu $a0, $a0, $a1
150
159
; LA32-NEXT: ret
151
160
;
152
161
; LA64-LABEL: andn_icmp_ult_i8:
153
162
; LA64: # %bb.0:
154
- ; LA64-NEXT: and $a0, $a0, $a1
163
+ ; LA64-NEXT: andi $a1, $a1, 255
164
+ ; LA64-NEXT: and $a0, $a1, $a0
155
165
; LA64-NEXT: sltu $a0, $a0, $a1
156
166
; LA64-NEXT: ret
157
167
%and = and i8 %a , %b
@@ -162,13 +172,15 @@ define i1 @andn_icmp_ult_i8(i8 signext %a, i8 signext %b) nounwind {
162
172
define i1 @andn_icmp_ult_i16 (i16 signext %a , i16 signext %b ) nounwind {
163
173
; LA32-LABEL: andn_icmp_ult_i16:
164
174
; LA32: # %bb.0:
165
- ; LA32-NEXT: and $a0, $a0, $a1
175
+ ; LA32-NEXT: bstrpick.w $a1, $a1, 15, 0
176
+ ; LA32-NEXT: and $a0, $a1, $a0
166
177
; LA32-NEXT: sltu $a0, $a0, $a1
167
178
; LA32-NEXT: ret
168
179
;
169
180
; LA64-LABEL: andn_icmp_ult_i16:
170
181
; LA64: # %bb.0:
171
- ; LA64-NEXT: and $a0, $a0, $a1
182
+ ; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
183
+ ; LA64-NEXT: and $a0, $a1, $a0
172
184
; LA64-NEXT: sltu $a0, $a0, $a1
173
185
; LA64-NEXT: ret
174
186
%and = and i16 %a , %b
@@ -179,14 +191,16 @@ define i1 @andn_icmp_ult_i16(i16 signext %a, i16 signext %b) nounwind {
179
191
define i1 @andn_icmp_uge_i8 (i8 signext %a , i8 signext %b ) nounwind {
180
192
; LA32-LABEL: andn_icmp_uge_i8:
181
193
; LA32: # %bb.0:
182
- ; LA32-NEXT: and $a0, $a0, $a1
194
+ ; LA32-NEXT: andi $a1, $a1, 255
195
+ ; LA32-NEXT: and $a0, $a1, $a0
183
196
; LA32-NEXT: sltu $a0, $a0, $a1
184
197
; LA32-NEXT: xori $a0, $a0, 1
185
198
; LA32-NEXT: ret
186
199
;
187
200
; LA64-LABEL: andn_icmp_uge_i8:
188
201
; LA64: # %bb.0:
189
- ; LA64-NEXT: and $a0, $a0, $a1
202
+ ; LA64-NEXT: andi $a1, $a1, 255
203
+ ; LA64-NEXT: and $a0, $a1, $a0
190
204
; LA64-NEXT: sltu $a0, $a0, $a1
191
205
; LA64-NEXT: xori $a0, $a0, 1
192
206
; LA64-NEXT: ret
@@ -198,14 +212,16 @@ define i1 @andn_icmp_uge_i8(i8 signext %a, i8 signext %b) nounwind {
198
212
define i1 @andn_icmp_uge_i16 (i16 signext %a , i16 signext %b ) nounwind {
199
213
; LA32-LABEL: andn_icmp_uge_i16:
200
214
; LA32: # %bb.0:
201
- ; LA32-NEXT: and $a0, $a0, $a1
215
+ ; LA32-NEXT: bstrpick.w $a1, $a1, 15, 0
216
+ ; LA32-NEXT: and $a0, $a1, $a0
202
217
; LA32-NEXT: sltu $a0, $a0, $a1
203
218
; LA32-NEXT: xori $a0, $a0, 1
204
219
; LA32-NEXT: ret
205
220
;
206
221
; LA64-LABEL: andn_icmp_uge_i16:
207
222
; LA64: # %bb.0:
208
- ; LA64-NEXT: and $a0, $a0, $a1
223
+ ; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
224
+ ; LA64-NEXT: and $a0, $a1, $a0
209
225
; LA64-NEXT: sltu $a0, $a0, $a1
210
226
; LA64-NEXT: xori $a0, $a0, 1
211
227
; LA64-NEXT: ret
@@ -217,13 +233,15 @@ define i1 @andn_icmp_uge_i16(i16 signext %a, i16 signext %b) nounwind {
217
233
define i1 @andn_icmp_ugt_i8 (i8 signext %a , i8 signext %b ) nounwind {
218
234
; LA32-LABEL: andn_icmp_ugt_i8:
219
235
; LA32: # %bb.0:
220
- ; LA32-NEXT: and $a0, $a0, $a1
236
+ ; LA32-NEXT: andi $a1, $a1, 255
237
+ ; LA32-NEXT: and $a0, $a1, $a0
221
238
; LA32-NEXT: sltu $a0, $a1, $a0
222
239
; LA32-NEXT: ret
223
240
;
224
241
; LA64-LABEL: andn_icmp_ugt_i8:
225
242
; LA64: # %bb.0:
226
- ; LA64-NEXT: and $a0, $a0, $a1
243
+ ; LA64-NEXT: andi $a1, $a1, 255
244
+ ; LA64-NEXT: and $a0, $a1, $a0
227
245
; LA64-NEXT: sltu $a0, $a1, $a0
228
246
; LA64-NEXT: ret
229
247
%and = and i8 %a , %b
@@ -234,13 +252,15 @@ define i1 @andn_icmp_ugt_i8(i8 signext %a, i8 signext %b) nounwind {
234
252
define i1 @andn_icmp_ugt_i16 (i16 signext %a , i16 signext %b ) nounwind {
235
253
; LA32-LABEL: andn_icmp_ugt_i16:
236
254
; LA32: # %bb.0:
237
- ; LA32-NEXT: and $a0, $a0, $a1
255
+ ; LA32-NEXT: bstrpick.w $a1, $a1, 15, 0
256
+ ; LA32-NEXT: and $a0, $a1, $a0
238
257
; LA32-NEXT: sltu $a0, $a1, $a0
239
258
; LA32-NEXT: ret
240
259
;
241
260
; LA64-LABEL: andn_icmp_ugt_i16:
242
261
; LA64: # %bb.0:
243
- ; LA64-NEXT: and $a0, $a0, $a1
262
+ ; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
263
+ ; LA64-NEXT: and $a0, $a1, $a0
244
264
; LA64-NEXT: sltu $a0, $a1, $a0
245
265
; LA64-NEXT: ret
246
266
%and = and i16 %a , %b
@@ -251,14 +271,16 @@ define i1 @andn_icmp_ugt_i16(i16 signext %a, i16 signext %b) nounwind {
251
271
define i1 @andn_icmp_ule_i8 (i8 signext %a , i8 signext %b ) nounwind {
252
272
; LA32-LABEL: andn_icmp_ule_i8:
253
273
; LA32: # %bb.0:
254
- ; LA32-NEXT: and $a0, $a0, $a1
274
+ ; LA32-NEXT: andi $a1, $a1, 255
275
+ ; LA32-NEXT: and $a0, $a1, $a0
255
276
; LA32-NEXT: sltu $a0, $a1, $a0
256
277
; LA32-NEXT: xori $a0, $a0, 1
257
278
; LA32-NEXT: ret
258
279
;
259
280
; LA64-LABEL: andn_icmp_ule_i8:
260
281
; LA64: # %bb.0:
261
- ; LA64-NEXT: and $a0, $a0, $a1
282
+ ; LA64-NEXT: andi $a1, $a1, 255
283
+ ; LA64-NEXT: and $a0, $a1, $a0
262
284
; LA64-NEXT: sltu $a0, $a1, $a0
263
285
; LA64-NEXT: xori $a0, $a0, 1
264
286
; LA64-NEXT: ret
@@ -270,14 +292,16 @@ define i1 @andn_icmp_ule_i8(i8 signext %a, i8 signext %b) nounwind {
270
292
define i1 @andn_icmp_ule_i16 (i16 signext %a , i16 signext %b ) nounwind {
271
293
; LA32-LABEL: andn_icmp_ule_i16:
272
294
; LA32: # %bb.0:
273
- ; LA32-NEXT: and $a0, $a0, $a1
295
+ ; LA32-NEXT: bstrpick.w $a1, $a1, 15, 0
296
+ ; LA32-NEXT: and $a0, $a1, $a0
274
297
; LA32-NEXT: sltu $a0, $a1, $a0
275
298
; LA32-NEXT: xori $a0, $a0, 1
276
299
; LA32-NEXT: ret
277
300
;
278
301
; LA64-LABEL: andn_icmp_ule_i16:
279
302
; LA64: # %bb.0:
280
- ; LA64-NEXT: and $a0, $a0, $a1
303
+ ; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0
304
+ ; LA64-NEXT: and $a0, $a1, $a0
281
305
; LA64-NEXT: sltu $a0, $a1, $a0
282
306
; LA64-NEXT: xori $a0, $a0, 1
283
307
; LA64-NEXT: ret
0 commit comments