[RISCV] Change func to funct in RISCVInstrInfoXqci.td. NFC (#119669)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-streaming-mode-fixed-length-limit-duplane.ll
blob3627390b5edfa9b58f4923abf3650a5d2ddad577
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mattr=+sve -force-streaming-compatible  < %s | FileCheck %s
3 ; RUN: llc -mattr=+sme -force-streaming  < %s | FileCheck %s
4 ; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE
6 target triple = "aarch64-unknown-linux-gnu"
8 define <4 x i32> @test(ptr %arg1, ptr %arg2) {
9 ; CHECK-LABEL: test:
10 ; CHECK:       // %bb.0: // %entry
11 ; CHECK-NEXT:    ldp q0, q1, [x0, #32]
12 ; CHECK-NEXT:    ldp q3, q4, [x0]
13 ; CHECK-NEXT:    add z2.s, z0.s, z0.s
14 ; CHECK-NEXT:    add z5.s, z1.s, z1.s
15 ; CHECK-NEXT:    mov z0.s, z1.s[2]
16 ; CHECK-NEXT:    add z1.s, z3.s, z3.s
17 ; CHECK-NEXT:    add z3.s, z4.s, z4.s
18 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
19 ; CHECK-NEXT:    stp q2, q5, [x0, #32]
20 ; CHECK-NEXT:    stp q1, q3, [x0]
21 ; CHECK-NEXT:    ret
23 ; NONEON-NOSVE-LABEL: test:
24 ; NONEON-NOSVE:       // %bb.0: // %entry
25 ; NONEON-NOSVE-NEXT:    sub sp, sp, #144
26 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 144
27 ; NONEON-NOSVE-NEXT:    ldp q1, q0, [x0, #32]
28 ; NONEON-NOSVE-NEXT:    ldp q2, q3, [x0]
29 ; NONEON-NOSVE-NEXT:    str q1, [sp, #64]
30 ; NONEON-NOSVE-NEXT:    stp q0, q3, [sp, #32]
31 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #60]
32 ; NONEON-NOSVE-NEXT:    str q2, [sp, #16]
33 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #40]
34 ; NONEON-NOSVE-NEXT:    add w9, w9, w9
35 ; NONEON-NOSVE-NEXT:    stp w8, w8, [sp, #8]
36 ; NONEON-NOSVE-NEXT:    str w9, [sp, #124]
37 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #56]
38 ; NONEON-NOSVE-NEXT:    stp w8, w8, [sp]
39 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
40 ; NONEON-NOSVE-NEXT:    add w9, w9, w9
41 ; NONEON-NOSVE-NEXT:    ldr q0, [sp]
42 ; NONEON-NOSVE-NEXT:    str w9, [sp, #120]
43 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #52]
44 ; NONEON-NOSVE-NEXT:    add w9, w9, w9
45 ; NONEON-NOSVE-NEXT:    str w9, [sp, #116]
46 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #48]
47 ; NONEON-NOSVE-NEXT:    add w9, w9, w9
48 ; NONEON-NOSVE-NEXT:    str w9, [sp, #112]
49 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #28]
50 ; NONEON-NOSVE-NEXT:    add w9, w9, w9
51 ; NONEON-NOSVE-NEXT:    str w9, [sp, #92]
52 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #24]
53 ; NONEON-NOSVE-NEXT:    add w9, w9, w9
54 ; NONEON-NOSVE-NEXT:    str w9, [sp, #88]
55 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #20]
56 ; NONEON-NOSVE-NEXT:    add w9, w9, w9
57 ; NONEON-NOSVE-NEXT:    str w9, [sp, #84]
58 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #16]
59 ; NONEON-NOSVE-NEXT:    add w9, w9, w9
60 ; NONEON-NOSVE-NEXT:    str w9, [sp, #80]
61 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #44]
62 ; NONEON-NOSVE-NEXT:    add w9, w9, w9
63 ; NONEON-NOSVE-NEXT:    stp w8, w9, [sp, #104]
64 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #36]
65 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
66 ; NONEON-NOSVE-NEXT:    str w8, [sp, #100]
67 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #32]
68 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
69 ; NONEON-NOSVE-NEXT:    str w8, [sp, #96]
70 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #76]
71 ; NONEON-NOSVE-NEXT:    ldp q4, q2, [sp, #80]
72 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
73 ; NONEON-NOSVE-NEXT:    str w8, [sp, #140]
74 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #72]
75 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
76 ; NONEON-NOSVE-NEXT:    str w8, [sp, #136]
77 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #68]
78 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
79 ; NONEON-NOSVE-NEXT:    str w8, [sp, #132]
80 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #64]
81 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
82 ; NONEON-NOSVE-NEXT:    str w8, [sp, #128]
83 ; NONEON-NOSVE-NEXT:    ldp q3, q1, [sp, #112]
84 ; NONEON-NOSVE-NEXT:    stp q4, q3, [x0]
85 ; NONEON-NOSVE-NEXT:    stp q1, q2, [x0, #32]
86 ; NONEON-NOSVE-NEXT:    add sp, sp, #144
87 ; NONEON-NOSVE-NEXT:    ret
88 entry:
89   %0 = load <16 x i32>, ptr %arg1, align 256
90   %1 = load <16 x i32>, ptr %arg2, align 256
91   %shvec = shufflevector <16 x i32> %0, <16 x i32> %1, <4 x i32> <i32 14, i32 14, i32 14, i32 14>
92   %2 = add <16 x i32> %0, %0
93   store <16 x i32> %2, ptr %arg1, align 256
94   ret <4 x i32> %shvec
97 define <2 x i32> @test2(ptr %arg1, ptr %arg2) {
98 ; CHECK-LABEL: test2:
99 ; CHECK:       // %bb.0: // %entry
100 ; CHECK-NEXT:    ldp q1, q0, [x0, #32]
101 ; CHECK-NEXT:    ldp q3, q4, [x0]
102 ; CHECK-NEXT:    add z2.s, z0.s, z0.s
103 ; CHECK-NEXT:    ext z0.b, z0.b, z0.b, #8
104 ; CHECK-NEXT:    add z1.s, z1.s, z1.s
105 ; CHECK-NEXT:    add z3.s, z3.s, z3.s
106 ; CHECK-NEXT:    add z4.s, z4.s, z4.s
107 ; CHECK-NEXT:    mov z0.s, s0
108 ; CHECK-NEXT:    stp q1, q2, [x0, #32]
109 ; CHECK-NEXT:    stp q3, q4, [x0]
110 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
111 ; CHECK-NEXT:    ret
113 ; NONEON-NOSVE-LABEL: test2:
114 ; NONEON-NOSVE:       // %bb.0: // %entry
115 ; NONEON-NOSVE-NEXT:    sub sp, sp, #144
116 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 144
117 ; NONEON-NOSVE-NEXT:    ldp q1, q0, [x0, #32]
118 ; NONEON-NOSVE-NEXT:    ldp q2, q3, [x0]
119 ; NONEON-NOSVE-NEXT:    str q1, [sp, #64]
120 ; NONEON-NOSVE-NEXT:    stp q0, q3, [sp, #32]
121 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #40]
122 ; NONEON-NOSVE-NEXT:    str q2, [sp, #16]
123 ; NONEON-NOSVE-NEXT:    str d0, [sp]
124 ; NONEON-NOSVE-NEXT:    ldr w8, [sp]
125 ; NONEON-NOSVE-NEXT:    stp w8, w8, [sp, #8]
126 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #60]
127 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #8]
128 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
129 ; NONEON-NOSVE-NEXT:    str w8, [sp, #124]
130 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #56]
131 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
132 ; NONEON-NOSVE-NEXT:    str w8, [sp, #120]
133 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #52]
134 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
135 ; NONEON-NOSVE-NEXT:    str w8, [sp, #116]
136 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #48]
137 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
138 ; NONEON-NOSVE-NEXT:    str w8, [sp, #112]
139 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #28]
140 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
141 ; NONEON-NOSVE-NEXT:    str w8, [sp, #92]
142 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #24]
143 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
144 ; NONEON-NOSVE-NEXT:    str w8, [sp, #88]
145 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]
146 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
147 ; NONEON-NOSVE-NEXT:    str w8, [sp, #84]
148 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]
149 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
150 ; NONEON-NOSVE-NEXT:    str w8, [sp, #80]
151 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #44]
152 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
153 ; NONEON-NOSVE-NEXT:    str w8, [sp, #108]
154 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #40]
155 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
156 ; NONEON-NOSVE-NEXT:    str w8, [sp, #104]
157 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #36]
158 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
159 ; NONEON-NOSVE-NEXT:    str w8, [sp, #100]
160 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #32]
161 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
162 ; NONEON-NOSVE-NEXT:    str w8, [sp, #96]
163 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #76]
164 ; NONEON-NOSVE-NEXT:    ldp q4, q2, [sp, #80]
165 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
166 ; NONEON-NOSVE-NEXT:    str w8, [sp, #140]
167 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #72]
168 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
169 ; NONEON-NOSVE-NEXT:    str w8, [sp, #136]
170 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #68]
171 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
172 ; NONEON-NOSVE-NEXT:    str w8, [sp, #132]
173 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #64]
174 ; NONEON-NOSVE-NEXT:    add w8, w8, w8
175 ; NONEON-NOSVE-NEXT:    str w8, [sp, #128]
176 ; NONEON-NOSVE-NEXT:    ldp q3, q1, [sp, #112]
177 ; NONEON-NOSVE-NEXT:    stp q4, q3, [x0]
178 ; NONEON-NOSVE-NEXT:    stp q1, q2, [x0, #32]
179 ; NONEON-NOSVE-NEXT:    add sp, sp, #144
180 ; NONEON-NOSVE-NEXT:    ret
181 entry:
182   %0 = load <16 x i32>, ptr %arg1, align 256
183   %1 = load <16 x i32>, ptr %arg2, align 256
184   %shvec = shufflevector <16 x i32> %0, <16 x i32> %1, <2 x i32> <i32 14, i32 14>
185   %2 = add <16 x i32> %0, %0
186   store <16 x i32> %2, ptr %arg1, align 256
187   ret <2 x i32> %shvec