1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
2
; RUN: llc -mattr=+sve -force-streaming-compatible-sve < %s | FileCheck %s
3
+ ; RUN: llc -mattr=+sme -force-streaming-compatible-sve < %s | FileCheck %s
4
+ ; RUN: llc -force-streaming-compatible-sve < %s | FileCheck %s --check-prefix=NONEON-NOSVE
3
5
4
6
target triple = "aarch64-unknown-linux-gnu"
5
7
@@ -28,6 +30,23 @@ define void @alloc_v4i8(ptr %st_ptr) nounwind {
28
30
; CHECK-NEXT: ldp x20, x19, [sp, #32] // 16-byte Folded Reload
29
31
; CHECK-NEXT: add sp, sp, #48
30
32
; CHECK-NEXT: ret
33
+ ;
34
+ ; NONEON-NOSVE-LABEL: alloc_v4i8:
35
+ ; NONEON-NOSVE: // %bb.0:
36
+ ; NONEON-NOSVE-NEXT: sub sp, sp, #32
37
+ ; NONEON-NOSVE-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill
38
+ ; NONEON-NOSVE-NEXT: mov x19, x0
39
+ ; NONEON-NOSVE-NEXT: add x0, sp, #12
40
+ ; NONEON-NOSVE-NEXT: bl def
41
+ ; NONEON-NOSVE-NEXT: ldr s0, [sp, #12]
42
+ ; NONEON-NOSVE-NEXT: ushll v0.8h, v0.8b, #0
43
+ ; NONEON-NOSVE-NEXT: umov w8, v0.h[2]
44
+ ; NONEON-NOSVE-NEXT: umov w9, v0.h[0]
45
+ ; NONEON-NOSVE-NEXT: strb w8, [x19, #1]
46
+ ; NONEON-NOSVE-NEXT: strb w9, [x19]
47
+ ; NONEON-NOSVE-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload
48
+ ; NONEON-NOSVE-NEXT: add sp, sp, #32
49
+ ; NONEON-NOSVE-NEXT: ret
31
50
%alloc = alloca [4 x i8 ]
32
51
call void @def (ptr %alloc )
33
52
%load = load <4 x i8 >, ptr %alloc
@@ -40,38 +59,51 @@ define void @alloc_v6i8(ptr %st_ptr) nounwind {
40
59
; CHECK-LABEL: alloc_v6i8:
41
60
; CHECK: // %bb.0:
42
61
; CHECK-NEXT: sub sp, sp, #48
43
- ; CHECK-NEXT: stp x20 , x19, [sp, #32] // 16-byte Folded Spill
62
+ ; CHECK-NEXT: stp x30 , x19, [sp, #32] // 16-byte Folded Spill
44
63
; CHECK-NEXT: mov x19, x0
45
64
; CHECK-NEXT: add x0, sp, #24
46
- ; CHECK-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
47
- ; CHECK-NEXT: add x20, sp, #24
48
65
; CHECK-NEXT: bl def
49
- ; CHECK-NEXT: ptrue p0.b, vl3
50
- ; CHECK-NEXT: ptrue p1.s, vl2
51
- ; CHECK-NEXT: ld2b { z0.b, z1.b }, p0/z, [x20]
66
+ ; CHECK-NEXT: ldr d0, [sp, #24]
52
67
; CHECK-NEXT: ptrue p0.h, vl4
53
- ; CHECK-NEXT: mov z2.b, z1.b[3]
68
+ ; CHECK-NEXT: ptrue p1.s, vl2
69
+ ; CHECK-NEXT: mov z1.b, z0.b[3]
70
+ ; CHECK-NEXT: mov z2.b, z0.b[5]
71
+ ; CHECK-NEXT: mov z0.b, z0.b[1]
54
72
; CHECK-NEXT: fmov w8, s1
55
- ; CHECK-NEXT: mov z3.b, z1.b[2]
56
- ; CHECK-NEXT: mov z4.b, z1.b[1]
57
- ; CHECK-NEXT: strh w8, [sp]
58
- ; CHECK-NEXT: fmov w8, s2
59
- ; CHECK-NEXT: fmov w9, s3
60
- ; CHECK-NEXT: strh w8, [sp, #6]
61
- ; CHECK-NEXT: fmov w8, s4
62
- ; CHECK-NEXT: strh w9, [sp, #4]
63
- ; CHECK-NEXT: strh w8, [sp, #2]
64
- ; CHECK-NEXT: add x8, sp, #12
65
- ; CHECK-NEXT: ldr d0, [sp]
73
+ ; CHECK-NEXT: fmov w9, s2
74
+ ; CHECK-NEXT: strh w8, [sp, #10]
75
+ ; CHECK-NEXT: fmov w8, s0
76
+ ; CHECK-NEXT: strh w9, [sp, #12]
77
+ ; CHECK-NEXT: strh w8, [sp, #8]
78
+ ; CHECK-NEXT: add x8, sp, #20
79
+ ; CHECK-NEXT: ldr d0, [sp, #8]
66
80
; CHECK-NEXT: st1b { z0.h }, p0, [x8]
67
81
; CHECK-NEXT: ld1h { z0.s }, p1/z, [x8]
68
82
; CHECK-NEXT: strb w9, [x19, #2]
69
- ; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
70
83
; CHECK-NEXT: fmov w8, s0
71
84
; CHECK-NEXT: strh w8, [x19]
72
- ; CHECK-NEXT: ldp x20 , x19, [sp, #32] // 16-byte Folded Reload
85
+ ; CHECK-NEXT: ldp x30 , x19, [sp, #32] // 16-byte Folded Reload
73
86
; CHECK-NEXT: add sp, sp, #48
74
87
; CHECK-NEXT: ret
88
+ ;
89
+ ; NONEON-NOSVE-LABEL: alloc_v6i8:
90
+ ; NONEON-NOSVE: // %bb.0:
91
+ ; NONEON-NOSVE-NEXT: sub sp, sp, #32
92
+ ; NONEON-NOSVE-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill
93
+ ; NONEON-NOSVE-NEXT: mov x19, x0
94
+ ; NONEON-NOSVE-NEXT: add x0, sp, #8
95
+ ; NONEON-NOSVE-NEXT: bl def
96
+ ; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]
97
+ ; NONEON-NOSVE-NEXT: add x9, x19, #2
98
+ ; NONEON-NOSVE-NEXT: rev16 v1.16b, v0.16b
99
+ ; NONEON-NOSVE-NEXT: xtn v1.8b, v1.8h
100
+ ; NONEON-NOSVE-NEXT: str s1, [sp, #4]
101
+ ; NONEON-NOSVE-NEXT: ldrh w8, [sp, #4]
102
+ ; NONEON-NOSVE-NEXT: st1 { v0.b }[5], [x9]
103
+ ; NONEON-NOSVE-NEXT: strh w8, [x19]
104
+ ; NONEON-NOSVE-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload
105
+ ; NONEON-NOSVE-NEXT: add sp, sp, #32
106
+ ; NONEON-NOSVE-NEXT: ret
75
107
%alloc = alloca [6 x i8 ]
76
108
call void @def (ptr %alloc )
77
109
%load = load <6 x i8 >, ptr %alloc
@@ -100,6 +132,22 @@ define void @alloc_v32i8(ptr %st_ptr) nounwind {
100
132
; CHECK-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
101
133
; CHECK-NEXT: add sp, sp, #48
102
134
; CHECK-NEXT: ret
135
+ ;
136
+ ; NONEON-NOSVE-LABEL: alloc_v32i8:
137
+ ; NONEON-NOSVE: // %bb.0:
138
+ ; NONEON-NOSVE-NEXT: sub sp, sp, #48
139
+ ; NONEON-NOSVE-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
140
+ ; NONEON-NOSVE-NEXT: mov x19, x0
141
+ ; NONEON-NOSVE-NEXT: mov x0, sp
142
+ ; NONEON-NOSVE-NEXT: bl def
143
+ ; NONEON-NOSVE-NEXT: ldp q0, q1, [sp]
144
+ ; NONEON-NOSVE-NEXT: add x8, x19, #8
145
+ ; NONEON-NOSVE-NEXT: xtn v0.8b, v0.8h
146
+ ; NONEON-NOSVE-NEXT: st1 { v1.b }[0], [x8]
147
+ ; NONEON-NOSVE-NEXT: str d0, [x19]
148
+ ; NONEON-NOSVE-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
149
+ ; NONEON-NOSVE-NEXT: add sp, sp, #48
150
+ ; NONEON-NOSVE-NEXT: ret
103
151
%alloc = alloca [32 x i8 ]
104
152
call void @def (ptr %alloc )
105
153
%load = load <32 x i8 >, ptr %alloc
@@ -128,6 +176,22 @@ define void @alloc_v8f64(ptr %st_ptr) nounwind {
128
176
; CHECK-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload
129
177
; CHECK-NEXT: add sp, sp, #96
130
178
; CHECK-NEXT: ret
179
+ ;
180
+ ; NONEON-NOSVE-LABEL: alloc_v8f64:
181
+ ; NONEON-NOSVE: // %bb.0:
182
+ ; NONEON-NOSVE-NEXT: sub sp, sp, #80
183
+ ; NONEON-NOSVE-NEXT: stp x30, x19, [sp, #64] // 16-byte Folded Spill
184
+ ; NONEON-NOSVE-NEXT: mov x19, x0
185
+ ; NONEON-NOSVE-NEXT: mov x0, sp
186
+ ; NONEON-NOSVE-NEXT: bl def
187
+ ; NONEON-NOSVE-NEXT: ldp q1, q0, [sp, #32]
188
+ ; NONEON-NOSVE-NEXT: ldp q3, q2, [sp]
189
+ ; NONEON-NOSVE-NEXT: zip1 v0.2d, v1.2d, v0.2d
190
+ ; NONEON-NOSVE-NEXT: zip1 v1.2d, v3.2d, v2.2d
191
+ ; NONEON-NOSVE-NEXT: stp q1, q0, [x19]
192
+ ; NONEON-NOSVE-NEXT: ldp x30, x19, [sp, #64] // 16-byte Folded Reload
193
+ ; NONEON-NOSVE-NEXT: add sp, sp, #80
194
+ ; NONEON-NOSVE-NEXT: ret
131
195
%alloc = alloca [8 x double ]
132
196
call void @def (ptr %alloc )
133
197
%load = load <8 x double >, ptr %alloc
0 commit comments