@@ -230,14 +230,11 @@ define <16 x i8> @combine_vec_sdiv_by_pow2b_v16i8(<16 x i8> %x) {
230230; CHECK-SD-NEXT: movi v3.2d, #0x000000000000ff
231231; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI14_0]
232232; CHECK-SD-NEXT: adrp x8, .LCPI14_1
233- ; CHECK-SD-NEXT: movi v4.2d, #0xffffffffffffff00
234233; CHECK-SD-NEXT: ushl v1.16b, v1.16b, v2.16b
235234; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI14_1]
236235; CHECK-SD-NEXT: add v1.16b, v0.16b, v1.16b
237- ; CHECK-SD-NEXT: and v0.16b, v0.16b, v3.16b
238236; CHECK-SD-NEXT: sshl v1.16b, v1.16b, v2.16b
239- ; CHECK-SD-NEXT: and v1.16b, v1.16b, v4.16b
240- ; CHECK-SD-NEXT: orr v0.16b, v0.16b, v1.16b
237+ ; CHECK-SD-NEXT: bif v0.16b, v1.16b, v3.16b
241238; CHECK-SD-NEXT: ret
242239;
243240; CHECK-GI-LABEL: combine_vec_sdiv_by_pow2b_v16i8:
@@ -265,21 +262,17 @@ define <16 x i8> @combine_vec_sdiv_by_pow2b_v16i8(<16 x i8> %x) {
265262define <8 x i16 > @combine_vec_sdiv_by_pow2b_v8i16 (<8 x i16 > %x ) {
266263; CHECK-SD-LABEL: combine_vec_sdiv_by_pow2b_v8i16:
267264; CHECK-SD: // %bb.0:
268- ; CHECK-SD-NEXT: adrp x8, .LCPI15_1
265+ ; CHECK-SD-NEXT: adrp x8, .LCPI15_0
269266; CHECK-SD-NEXT: cmlt v1.8h, v0.8h, #0
270- ; CHECK-SD-NEXT: adrp x9, .LCPI15_3
267+ ; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI15_0]
268+ ; CHECK-SD-NEXT: adrp x8, .LCPI15_1
269+ ; CHECK-SD-NEXT: ushl v1.8h, v1.8h, v2.8h
271270; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI15_1]
272271; CHECK-SD-NEXT: adrp x8, .LCPI15_2
273- ; CHECK-SD-NEXT: ldr q3, [x9, :lo12:.LCPI15_3]
274- ; CHECK-SD-NEXT: ushl v1.8h, v1.8h, v2.8h
275- ; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI15_2]
276- ; CHECK-SD-NEXT: adrp x8, .LCPI15_0
277272; CHECK-SD-NEXT: add v1.8h, v0.8h, v1.8h
278273; CHECK-SD-NEXT: sshl v1.8h, v1.8h, v2.8h
279- ; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI15_0]
280- ; CHECK-SD-NEXT: and v0.16b, v0.16b, v2.16b
281- ; CHECK-SD-NEXT: and v1.16b, v1.16b, v3.16b
282- ; CHECK-SD-NEXT: orr v0.16b, v0.16b, v1.16b
274+ ; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI15_2]
275+ ; CHECK-SD-NEXT: bif v0.16b, v1.16b, v2.16b
283276; CHECK-SD-NEXT: ret
284277;
285278; CHECK-GI-LABEL: combine_vec_sdiv_by_pow2b_v8i16:
@@ -308,28 +301,22 @@ define <8 x i16> @combine_vec_sdiv_by_pow2b_v8i16(<8 x i16> %x) {
308301define <16 x i16 > @combine_vec_sdiv_by_pow2b_v16i16 (<16 x i16 > %x ) {
309302; CHECK-SD-LABEL: combine_vec_sdiv_by_pow2b_v16i16:
310303; CHECK-SD: // %bb.0:
311- ; CHECK-SD-NEXT: adrp x8, .LCPI16_1
304+ ; CHECK-SD-NEXT: adrp x8, .LCPI16_0
312305; CHECK-SD-NEXT: cmlt v2.8h, v0.8h, #0
313306; CHECK-SD-NEXT: cmlt v3.8h, v1.8h, #0
314- ; CHECK-SD-NEXT: ldr q4, [x8, :lo12:.LCPI16_1 ]
315- ; CHECK-SD-NEXT: adrp x8, .LCPI16_2
307+ ; CHECK-SD-NEXT: ldr q4, [x8, :lo12:.LCPI16_0 ]
308+ ; CHECK-SD-NEXT: adrp x8, .LCPI16_1
316309; CHECK-SD-NEXT: ushl v2.8h, v2.8h, v4.8h
317310; CHECK-SD-NEXT: ushl v3.8h, v3.8h, v4.8h
318- ; CHECK-SD-NEXT: ldr q4, [x8, :lo12:.LCPI16_2]
319- ; CHECK-SD-NEXT: adrp x8, .LCPI16_0
320- ; CHECK-SD-NEXT: ldr q5, [x8, :lo12:.LCPI16_0]
321- ; CHECK-SD-NEXT: adrp x8, .LCPI16_3
311+ ; CHECK-SD-NEXT: ldr q4, [x8, :lo12:.LCPI16_1]
312+ ; CHECK-SD-NEXT: adrp x8, .LCPI16_2
322313; CHECK-SD-NEXT: add v2.8h, v0.8h, v2.8h
323314; CHECK-SD-NEXT: add v3.8h, v1.8h, v3.8h
324- ; CHECK-SD-NEXT: and v0.16b, v0.16b, v5.16b
325- ; CHECK-SD-NEXT: and v1.16b, v1.16b, v5.16b
326315; CHECK-SD-NEXT: sshl v2.8h, v2.8h, v4.8h
327316; CHECK-SD-NEXT: sshl v3.8h, v3.8h, v4.8h
328- ; CHECK-SD-NEXT: ldr q4, [x8, :lo12:.LCPI16_3]
329- ; CHECK-SD-NEXT: and v2.16b, v2.16b, v4.16b
330- ; CHECK-SD-NEXT: and v3.16b, v3.16b, v4.16b
331- ; CHECK-SD-NEXT: orr v0.16b, v0.16b, v2.16b
332- ; CHECK-SD-NEXT: orr v1.16b, v1.16b, v3.16b
317+ ; CHECK-SD-NEXT: ldr q4, [x8, :lo12:.LCPI16_2]
318+ ; CHECK-SD-NEXT: bif v0.16b, v2.16b, v4.16b
319+ ; CHECK-SD-NEXT: bif v1.16b, v3.16b, v4.16b
333320; CHECK-SD-NEXT: ret
334321;
335322; CHECK-GI-LABEL: combine_vec_sdiv_by_pow2b_v16i16:
@@ -363,42 +350,32 @@ define <16 x i16> @combine_vec_sdiv_by_pow2b_v16i16(<16 x i16> %x) {
363350define <32 x i16 > @combine_vec_sdiv_by_pow2b_v32i16 (<32 x i16 > %x ) {
364351; CHECK-SD-LABEL: combine_vec_sdiv_by_pow2b_v32i16:
365352; CHECK-SD: // %bb.0:
366- ; CHECK-SD-NEXT: adrp x8, .LCPI17_1
353+ ; CHECK-SD-NEXT: adrp x8, .LCPI17_0
367354; CHECK-SD-NEXT: cmlt v4.8h, v0.8h, #0
368355; CHECK-SD-NEXT: cmlt v5.8h, v1.8h, #0
369356; CHECK-SD-NEXT: cmlt v7.8h, v2.8h, #0
370357; CHECK-SD-NEXT: cmlt v16.8h, v3.8h, #0
371- ; CHECK-SD-NEXT: ldr q6, [x8, :lo12:.LCPI17_1 ]
372- ; CHECK-SD-NEXT: adrp x8, .LCPI17_2
358+ ; CHECK-SD-NEXT: ldr q6, [x8, :lo12:.LCPI17_0 ]
359+ ; CHECK-SD-NEXT: adrp x8, .LCPI17_1
373360; CHECK-SD-NEXT: ushl v4.8h, v4.8h, v6.8h
374361; CHECK-SD-NEXT: ushl v5.8h, v5.8h, v6.8h
375362; CHECK-SD-NEXT: ushl v7.8h, v7.8h, v6.8h
376363; CHECK-SD-NEXT: ushl v6.8h, v16.8h, v6.8h
377- ; CHECK-SD-NEXT: ldr q16, [x8, :lo12:.LCPI17_2 ]
378- ; CHECK-SD-NEXT: adrp x8, .LCPI17_0
364+ ; CHECK-SD-NEXT: ldr q16, [x8, :lo12:.LCPI17_1 ]
365+ ; CHECK-SD-NEXT: adrp x8, .LCPI17_2
379366; CHECK-SD-NEXT: add v4.8h, v0.8h, v4.8h
380367; CHECK-SD-NEXT: add v5.8h, v1.8h, v5.8h
381- ; CHECK-SD-NEXT: ldr q17, [x8, :lo12:.LCPI17_0]
382368; CHECK-SD-NEXT: add v7.8h, v2.8h, v7.8h
383369; CHECK-SD-NEXT: add v6.8h, v3.8h, v6.8h
384- ; CHECK-SD-NEXT: adrp x8, .LCPI17_3
385- ; CHECK-SD-NEXT: and v0.16b, v0.16b, v17.16b
386- ; CHECK-SD-NEXT: and v1.16b, v1.16b, v17.16b
387- ; CHECK-SD-NEXT: and v2.16b, v2.16b, v17.16b
388370; CHECK-SD-NEXT: sshl v4.8h, v4.8h, v16.8h
389371; CHECK-SD-NEXT: sshl v5.8h, v5.8h, v16.8h
390- ; CHECK-SD-NEXT: and v3.16b, v3.16b, v17.16b
391372; CHECK-SD-NEXT: sshl v7.8h, v7.8h, v16.8h
392373; CHECK-SD-NEXT: sshl v6.8h, v6.8h, v16.8h
393- ; CHECK-SD-NEXT: ldr q16, [x8, :lo12:.LCPI17_3]
394- ; CHECK-SD-NEXT: and v4.16b, v4.16b, v16.16b
395- ; CHECK-SD-NEXT: and v5.16b, v5.16b, v16.16b
396- ; CHECK-SD-NEXT: and v7.16b, v7.16b, v16.16b
397- ; CHECK-SD-NEXT: and v6.16b, v6.16b, v16.16b
398- ; CHECK-SD-NEXT: orr v0.16b, v0.16b, v4.16b
399- ; CHECK-SD-NEXT: orr v1.16b, v1.16b, v5.16b
400- ; CHECK-SD-NEXT: orr v2.16b, v2.16b, v7.16b
401- ; CHECK-SD-NEXT: orr v3.16b, v3.16b, v6.16b
374+ ; CHECK-SD-NEXT: ldr q16, [x8, :lo12:.LCPI17_2]
375+ ; CHECK-SD-NEXT: bif v0.16b, v4.16b, v16.16b
376+ ; CHECK-SD-NEXT: bif v1.16b, v5.16b, v16.16b
377+ ; CHECK-SD-NEXT: bif v2.16b, v7.16b, v16.16b
378+ ; CHECK-SD-NEXT: bif v3.16b, v6.16b, v16.16b
402379; CHECK-SD-NEXT: ret
403380;
404381; CHECK-GI-LABEL: combine_vec_sdiv_by_pow2b_v32i16:
@@ -904,29 +881,21 @@ define <16 x i8> @non_splat_minus_one_divisor_0(<16 x i8> %A) {
904881define <16 x i8 > @non_splat_minus_one_divisor_1 (<16 x i8 > %A ) {
905882; CHECK-SD-LABEL: non_splat_minus_one_divisor_1:
906883; CHECK-SD: // %bb.0:
907- ; CHECK-SD-NEXT: adrp x8, .LCPI26_1
884+ ; CHECK-SD-NEXT: adrp x8, .LCPI26_0
908885; CHECK-SD-NEXT: cmlt v1.16b, v0.16b, #0
909- ; CHECK-SD-NEXT: adrp x9, .LCPI26_3
886+ ; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI26_0]
887+ ; CHECK-SD-NEXT: adrp x8, .LCPI26_1
888+ ; CHECK-SD-NEXT: ushl v1.16b, v1.16b, v2.16b
910889; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI26_1]
911890; CHECK-SD-NEXT: adrp x8, .LCPI26_2
912- ; CHECK-SD-NEXT: ldr q3, [x9, :lo12:.LCPI26_3]
913- ; CHECK-SD-NEXT: adrp x9, .LCPI26_5
914- ; CHECK-SD-NEXT: ushl v1.16b, v1.16b, v2.16b
915- ; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI26_2]
916- ; CHECK-SD-NEXT: adrp x8, .LCPI26_0
917891; CHECK-SD-NEXT: add v1.16b, v0.16b, v1.16b
918892; CHECK-SD-NEXT: sshl v1.16b, v1.16b, v2.16b
919- ; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI26_0]
920- ; CHECK-SD-NEXT: adrp x8, .LCPI26_4
921- ; CHECK-SD-NEXT: and v0.16b, v0.16b, v2.16b
922- ; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI26_4]
923- ; CHECK-SD-NEXT: and v1.16b, v1.16b, v3.16b
924- ; CHECK-SD-NEXT: ldr q3, [x9, :lo12:.LCPI26_5]
925- ; CHECK-SD-NEXT: orr v0.16b, v0.16b, v1.16b
893+ ; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI26_2]
894+ ; CHECK-SD-NEXT: adrp x8, .LCPI26_3
895+ ; CHECK-SD-NEXT: bif v0.16b, v1.16b, v2.16b
896+ ; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI26_3]
926897; CHECK-SD-NEXT: neg v1.16b, v0.16b
927- ; CHECK-SD-NEXT: and v0.16b, v0.16b, v2.16b
928- ; CHECK-SD-NEXT: and v1.16b, v1.16b, v3.16b
929- ; CHECK-SD-NEXT: orr v0.16b, v1.16b, v0.16b
898+ ; CHECK-SD-NEXT: bit v0.16b, v1.16b, v2.16b
930899; CHECK-SD-NEXT: ret
931900;
932901; CHECK-GI-LABEL: non_splat_minus_one_divisor_1:
0 commit comments