@@ -9,10 +9,11 @@ target triple = "aarch64-unknown-linux-gnu"
99define <4 x i32 > @sdiv_v4i32_negative_pow2_divisor_packed (<4 x i32 > %op1 ) vscale_range(1 ,0 ) #0 {
1010; CHECK-LABEL: sdiv_v4i32_negative_pow2_divisor_packed:
1111; CHECK: // %bb.0:
12- ; CHECK-NEXT: cmlt v1.4s, v0.4s, #0
13- ; CHECK-NEXT: usra v0.4s, v1.4s, #29
14- ; CHECK-NEXT: sshr v0.4s, v0.4s, #3
15- ; CHECK-NEXT: neg v0.4s, v0.4s
12+ ; CHECK-NEXT: ptrue p0.s, vl4
13+ ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
14+ ; CHECK-NEXT: asrd z0.s, p0/m, z0.s, #3
15+ ; CHECK-NEXT: subr z0.s, z0.s, #0 // =0x0
16+ ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
1617; CHECK-NEXT: ret
1718 %res = sdiv <4 x i32 > %op1 , splat (i32 -8 )
1819 ret <4 x i32 > %res
@@ -21,10 +22,11 @@ define <4 x i32> @sdiv_v4i32_negative_pow2_divisor_packed(<4 x i32> %op1) vscale
2122define <2 x i32 > @sdiv_v2i32_negative_pow2_divisor_unpacked (<2 x i32 > %op1 ) vscale_range(1 ,0 ) #0 {
2223; CHECK-LABEL: sdiv_v2i32_negative_pow2_divisor_unpacked:
2324; CHECK: // %bb.0:
24- ; CHECK-NEXT: cmlt v1.2s, v0.2s, #0
25- ; CHECK-NEXT: usra v0.2s, v1.2s, #29
26- ; CHECK-NEXT: sshr v0.2s, v0.2s, #3
27- ; CHECK-NEXT: neg v0.2s, v0.2s
25+ ; CHECK-NEXT: ptrue p0.s, vl2
26+ ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
27+ ; CHECK-NEXT: asrd z0.s, p0/m, z0.s, #3
28+ ; CHECK-NEXT: subr z0.s, z0.s, #0 // =0x0
29+ ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
2830; CHECK-NEXT: ret
2931 %res = sdiv <2 x i32 > %op1 , splat (i32 -8 )
3032 ret <2 x i32 > %res
0 commit comments