66#
77# (c) Copyright 2023-2025 Advanced Micro Devices, Inc. or its affiliates
88
9+ # RUN: llc -O2 -mtriple=aie2p -verify-machineinstrs --aie-staged-ra -start-before=greedy -aie-staged-ra-fine-grained-alloc=false \
10+ # RUN: -stop-after=virtregrewriter %s -o - | FileCheck %s --check-prefix=RA-STAGED
911# RUN: llc -O2 -mtriple=aie2p -verify-machineinstrs --aie-staged-ra -start-before=greedy -stop-after=virtregrewriter %s -o - \
10- # RUN: | FileCheck %s --check-prefix=RA
12+ # RUN: | FileCheck %s --check-prefix=RA-STAGEG-FG
1113
12- # Test what happens the 2D allocation stage needs to spill, and then the
14+ # Test what happens the 2D allocation stage needs to spill, and then the
1315# last allocation stage needs to spill again to make space for allocating
14- # %7:edj = MOV_PD_imm10_pseudo 12.
16+ # %7:edj = MOV_PD_imm10_pseudo 12. Please note that in RA-STAGEG-FG
17+ # (FG = fine grained) we can avoid spills by using scalar registers.
1518---
1619name : test_spill_2d_last_stage
1720tracksRegLiveness : true
1821body : |
1922 bb.1.entry:
2023 liveins: $p0, $p1, $d1, $d2, $d3, $d4, $d5, $d6, $d7
21- ; RA-LABEL: name: test_spill_2d_last_stage
22- ; RA: liveins: $d1, $d2, $d3, $d4, $d5, $d6, $d7, $p0, $p1
23- ; RA-NEXT: {{ $}}
24- ; RA-NEXT: renamable $dn0 = LDA_dms_lda_idx_imm renamable $p1, 0
25- ; RA-NEXT: renamable $m0 = LDA_dms_lda_idx_imm renamable $p1, 4
26- ; RA-NEXT: renamable $dj0 = LDA_dms_lda_idx_imm renamable $p1, 8
27- ; RA-NEXT: ST_D_SPILL renamable $d0, %stack.1, implicit $sp :: (store (s128) into %stack.1, align 4)
28- ; RA-NEXT: renamable $dj0 = MOV_PD_imm11_pseudo 12
29- ; RA-NEXT: renamable $r0 = LDA_dms_lda_idx renamable $p1, killed renamable $dj0
30- ; RA-NEXT: renamable $d0 = LDA_D_SPILL %stack.1, implicit $sp :: (load (s128) from %stack.1, align 4)
31- ; RA-NEXT: renamable $dc0 = COPY killed renamable $r0
32- ; RA-NEXT: ST_D_SPILL killed renamable $d0, %stack.1, implicit $sp :: (store (s128) into %stack.1, align 4)
33- ; RA-NEXT: renamable $dn0 = LDA_dms_lda_idx_imm renamable $p1, 16
34- ; RA-NEXT: renamable $m0 = LDA_dms_lda_idx_imm renamable $p1, 20
35- ; RA-NEXT: renamable $dj0 = LDA_dms_lda_idx_imm renamable $p1, 24
36- ; RA-NEXT: renamable $dc0 = LDA_dms_lda_idx_imm killed renamable $p1, 28
37- ; RA-NEXT: ST_D_SPILL killed renamable $d0, %stack.0, implicit $sp :: (store (s128) into %stack.0, align 4)
38- ; RA-NEXT: renamable $d0 = LDA_D_SPILL %stack.1, implicit $sp :: (load (s128) from %stack.1, align 4)
39- ; RA-NEXT: $p0, $dc0 = PADDA_2D_split killed $p0, killed $m0, killed $dn0, killed $dj0, killed $dc0
40- ; RA-NEXT: ST_D_SPILL renamable $d0, %stack.1, implicit $sp :: (store (s128) into %stack.1, align 4)
41- ; RA-NEXT: renamable $d0 = LDA_D_SPILL %stack.0, implicit $sp :: (load (s128) from %stack.0, align 4)
42- ; RA-NEXT: $p0, dead $dc0 = PADDA_2D_split killed $p0, killed $m0, killed $dn0, killed $dj0, killed $dc0
43- ; RA-NEXT: renamable $d0 = LDA_D_SPILL %stack.1, implicit $sp :: (load (s128) from %stack.1, align 4)
44- ; RA-NEXT: PseudoRET implicit $lr, implicit killed renamable $p0, implicit killed renamable $dc0, implicit $d1, implicit $d2, implicit $d3, implicit $d4, implicit $d5, implicit $d6, implicit $d7
24+ ; RA-STAGED-LABEL: name: test_spill_2d_last_stage
25+ ; RA-STAGED: liveins: $d1, $d2, $d3, $d4, $d5, $d6, $d7, $p0, $p1
26+ ; RA-STAGED-NEXT: {{ $}}
27+ ; RA-STAGED-NEXT: renamable $dn0 = LDA_dms_lda_idx_imm renamable $p1, 0
28+ ; RA-STAGED-NEXT: renamable $m0 = LDA_dms_lda_idx_imm renamable $p1, 4
29+ ; RA-STAGED-NEXT: renamable $dj0 = LDA_dms_lda_idx_imm renamable $p1, 8
30+ ; RA-STAGED-NEXT: ST_D_SPILL renamable $d0, %stack.0, implicit $sp :: (store (s128) into %stack.0, align 4)
31+ ; RA-STAGED-NEXT: renamable $dj0 = MOV_PD_imm11_pseudo 12
32+ ; RA-STAGED-NEXT: renamable $r0 = LDA_dms_lda_idx renamable $p1, killed renamable $dj0
33+ ; RA-STAGED-NEXT: renamable $d0 = LDA_D_SPILL %stack.0, implicit $sp :: (load (s128) from %stack.0, align 4)
34+ ; RA-STAGED-NEXT: renamable $dc0 = COPY killed renamable $r0
35+ ; RA-STAGED-NEXT: ST_D_SPILL killed renamable $d0, %stack.0, implicit $sp :: (store (s128) into %stack.0, align 4)
36+ ; RA-STAGED-NEXT: renamable $dn0 = LDA_dms_lda_idx_imm renamable $p1, 16
37+ ; RA-STAGED-NEXT: renamable $m0 = LDA_dms_lda_idx_imm renamable $p1, 20
38+ ; RA-STAGED-NEXT: renamable $dj0 = LDA_dms_lda_idx_imm renamable $p1, 24
39+ ; RA-STAGED-NEXT: renamable $dc0 = LDA_dms_lda_idx_imm killed renamable $p1, 28
40+ ; RA-STAGED-NEXT: ST_D_SPILL killed renamable $d0, %stack.1, implicit $sp :: (store (s128) into %stack.1, align 4)
41+ ; RA-STAGED-NEXT: renamable $d0 = LDA_D_SPILL %stack.0, implicit $sp :: (load (s128) from %stack.0, align 4)
42+ ; RA-STAGED-NEXT: $p0, $dc0 = PADDA_2D_split killed $p0, $m0, $dn0, $dj0, $dc0
43+ ; RA-STAGED-NEXT: ST_D_SPILL killed renamable $d0, %stack.0, implicit $sp :: (store (s128) into %stack.0, align 4)
44+ ; RA-STAGED-NEXT: renamable $d0 = LDA_D_SPILL %stack.1, implicit $sp :: (load (s128) from %stack.1, align 4)
45+ ; RA-STAGED-NEXT: $p0, dead $dc0 = PADDA_2D_split killed $p0, $m0, $dn0, $dj0, $dc0
46+ ; RA-STAGED-NEXT: renamable $d0 = LDA_D_SPILL %stack.0, implicit $sp :: (load (s128) from %stack.0, align 4)
47+ ; RA-STAGED-NEXT: PseudoRET implicit $lr, implicit killed renamable $p0, implicit killed renamable $dc0, implicit $d1, implicit $d2, implicit $d3, implicit $d4, implicit $d5, implicit $d6, implicit $d7
48+ ;
49+ ; RA-STAGEG-FG-LABEL: name: test_spill_2d_last_stage
50+ ; RA-STAGEG-FG: liveins: $d1, $d2, $d3, $d4, $d5, $d6, $d7, $p0, $p1
51+ ; RA-STAGEG-FG-NEXT: {{ $}}
52+ ; RA-STAGEG-FG-NEXT: renamable $dn0 = LDA_dms_lda_idx_imm renamable $p1, 0
53+ ; RA-STAGEG-FG-NEXT: renamable $m0 = LDA_dms_lda_idx_imm renamable $p1, 4
54+ ; RA-STAGEG-FG-NEXT: renamable $r0 = LDA_dms_lda_idx_imm renamable $p1, 8
55+ ; RA-STAGEG-FG-NEXT: renamable $dj0 = MOV_PD_imm11_pseudo 12
56+ ; RA-STAGEG-FG-NEXT: renamable $r1 = LDA_dms_lda_idx renamable $p1, killed renamable $dj0
57+ ; RA-STAGEG-FG-NEXT: renamable $dc0 = COPY killed renamable $r1
58+ ; RA-STAGEG-FG-NEXT: renamable $dj0 = COPY killed renamable $r0
59+ ; RA-STAGEG-FG-NEXT: renamable $r1 = LDA_dms_lda_idx_imm renamable $p1, 16
60+ ; RA-STAGEG-FG-NEXT: renamable $r3 = LDA_dms_lda_idx_imm renamable $p1, 20
61+ ; RA-STAGEG-FG-NEXT: renamable $r2 = LDA_dms_lda_idx_imm renamable $p1, 24
62+ ; RA-STAGEG-FG-NEXT: renamable $r0 = LDA_dms_lda_idx_imm killed renamable $p1, 28
63+ ; RA-STAGEG-FG-NEXT: $p0, $dc0 = PADDA_2D_split killed $p0, killed $m0, killed $dn0, killed $dj0, killed $dc0
64+ ; RA-STAGEG-FG-NEXT: renamable $r4 = COPY killed renamable $dc0
65+ ; RA-STAGEG-FG-NEXT: renamable $dc0 = COPY killed renamable $r0
66+ ; RA-STAGEG-FG-NEXT: renamable $dn0 = COPY killed renamable $r1
67+ ; RA-STAGEG-FG-NEXT: renamable $dj0 = COPY killed renamable $r2
68+ ; RA-STAGEG-FG-NEXT: renamable $m0 = COPY killed renamable $r3
69+ ; RA-STAGEG-FG-NEXT: $p0, dead $dc0 = PADDA_2D_split killed $p0, killed $m0, killed $dn0, killed $dj0, killed $dc0
70+ ; RA-STAGEG-FG-NEXT: PseudoRET implicit $lr, implicit killed renamable $p0, implicit killed renamable $r4, implicit $d1, implicit $d2, implicit $d3, implicit $d4, implicit $d5, implicit $d6, implicit $d7
4571 %20:ep = COPY $p0
4672 %21:ep = COPY $p1
4773 undef %100.sub_dim_size:ed = LDA_dms_lda_idx_imm %21, 0
@@ -58,3 +84,4 @@ body: |
5884 %20:ep, %101.sub_dim_count:ed = PADDA_2D_split %20, %101.sub_mod, %101.sub_dim_size, %101.sub_dim_stride, %101.sub_dim_count
5985 PseudoRET implicit $lr, implicit %20, implicit %100.sub_dim_count, implicit $d1, implicit $d2, implicit $d3, implicit $d4, implicit $d5, implicit $d6, implicit $d7
6086 ...
87+
0 commit comments