|
3 | 3 | ; RUN: | FileCheck --check-prefix=SPILL-O0 %s |
4 | 4 | ; RUN: llc -mtriple=riscv32 -mattr=+v -mattr=+m -O2 < %s \ |
5 | 5 | ; RUN: | FileCheck --check-prefix=SPILL-O2 %s |
| 6 | +; RUN: llc -mtriple=riscv32 -mattr=+v -riscv-v-vector-bits-max=128 -O2 < %s \ |
| 7 | +; RUN: | FileCheck --check-prefix=SPILL-O2-VLEN128 %s |
6 | 8 |
|
7 | 9 | define <vscale x 1 x i32> @spill_zvlsseg_nxv1i32(ptr %base, i32 %vl) nounwind { |
8 | 10 | ; SPILL-O0-LABEL: spill_zvlsseg_nxv1i32: |
@@ -56,6 +58,28 @@ define <vscale x 1 x i32> @spill_zvlsseg_nxv1i32(ptr %base, i32 %vl) nounwind { |
56 | 58 | ; SPILL-O2-NEXT: add sp, sp, a0 |
57 | 59 | ; SPILL-O2-NEXT: addi sp, sp, 16 |
58 | 60 | ; SPILL-O2-NEXT: ret |
| 61 | +; |
| 62 | +; SPILL-O2-VLEN128-LABEL: spill_zvlsseg_nxv1i32: |
| 63 | +; SPILL-O2-VLEN128: # %bb.0: # %entry |
| 64 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, -16 |
| 65 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, -32 |
| 66 | +; SPILL-O2-VLEN128-NEXT: vsetvli zero, a1, e32, mf2, ta, ma |
| 67 | +; SPILL-O2-VLEN128-NEXT: vlseg2e32.v v8, (a0) |
| 68 | +; SPILL-O2-VLEN128-NEXT: addi a0, sp, 16 |
| 69 | +; SPILL-O2-VLEN128-NEXT: li a1, 16 |
| 70 | +; SPILL-O2-VLEN128-NEXT: vs1r.v v8, (a0) # Unknown-size Folded Spill |
| 71 | +; SPILL-O2-VLEN128-NEXT: add a0, a0, a1 |
| 72 | +; SPILL-O2-VLEN128-NEXT: vs1r.v v9, (a0) # Unknown-size Folded Spill |
| 73 | +; SPILL-O2-VLEN128-NEXT: #APP |
| 74 | +; SPILL-O2-VLEN128-NEXT: #NO_APP |
| 75 | +; SPILL-O2-VLEN128-NEXT: addi a0, sp, 16 |
| 76 | +; SPILL-O2-VLEN128-NEXT: li a1, 16 |
| 77 | +; SPILL-O2-VLEN128-NEXT: vl1r.v v7, (a0) # Unknown-size Folded Reload |
| 78 | +; SPILL-O2-VLEN128-NEXT: add a0, a0, a1 |
| 79 | +; SPILL-O2-VLEN128-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload |
| 80 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, 32 |
| 81 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, 16 |
| 82 | +; SPILL-O2-VLEN128-NEXT: ret |
59 | 83 | entry: |
60 | 84 | %0 = tail call {<vscale x 1 x i32>,<vscale x 1 x i32>} @llvm.riscv.vlseg2.nxv1i32(<vscale x 1 x i32> undef, <vscale x 1 x i32> undef, ptr %base, i32 %vl) |
61 | 85 | call void asm sideeffect "", |
@@ -116,6 +140,28 @@ define <vscale x 2 x i32> @spill_zvlsseg_nxv2i32(ptr %base, i32 %vl) nounwind { |
116 | 140 | ; SPILL-O2-NEXT: add sp, sp, a0 |
117 | 141 | ; SPILL-O2-NEXT: addi sp, sp, 16 |
118 | 142 | ; SPILL-O2-NEXT: ret |
| 143 | +; |
| 144 | +; SPILL-O2-VLEN128-LABEL: spill_zvlsseg_nxv2i32: |
| 145 | +; SPILL-O2-VLEN128: # %bb.0: # %entry |
| 146 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, -16 |
| 147 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, -32 |
| 148 | +; SPILL-O2-VLEN128-NEXT: vsetvli zero, a1, e32, m1, ta, ma |
| 149 | +; SPILL-O2-VLEN128-NEXT: vlseg2e32.v v8, (a0) |
| 150 | +; SPILL-O2-VLEN128-NEXT: addi a0, sp, 16 |
| 151 | +; SPILL-O2-VLEN128-NEXT: li a1, 16 |
| 152 | +; SPILL-O2-VLEN128-NEXT: vs1r.v v8, (a0) # Unknown-size Folded Spill |
| 153 | +; SPILL-O2-VLEN128-NEXT: add a0, a0, a1 |
| 154 | +; SPILL-O2-VLEN128-NEXT: vs1r.v v9, (a0) # Unknown-size Folded Spill |
| 155 | +; SPILL-O2-VLEN128-NEXT: #APP |
| 156 | +; SPILL-O2-VLEN128-NEXT: #NO_APP |
| 157 | +; SPILL-O2-VLEN128-NEXT: addi a0, sp, 16 |
| 158 | +; SPILL-O2-VLEN128-NEXT: li a1, 16 |
| 159 | +; SPILL-O2-VLEN128-NEXT: vl1r.v v7, (a0) # Unknown-size Folded Reload |
| 160 | +; SPILL-O2-VLEN128-NEXT: add a0, a0, a1 |
| 161 | +; SPILL-O2-VLEN128-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload |
| 162 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, 32 |
| 163 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, 16 |
| 164 | +; SPILL-O2-VLEN128-NEXT: ret |
119 | 165 | entry: |
120 | 166 | %0 = tail call {<vscale x 2 x i32>,<vscale x 2 x i32>} @llvm.riscv.vlseg2.nxv2i32(<vscale x 2 x i32> undef, <vscale x 2 x i32> undef, ptr %base, i32 %vl) |
121 | 167 | call void asm sideeffect "", |
@@ -179,6 +225,28 @@ define <vscale x 4 x i32> @spill_zvlsseg_nxv4i32(ptr %base, i32 %vl) nounwind { |
179 | 225 | ; SPILL-O2-NEXT: add sp, sp, a0 |
180 | 226 | ; SPILL-O2-NEXT: addi sp, sp, 16 |
181 | 227 | ; SPILL-O2-NEXT: ret |
| 228 | +; |
| 229 | +; SPILL-O2-VLEN128-LABEL: spill_zvlsseg_nxv4i32: |
| 230 | +; SPILL-O2-VLEN128: # %bb.0: # %entry |
| 231 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, -16 |
| 232 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, -64 |
| 233 | +; SPILL-O2-VLEN128-NEXT: vsetvli zero, a1, e32, m2, ta, ma |
| 234 | +; SPILL-O2-VLEN128-NEXT: vlseg2e32.v v8, (a0) |
| 235 | +; SPILL-O2-VLEN128-NEXT: addi a0, sp, 16 |
| 236 | +; SPILL-O2-VLEN128-NEXT: li a1, 32 |
| 237 | +; SPILL-O2-VLEN128-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill |
| 238 | +; SPILL-O2-VLEN128-NEXT: add a0, a0, a1 |
| 239 | +; SPILL-O2-VLEN128-NEXT: vs2r.v v10, (a0) # Unknown-size Folded Spill |
| 240 | +; SPILL-O2-VLEN128-NEXT: #APP |
| 241 | +; SPILL-O2-VLEN128-NEXT: #NO_APP |
| 242 | +; SPILL-O2-VLEN128-NEXT: addi a0, sp, 16 |
| 243 | +; SPILL-O2-VLEN128-NEXT: li a1, 32 |
| 244 | +; SPILL-O2-VLEN128-NEXT: vl2r.v v6, (a0) # Unknown-size Folded Reload |
| 245 | +; SPILL-O2-VLEN128-NEXT: add a0, a0, a1 |
| 246 | +; SPILL-O2-VLEN128-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload |
| 247 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, 64 |
| 248 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, 16 |
| 249 | +; SPILL-O2-VLEN128-NEXT: ret |
182 | 250 | entry: |
183 | 251 | %0 = tail call {<vscale x 4 x i32>,<vscale x 4 x i32>} @llvm.riscv.vlseg2.nxv4i32(<vscale x 4 x i32> undef, <vscale x 4 x i32> undef, ptr %base, i32 %vl) |
184 | 252 | call void asm sideeffect "", |
@@ -242,6 +310,28 @@ define <vscale x 8 x i32> @spill_zvlsseg_nxv8i32(ptr %base, i32 %vl) nounwind { |
242 | 310 | ; SPILL-O2-NEXT: add sp, sp, a0 |
243 | 311 | ; SPILL-O2-NEXT: addi sp, sp, 16 |
244 | 312 | ; SPILL-O2-NEXT: ret |
| 313 | +; |
| 314 | +; SPILL-O2-VLEN128-LABEL: spill_zvlsseg_nxv8i32: |
| 315 | +; SPILL-O2-VLEN128: # %bb.0: # %entry |
| 316 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, -16 |
| 317 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, -128 |
| 318 | +; SPILL-O2-VLEN128-NEXT: vsetvli zero, a1, e32, m4, ta, ma |
| 319 | +; SPILL-O2-VLEN128-NEXT: vlseg2e32.v v8, (a0) |
| 320 | +; SPILL-O2-VLEN128-NEXT: addi a0, sp, 16 |
| 321 | +; SPILL-O2-VLEN128-NEXT: li a1, 64 |
| 322 | +; SPILL-O2-VLEN128-NEXT: vs4r.v v8, (a0) # Unknown-size Folded Spill |
| 323 | +; SPILL-O2-VLEN128-NEXT: add a0, a0, a1 |
| 324 | +; SPILL-O2-VLEN128-NEXT: vs4r.v v12, (a0) # Unknown-size Folded Spill |
| 325 | +; SPILL-O2-VLEN128-NEXT: #APP |
| 326 | +; SPILL-O2-VLEN128-NEXT: #NO_APP |
| 327 | +; SPILL-O2-VLEN128-NEXT: addi a0, sp, 16 |
| 328 | +; SPILL-O2-VLEN128-NEXT: li a1, 64 |
| 329 | +; SPILL-O2-VLEN128-NEXT: vl4r.v v4, (a0) # Unknown-size Folded Reload |
| 330 | +; SPILL-O2-VLEN128-NEXT: add a0, a0, a1 |
| 331 | +; SPILL-O2-VLEN128-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload |
| 332 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, 128 |
| 333 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, 16 |
| 334 | +; SPILL-O2-VLEN128-NEXT: ret |
245 | 335 | entry: |
246 | 336 | %0 = tail call {<vscale x 8 x i32>,<vscale x 8 x i32>} @llvm.riscv.vlseg2.nxv8i32(<vscale x 8 x i32> undef, <vscale x 8 x i32> undef, ptr %base, i32 %vl) |
247 | 337 | call void asm sideeffect "", |
@@ -314,6 +404,32 @@ define <vscale x 4 x i32> @spill_zvlsseg3_nxv4i32(ptr %base, i32 %vl) nounwind { |
314 | 404 | ; SPILL-O2-NEXT: add sp, sp, a0 |
315 | 405 | ; SPILL-O2-NEXT: addi sp, sp, 16 |
316 | 406 | ; SPILL-O2-NEXT: ret |
| 407 | +; |
| 408 | +; SPILL-O2-VLEN128-LABEL: spill_zvlsseg3_nxv4i32: |
| 409 | +; SPILL-O2-VLEN128: # %bb.0: # %entry |
| 410 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, -16 |
| 411 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, -96 |
| 412 | +; SPILL-O2-VLEN128-NEXT: vsetvli zero, a1, e32, m2, ta, ma |
| 413 | +; SPILL-O2-VLEN128-NEXT: vlseg3e32.v v8, (a0) |
| 414 | +; SPILL-O2-VLEN128-NEXT: addi a0, sp, 16 |
| 415 | +; SPILL-O2-VLEN128-NEXT: li a1, 32 |
| 416 | +; SPILL-O2-VLEN128-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill |
| 417 | +; SPILL-O2-VLEN128-NEXT: add a0, a0, a1 |
| 418 | +; SPILL-O2-VLEN128-NEXT: vs2r.v v10, (a0) # Unknown-size Folded Spill |
| 419 | +; SPILL-O2-VLEN128-NEXT: add a0, a0, a1 |
| 420 | +; SPILL-O2-VLEN128-NEXT: vs2r.v v12, (a0) # Unknown-size Folded Spill |
| 421 | +; SPILL-O2-VLEN128-NEXT: #APP |
| 422 | +; SPILL-O2-VLEN128-NEXT: #NO_APP |
| 423 | +; SPILL-O2-VLEN128-NEXT: addi a0, sp, 16 |
| 424 | +; SPILL-O2-VLEN128-NEXT: li a1, 32 |
| 425 | +; SPILL-O2-VLEN128-NEXT: vl2r.v v6, (a0) # Unknown-size Folded Reload |
| 426 | +; SPILL-O2-VLEN128-NEXT: add a0, a0, a1 |
| 427 | +; SPILL-O2-VLEN128-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload |
| 428 | +; SPILL-O2-VLEN128-NEXT: add a0, a0, a1 |
| 429 | +; SPILL-O2-VLEN128-NEXT: vl2r.v v10, (a0) # Unknown-size Folded Reload |
| 430 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, 96 |
| 431 | +; SPILL-O2-VLEN128-NEXT: addi sp, sp, 16 |
| 432 | +; SPILL-O2-VLEN128-NEXT: ret |
317 | 433 | entry: |
318 | 434 | %0 = tail call {<vscale x 4 x i32>,<vscale x 4 x i32>,<vscale x 4 x i32>} @llvm.riscv.vlseg3.nxv4i32(<vscale x 4 x i32> undef, <vscale x 4 x i32> undef, <vscale x 4 x i32> undef, ptr %base, i32 %vl) |
319 | 435 | call void asm sideeffect "", |
|
0 commit comments