@@ -6,12 +6,14 @@ define i1 @andn_icmp_eq_i8(i8 signext %a, i8 signext %b) nounwind {
66; LA32-LABEL: andn_icmp_eq_i8:
77; LA32: # %bb.0:
88; LA32-NEXT: andn $a0, $a1, $a0
9+ ; LA32-NEXT: andi $a0, $a0, 255
910; LA32-NEXT: sltui $a0, $a0, 1
1011; LA32-NEXT: ret
1112;
1213; LA64-LABEL: andn_icmp_eq_i8:
1314; LA64: # %bb.0:
1415; LA64-NEXT: andn $a0, $a1, $a0
16+ ; LA64-NEXT: andi $a0, $a0, 255
1517; LA64-NEXT: sltui $a0, $a0, 1
1618; LA64-NEXT: ret
1719 %and = and i8 %a , %b
@@ -23,12 +25,14 @@ define i1 @andn_icmp_eq_i16(i16 signext %a, i16 signext %b) nounwind {
2325; LA32-LABEL: andn_icmp_eq_i16:
2426; LA32: # %bb.0:
2527; LA32-NEXT: andn $a0, $a1, $a0
28+ ; LA32-NEXT: bstrpick.w $a0, $a0, 15, 0
2629; LA32-NEXT: sltui $a0, $a0, 1
2730; LA32-NEXT: ret
2831;
2932; LA64-LABEL: andn_icmp_eq_i16:
3033; LA64: # %bb.0:
3134; LA64-NEXT: andn $a0, $a1, $a0
35+ ; LA64-NEXT: bstrpick.d $a0, $a0, 15, 0
3236; LA64-NEXT: sltui $a0, $a0, 1
3337; LA64-NEXT: ret
3438 %and = and i16 %a , %b
@@ -76,12 +80,14 @@ define i1 @andn_icmp_ne_i8(i8 signext %a, i8 signext %b) nounwind {
7680; LA32-LABEL: andn_icmp_ne_i8:
7781; LA32: # %bb.0:
7882; LA32-NEXT: andn $a0, $a1, $a0
83+ ; LA32-NEXT: andi $a0, $a0, 255
7984; LA32-NEXT: sltu $a0, $zero, $a0
8085; LA32-NEXT: ret
8186;
8287; LA64-LABEL: andn_icmp_ne_i8:
8388; LA64: # %bb.0:
8489; LA64-NEXT: andn $a0, $a1, $a0
90+ ; LA64-NEXT: andi $a0, $a0, 255
8591; LA64-NEXT: sltu $a0, $zero, $a0
8692; LA64-NEXT: ret
8793 %and = and i8 %a , %b
@@ -93,12 +99,14 @@ define i1 @andn_icmp_ne_i16(i16 signext %a, i16 signext %b) nounwind {
9399; LA32-LABEL: andn_icmp_ne_i16:
94100; LA32: # %bb.0:
95101; LA32-NEXT: andn $a0, $a1, $a0
102+ ; LA32-NEXT: bstrpick.w $a0, $a0, 15, 0
96103; LA32-NEXT: sltu $a0, $zero, $a0
97104; LA32-NEXT: ret
98105;
99106; LA64-LABEL: andn_icmp_ne_i16:
100107; LA64: # %bb.0:
101108; LA64-NEXT: andn $a0, $a1, $a0
109+ ; LA64-NEXT: bstrpick.d $a0, $a0, 15, 0
102110; LA64-NEXT: sltu $a0, $zero, $a0
103111; LA64-NEXT: ret
104112 %and = and i16 %a , %b
@@ -145,13 +153,15 @@ define i1 @andn_icmp_ne_i64(i64 %a, i64 %b) nounwind {
145153define i1 @andn_icmp_ult_i8 (i8 signext %a , i8 signext %b ) nounwind {
146154; LA32-LABEL: andn_icmp_ult_i8:
147155; LA32: # %bb.0:
148- ; LA32-NEXT: and $a0, $a0, $a1
156+ ; LA32-NEXT: andi $a1, $a1, 255
157+ ; LA32-NEXT: and $a0, $a1, $a0
149158; LA32-NEXT: sltu $a0, $a0, $a1
150159; LA32-NEXT: ret
151160;
152161; LA64-LABEL: andn_icmp_ult_i8:
153162; LA64: # %bb.0:
154- ; LA64-NEXT: and $a0, $a0, $a1
163+ ; LA64-NEXT: andi $a1, $a1, 255
164+ ; LA64-NEXT: and $a0, $a1, $a0
155165; LA64-NEXT: sltu $a0, $a0, $a1
156166; LA64-NEXT: ret
157167 %and = and i8 %a , %b
@@ -162,13 +172,15 @@ define i1 @andn_icmp_ult_i8(i8 signext %a, i8 signext %b) nounwind {
162172define i1 @andn_icmp_ult_i16 (i16 signext %a , i16 signext %b ) nounwind {
163173; LA32-LABEL: andn_icmp_ult_i16:
164174; 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
166177; LA32-NEXT: sltu $a0, $a0, $a1
167178; LA32-NEXT: ret
168179;
169180; LA64-LABEL: andn_icmp_ult_i16:
170181; 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
172184; LA64-NEXT: sltu $a0, $a0, $a1
173185; LA64-NEXT: ret
174186 %and = and i16 %a , %b
@@ -179,14 +191,16 @@ define i1 @andn_icmp_ult_i16(i16 signext %a, i16 signext %b) nounwind {
179191define i1 @andn_icmp_uge_i8 (i8 signext %a , i8 signext %b ) nounwind {
180192; LA32-LABEL: andn_icmp_uge_i8:
181193; LA32: # %bb.0:
182- ; LA32-NEXT: and $a0, $a0, $a1
194+ ; LA32-NEXT: andi $a1, $a1, 255
195+ ; LA32-NEXT: and $a0, $a1, $a0
183196; LA32-NEXT: sltu $a0, $a0, $a1
184197; LA32-NEXT: xori $a0, $a0, 1
185198; LA32-NEXT: ret
186199;
187200; LA64-LABEL: andn_icmp_uge_i8:
188201; LA64: # %bb.0:
189- ; LA64-NEXT: and $a0, $a0, $a1
202+ ; LA64-NEXT: andi $a1, $a1, 255
203+ ; LA64-NEXT: and $a0, $a1, $a0
190204; LA64-NEXT: sltu $a0, $a0, $a1
191205; LA64-NEXT: xori $a0, $a0, 1
192206; LA64-NEXT: ret
@@ -198,14 +212,16 @@ define i1 @andn_icmp_uge_i8(i8 signext %a, i8 signext %b) nounwind {
198212define i1 @andn_icmp_uge_i16 (i16 signext %a , i16 signext %b ) nounwind {
199213; LA32-LABEL: andn_icmp_uge_i16:
200214; 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
202217; LA32-NEXT: sltu $a0, $a0, $a1
203218; LA32-NEXT: xori $a0, $a0, 1
204219; LA32-NEXT: ret
205220;
206221; LA64-LABEL: andn_icmp_uge_i16:
207222; 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
209225; LA64-NEXT: sltu $a0, $a0, $a1
210226; LA64-NEXT: xori $a0, $a0, 1
211227; LA64-NEXT: ret
@@ -217,13 +233,15 @@ define i1 @andn_icmp_uge_i16(i16 signext %a, i16 signext %b) nounwind {
217233define i1 @andn_icmp_ugt_i8 (i8 signext %a , i8 signext %b ) nounwind {
218234; LA32-LABEL: andn_icmp_ugt_i8:
219235; LA32: # %bb.0:
220- ; LA32-NEXT: and $a0, $a0, $a1
236+ ; LA32-NEXT: andi $a1, $a1, 255
237+ ; LA32-NEXT: and $a0, $a1, $a0
221238; LA32-NEXT: sltu $a0, $a1, $a0
222239; LA32-NEXT: ret
223240;
224241; LA64-LABEL: andn_icmp_ugt_i8:
225242; LA64: # %bb.0:
226- ; LA64-NEXT: and $a0, $a0, $a1
243+ ; LA64-NEXT: andi $a1, $a1, 255
244+ ; LA64-NEXT: and $a0, $a1, $a0
227245; LA64-NEXT: sltu $a0, $a1, $a0
228246; LA64-NEXT: ret
229247 %and = and i8 %a , %b
@@ -234,13 +252,15 @@ define i1 @andn_icmp_ugt_i8(i8 signext %a, i8 signext %b) nounwind {
234252define i1 @andn_icmp_ugt_i16 (i16 signext %a , i16 signext %b ) nounwind {
235253; LA32-LABEL: andn_icmp_ugt_i16:
236254; 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
238257; LA32-NEXT: sltu $a0, $a1, $a0
239258; LA32-NEXT: ret
240259;
241260; LA64-LABEL: andn_icmp_ugt_i16:
242261; 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
244264; LA64-NEXT: sltu $a0, $a1, $a0
245265; LA64-NEXT: ret
246266 %and = and i16 %a , %b
@@ -251,14 +271,16 @@ define i1 @andn_icmp_ugt_i16(i16 signext %a, i16 signext %b) nounwind {
251271define i1 @andn_icmp_ule_i8 (i8 signext %a , i8 signext %b ) nounwind {
252272; LA32-LABEL: andn_icmp_ule_i8:
253273; LA32: # %bb.0:
254- ; LA32-NEXT: and $a0, $a0, $a1
274+ ; LA32-NEXT: andi $a1, $a1, 255
275+ ; LA32-NEXT: and $a0, $a1, $a0
255276; LA32-NEXT: sltu $a0, $a1, $a0
256277; LA32-NEXT: xori $a0, $a0, 1
257278; LA32-NEXT: ret
258279;
259280; LA64-LABEL: andn_icmp_ule_i8:
260281; LA64: # %bb.0:
261- ; LA64-NEXT: and $a0, $a0, $a1
282+ ; LA64-NEXT: andi $a1, $a1, 255
283+ ; LA64-NEXT: and $a0, $a1, $a0
262284; LA64-NEXT: sltu $a0, $a1, $a0
263285; LA64-NEXT: xori $a0, $a0, 1
264286; LA64-NEXT: ret
@@ -270,14 +292,16 @@ define i1 @andn_icmp_ule_i8(i8 signext %a, i8 signext %b) nounwind {
270292define i1 @andn_icmp_ule_i16 (i16 signext %a , i16 signext %b ) nounwind {
271293; LA32-LABEL: andn_icmp_ule_i16:
272294; 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
274297; LA32-NEXT: sltu $a0, $a1, $a0
275298; LA32-NEXT: xori $a0, $a0, 1
276299; LA32-NEXT: ret
277300;
278301; LA64-LABEL: andn_icmp_ule_i16:
279302; 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
281305; LA64-NEXT: sltu $a0, $a1, $a0
282306; LA64-NEXT: xori $a0, $a0, 1
283307; LA64-NEXT: ret
0 commit comments