Skip to content

Commit d7802c7

Browse files
[AIE2] Add stack addrspace annotation to Load/Store to stack
The work expect --aie-stack-addrspace passed to describe which AS stack is allocated
1 parent c54c049 commit d7802c7

File tree

3 files changed

+155
-0
lines changed

3 files changed

+155
-0
lines changed

llvm/lib/Target/AIE/AIE2TargetMachine.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ static cl::opt<bool> EnablePreMISchedCoalescer(
6060
"aie-premisched-coalescer", cl::Hidden, cl::init(true),
6161
cl::desc("Run the coalescer again after the pre-RA scheduler"));
6262

63+
static cl::opt<unsigned> StackAddrSpace(
64+
"aie-stack-addrspace", cl::init(0),
65+
cl::desc("Specify the addrspace where the stack is allocated "
66+
"(5: Bank A, 6: Bank B, 7: Bank C, 8: Bank D)"));
67+
6368
extern bool AIEDumpArtifacts;
6469

6570
void AIE2TargetMachine::anchor() {}
@@ -259,3 +264,14 @@ bool AIE2PassConfig::addInstSelector() {
259264
addPass(createMachineFunctionDumperPass(/*Suffix=*/"after-isel"));
260265
return false;
261266
}
267+
268+
unsigned
269+
AIE2TargetMachine::getAddressSpaceForPseudoSourceKind(unsigned Kind) const {
270+
switch (Kind) {
271+
case PseudoSourceValue::Stack:
272+
case PseudoSourceValue::FixedStack:
273+
return StackAddrSpace;
274+
default:
275+
return static_cast<unsigned>(AIE2::AddressSpaces::none);
276+
}
277+
}

llvm/lib/Target/AIE/AIE2TargetMachine.h

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class AIE2TargetMachine : public AIEBaseTargetMachine {
4343
TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
4444
/// PostRAScheduling is scheduled as part of PreSched2 passes.
4545
bool targetSchedulesPostRAScheduling() const override { return true; }
46+
unsigned getAddressSpaceForPseudoSourceKind(unsigned Kind) const override;
4647
};
4748

