6
6
7
7
target triple = "aarch64-unknown-linux-gnu"
8
8
9
- define <4 x i32 > @sdiv_v4i32_packed (<4 x i32 > %op1 ) vscale_range(1 ,0 ) #0 {
10
- ; CHECK-LABEL: sdiv_v4i32_packed:
9
+ define <4 x i32 > @sdiv_v4i32_negative_pow2_divisor_packed (<4 x i32 > %op1 ) vscale_range(1 ,0 ) #0 {
10
+ ; CHECK-LABEL: sdiv_v4i32_negative_pow2_divisor_packed:
11
+ ; 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
16
+ ; CHECK-NEXT: ret
17
+ %res = sdiv <4 x i32 > %op1 , splat (i32 -8 )
18
+ ret <4 x i32 > %res
19
+ }
20
+
21
+ define <2 x i32 > @sdiv_v2i32_negative_pow2_divisor_unpacked (<2 x i32 > %op1 ) vscale_range(1 ,0 ) #0 {
22
+ ; CHECK-LABEL: sdiv_v2i32_negative_pow2_divisor_unpacked:
23
+ ; 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
28
+ ; CHECK-NEXT: ret
29
+ %res = sdiv <2 x i32 > %op1 , splat (i32 -8 )
30
+ ret <2 x i32 > %res
31
+ }
32
+
33
+ define <4 x i32 > @sdiv_v4i32_positive_pow2_divisor_packed (<4 x i32 > %op1 ) vscale_range(1 ,0 ) #0 {
34
+ ; CHECK-LABEL: sdiv_v4i32_positive_pow2_divisor_packed:
11
35
; CHECK: // %bb.0:
12
36
; CHECK-NEXT: cmlt v1.4s, v0.4s, #0
13
37
; CHECK-NEXT: usra v0.4s, v1.4s, #29
@@ -17,8 +41,8 @@ define <4 x i32> @sdiv_v4i32_packed(<4 x i32> %op1) vscale_range(1,0) #0 {
17
41
ret <4 x i32 > %res
18
42
}
19
43
20
- define <2 x i32 > @sdiv_v2i32_unpacked (<2 x i32 > %op1 ) vscale_range(1 ,0 ) #0 {
21
- ; CHECK-LABEL: sdiv_v2i32_unpacked :
44
+ define <2 x i32 > @sdiv_v2i32_positive_pow2_divisor_unpacked (<2 x i32 > %op1 ) vscale_range(1 ,0 ) #0 {
45
+ ; CHECK-LABEL: sdiv_v2i32_positive_pow2_divisor_unpacked :
22
46
; CHECK: // %bb.0:
23
47
; CHECK-NEXT: cmlt v1.2s, v0.2s, #0
24
48
; CHECK-NEXT: usra v0.2s, v1.2s, #29
0 commit comments