4849
} // namespace llvm
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
2+
# This file is licensed under the Apache License v2.0 with LLVM Exceptions.
3+
# See https://llvm.org/LICENSE.txt for license information.
4+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5+
#
6+
# (c) Copyright 2024 Advanced Micro Devices, Inc. or its affiliates
7+
# RUN: llc -march=aie2 -run-pass=postmisched %topdown-multi --aie-stack-addrspace=5 %s -o - | FileCheck -check-prefixes=STACK-BANK-A %s
8+
# RUN: llc -march=aie2 -run-pass=postmisched %topdown-multi --aie-stack-addrspace=6 %s -o - | FileCheck -check-prefixes=STACK-BANK-B %s
9+
10+
# This test checks scheduling of LD_SPILL / VLD_SPILL or VLDB
11+
12+
---
13+
name: VLDA_Spill_VLD_1
14+
alignment: 16
15+
stack:
16+
- { id: 0, name: '', type: spill-slot, offset: 0, size: 32, alignment: 32 }
17+
body: |
18+
bb.0.entry:
19+
; STACK-BANK-A-LABEL: name: VLDA_Spill_VLD_1
20+
; STACK-BANK-A: $wl1 = VLDA_dmw_lda_w_ag_spill -96, implicit $sp :: (load (s256) from %stack.0, addrspace 5)
21+
; STACK-BANK-A-NEXT: $wl2 = VLDB_dmw_ldb_ag_idx_imm killed $p0, 0 :: (load (<8 x s32>), addrspace 5)
22+
; STACK-BANK-A-NEXT: NOP
23+
; STACK-BANK-A-NEXT: NOP
24+
; STACK-BANK-A-NEXT: NOP
25+
; STACK-BANK-A-NEXT: NOP
26+
; STACK-BANK-A-NEXT: NOP
27+
; STACK-BANK-A-NEXT: NOP
28+
;
29+
; STACK-BANK-B-LABEL: name: VLDA_Spill_VLD_1
30+
; STACK-BANK-B: BUNDLE implicit-def $wl1, implicit-def $wl2, implicit $sp, implicit killed $p0 {
31+
; STACK-BANK-B-NEXT: $wl1 = VLDA_dmw_lda_w_ag_spill -96, implicit $sp :: (load (s256) from %stack.0, addrspace 6)
32+
; STACK-BANK-B-NEXT: $wl2 = VLDB_dmw_ldb_ag_idx_imm killed $p0, 0 :: (load (<8 x s32>), addrspace 5)
33+
; STACK-BANK-B-NEXT: }
34+
; STACK-BANK-B-NEXT: NOP
35+
; STACK-BANK-B-NEXT: NOP
36+
; STACK-BANK-B-NEXT: NOP
37+
; STACK-BANK-B-NEXT: NOP
38+
; STACK-BANK-B-NEXT: NOP
39+
; STACK-BANK-B-NEXT: NOP
40+
$wl1 = VLDA_dmw_lda_w_ag_spill -96, implicit $sp :: (load (s256) from %stack.0)
41+
$wl2 = VLDB_dmw_ldb_ag_idx_imm $p0, 0 :: (load (<8 x s32>), addrspace 5)
42+
...
43+
44+
---
45+
name: VLDA_Spill_VLD_2
46+
alignment: 16
47+
stack:
48+
- { id: 0, name: '', type: spill-slot, offset: 0, size: 32, alignment: 32 }
49+
body: |
50+
bb.0.entry:
51+
; STACK-BANK-A-LABEL: name: VLDA_Spill_VLD_2
52+
; STACK-BANK-A: BUNDLE implicit-def $wl1, implicit-def $wl2, implicit $sp, implicit killed $p0 {
53+
; STACK-BANK-A-NEXT: $wl1 = VLDA_dmw_lda_w_ag_spill -96, implicit $sp :: (load (s256) from %stack.0, addrspace 5)
54+
; STACK-BANK-A-NEXT: $wl2 = VLDB_dmw_ldb_ag_idx_imm killed $p0, 0 :: (load (<8 x s32>), addrspace 6)
55+
; STACK-BANK-A-NEXT: }
56+
; STACK-BANK-A-NEXT: NOP
57+
; STACK-BANK-A-NEXT: NOP
58+
; STACK-BANK-A-NEXT: NOP
59+
; STACK-BANK-A-NEXT: NOP
60+
; STACK-BANK-A-NEXT: NOP
61+
; STACK-BANK-A-NEXT: NOP
62+
;
63+
; STACK-BANK-B-LABEL: name: VLDA_Spill_VLD_2
64+
; STACK-BANK-B: $wl1 = VLDA_dmw_lda_w_ag_spill -96, implicit $sp :: (load (s256) from %stack.0, addrspace 6)
65+
; STACK-BANK-B-NEXT: $wl2 = VLDB_dmw_ldb_ag_idx_imm killed $p0, 0 :: (load (<8 x s32>), addrspace 6)
66+
; STACK-BANK-B-NEXT: NOP
67+
; STACK-BANK-B-NEXT: NOP
68+
; STACK-BANK-B-NEXT: NOP
69+
; STACK-BANK-B-NEXT: NOP
70+
; STACK-BANK-B-NEXT: NOP
71+
; STACK-BANK-B-NEXT: NOP
72+
$wl1 = VLDA_dmw_lda_w_ag_spill -96, implicit $sp :: (load (s256) from %stack.0)
73+
$wl2 = VLDB_dmw_ldb_ag_idx_imm $p0, 0 :: (load (<8 x s32>), addrspace 6)
74+
...
75+
76+
---
77+
name: LDA_Spill_VLD_1
78+
alignment: 16
79+
stack:
80+
- { id: 0, name: '', type: spill-slot, offset: 0, size: 32, alignment: 32 }
81+
body: |
82+
bb.0.entry:
83+
; STACK-BANK-A-LABEL: name: LDA_Spill_VLD_1
84+
; STACK-BANK-A: $r0 = LDA_dms_spill -28, implicit $sp :: (load (s32) from %stack.0, addrspace 5)
85+
; STACK-BANK-A-NEXT: $wl2 = VLDB_dmw_ldb_ag_idx_imm killed $p0, 0 :: (load (<8 x s32>), addrspace 5)
86+
; STACK-BANK-A-NEXT: NOP
87+
; STACK-BANK-A-NEXT: NOP
88+
; STACK-BANK-A-NEXT: NOP
89+
; STACK-BANK-A-NEXT: NOP
90+
; STACK-BANK-A-NEXT: NOP
91+
; STACK-BANK-A-NEXT: NOP
92+
;
93+
; STACK-BANK-B-LABEL: name: LDA_Spill_VLD_1
94+
; STACK-BANK-B: BUNDLE implicit-def $r0, implicit-def $wl2, implicit $sp, implicit killed $p0 {
95+
; STACK-BANK-B-NEXT: $r0 = LDA_dms_spill -28, implicit $sp :: (load (s32) from %stack.0, addrspace 6)
96+
; STACK-BANK-B-NEXT: $wl2 = VLDB_dmw_ldb_ag_idx_imm killed $p0, 0 :: (load (<8 x s32>), addrspace 5)
97+
; STACK-BANK-B-NEXT: }
98+
; STACK-BANK-B-NEXT: NOP
99+
; STACK-BANK-B-NEXT: NOP
100+
; STACK-BANK-B-NEXT: NOP
101+
; STACK-BANK-B-NEXT: NOP
102+
; STACK-BANK-B-NEXT: NOP
103+
; STACK-BANK-B-NEXT: NOP
104+
$r0 = LDA_dms_spill -28, implicit $sp :: (load (s32) from %stack.0)
105+
$wl2 = VLDB_dmw_ldb_ag_idx_imm $p0, 0 :: (load (<8 x s32>), addrspace 5)
106+
...
107+
108+
---
109+
name: LDA_Spill_VLD_2
110+
alignment: 16
111+
stack:
112+
- { id: 0, name: '', type: spill-slot, offset: 0, size: 32, alignment: 32 }
113+
body: |
114+
bb.0.entry:
115+
; STACK-BANK-A-LABEL: name: LDA_Spill_VLD_2
116+
; STACK-BANK-A: BUNDLE implicit-def $r0, implicit-def $wl2, implicit $sp, implicit killed $p0 {
117+
; STACK-BANK-A-NEXT: $r0 = LDA_dms_spill -28, implicit $sp :: (load (s32) from %stack.0, addrspace 5)
118+
; STACK-BANK-A-NEXT: $wl2 = VLDB_dmw_ldb_ag_idx_imm killed $p0, 0 :: (load (<8 x s32>), addrspace 6)
119+
; STACK-BANK-A-NEXT: }
120+
; STACK-BANK-A-NEXT: NOP
121+
; STACK-BANK-A-NEXT: NOP
122+
; STACK-BANK-A-NEXT: NOP
123+
; STACK-BANK-A-NEXT: NOP
124+
; STACK-BANK-A-NEXT: NOP
125+
; STACK-BANK-A-NEXT: NOP
126+
;
127+
; STACK-BANK-B-LABEL: name: LDA_Spill_VLD_2
128+
; STACK-BANK-B: $r0 = LDA_dms_spill -28, implicit $sp :: (load (s32) from %stack.0, addrspace 6)
129+
; STACK-BANK-B-NEXT: $wl2 = VLDB_dmw_ldb_ag_idx_imm killed $p0, 0 :: (load (<8 x s32>), addrspace 6)
130+
; STACK-BANK-B-NEXT: NOP
131+
; STACK-BANK-B-NEXT: NOP
132+
; STACK-BANK-B-NEXT: NOP
133+
; STACK-BANK-B-NEXT: NOP
134+
; STACK-BANK-B-NEXT: NOP
135+
; STACK-BANK-B-NEXT: NOP
136+
$r0 = LDA_dms_spill -28, implicit $sp :: (load (s32) from %stack.0)
137+
$wl2 = VLDB_dmw_ldb_ag_idx_imm $p0, 0 :: (load (<8 x s32>), addrspace 6)
138+
...

0 commit comments

Comments
 (0)