Skip to content

Commit 461f749

Browse files
[AIE2] Annotate AS for load/store to TileMemory
1 parent ef131e8 commit 461f749

File tree

3 files changed

+19
-13
lines changed

3 files changed

+19
-13
lines changed

clang/lib/Headers/aiev2intrin.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,13 @@ event_error() { return __builtin_aiev2_event(3); }
6161
#if defined(__cplusplus) && !defined(__AIECC__DISABLE_READ_WRITE_TM)
6262
// Read/Write for Tile Memory Map
6363
INTRINSIC(uint32) read_tm(uint32 regAddr, uint32 TMAddrSpaceStart = 0x80000) {
64-
return __builtin_aiev2_read_tm((int *)(TMAddrSpaceStart + regAddr));
64+
return __builtin_aiev2_read_tm(
65+
(int __aie_dm_resource_TM *)(TMAddrSpaceStart + regAddr));
6566
}
6667
INTRINSIC(void)
6768
write_tm(uint32 regVal, uint32 regAddr, uint32 TMAddrSpaceStart = 0x80000) {
68-
return __builtin_aiev2_write_tm(regVal, (int *)(TMAddrSpaceStart + regAddr));
69+
return __builtin_aiev2_write_tm(
70+
regVal, (int __aie_dm_resource_TM *)(TMAddrSpaceStart + regAddr));
6971
}
7072

7173
#endif /* __cplusplus && !(__AIECC__DISABLE_READ_WRITE_TM) */

clang/test/CodeGen/aie/aie2/aie2-store-load-TM.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414
// CHECK-NEXT: entry:
1515
// CHECK-NEXT: [[TMP0:%.*]] = xor i32 [[REGADDR:%.*]], 524288
1616
// CHECK-NEXT: [[CONV_I:%.*]] = trunc i32 [[TMP0]] to i20
17-
// CHECK-NEXT: [[TMP1:%.*]] = inttoptr i20 [[CONV_I]] to ptr
18-
// CHECK-NEXT: [[TMP2:%.*]] = tail call noundef i32 @llvm.aie2.read.tm(ptr [[TMP1]])
19-
// CHECK-NEXT: ret i32 [[TMP2]]
17+
// CHECK-NEXT: [[TMP1:%.*]] = inttoptr i20 [[CONV_I]] to ptr addrspace(15)
18+
// CHECK-NEXT: [[TMP2:%.*]] = addrspacecast ptr addrspace(15) [[TMP1]] to ptr
19+
// CHECK-NEXT: [[TMP3:%.*]] = tail call noundef i32 @llvm.aie2.read.tm(ptr [[TMP2]])
20+
// CHECK-NEXT: ret i32 [[TMP3]]
2021
//
2122
uint32 test_read_tm(uint32 regAddr) {
2223
return read_tm(regAddr);
@@ -26,8 +27,9 @@ uint32 test_read_tm(uint32 regAddr) {
2627
// CHECK-NEXT: entry:
2728
// CHECK-NEXT: [[TMP0:%.*]] = xor i32 [[REGADDR:%.*]], 524288
2829
// CHECK-NEXT: [[CONV_I:%.*]] = trunc i32 [[TMP0]] to i20
29-
// CHECK-NEXT: [[TMP1:%.*]] = inttoptr i20 [[CONV_I]] to ptr
30-
// CHECK-NEXT: tail call void @llvm.aie2.write.tm(i32 [[REGVAL:%.*]], ptr [[TMP1]])
30+
// CHECK-NEXT: [[TMP1:%.*]] = inttoptr i20 [[CONV_I]] to ptr addrspace(15)
31+
// CHECK-NEXT: [[TMP2:%.*]] = addrspacecast ptr addrspace(15) [[TMP1]] to ptr
32+
// CHECK-NEXT: tail call void @llvm.aie2.write.tm(i32 [[REGVAL:%.*]], ptr [[TMP2]])
3133
// CHECK-NEXT: ret void
3234
//
3335
void test_write_tm(uint32 regVal, uint32 regAddr) {
@@ -38,9 +40,10 @@ void test_write_tm(uint32 regVal, uint32 regAddr) {
3840
// CHECK-NEXT: entry:
3941
// CHECK-NEXT: [[ADD_I:%.*]] = add i32 [[TMADDRSPACESTART:%.*]], [[REGADDR:%.*]]
4042
// CHECK-NEXT: [[CONV_I:%.*]] = trunc i32 [[ADD_I]] to i20
41-
// CHECK-NEXT: [[TMP0:%.*]] = inttoptr i20 [[CONV_I]] to ptr
42-
// CHECK-NEXT: [[TMP1:%.*]] = tail call noundef i32 @llvm.aie2.read.tm(ptr [[TMP0]])
43-
// CHECK-NEXT: ret i32 [[TMP1]]
43+
// CHECK-NEXT: [[TMP0:%.*]] = inttoptr i20 [[CONV_I]] to ptr addrspace(15)
44+
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(15) [[TMP0]] to ptr
45+
// CHECK-NEXT: [[TMP2:%.*]] = tail call noundef i32 @llvm.aie2.read.tm(ptr [[TMP1]])
46+
// CHECK-NEXT: ret i32 [[TMP2]]
4447
//
4548
uint32 test_read_tm(uint32 regAddr, uint32 TMAddrSpaceStart) {
4649
return read_tm(regAddr, TMAddrSpaceStart);
@@ -50,8 +53,9 @@ uint32 test_read_tm(uint32 regAddr, uint32 TMAddrSpaceStart) {
5053
// CHECK-NEXT: entry:
5154
// CHECK-NEXT: [[ADD_I:%.*]] = add i32 [[TMADDRSPACESTART:%.*]], [[REGADDR:%.*]]
5255
// CHECK-NEXT: [[CONV_I:%.*]] = trunc i32 [[ADD_I]] to i20
53-
// CHECK-NEXT: [[TMP0:%.*]] = inttoptr i20 [[CONV_I]] to ptr
54-
// CHECK-NEXT: tail call void @llvm.aie2.write.tm(i32 [[REGVAL:%.*]], ptr [[TMP0]])
56+
// CHECK-NEXT: [[TMP0:%.*]] = inttoptr i20 [[CONV_I]] to ptr addrspace(15)
57+
// CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(15) [[TMP0]] to ptr
58+
// CHECK-NEXT: tail call void @llvm.aie2.write.tm(i32 [[REGVAL:%.*]], ptr [[TMP1]])
5559
// CHECK-NEXT: ret void
5660
//
5761
void test_write_tm(uint32 regVal, uint32 regAddr, uint32 TMAddrSpaceStart) {

llvm/lib/Target/AIE/AIE2AddrSpace.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ class AIE2AddrSpaceInfo final : public AIEBaseAddrSpaceInfo {
103103
MemoryBanks.set(static_cast<unsigned>(AIEBanks::TileMemory));
104104
break;
105105
default:
106-
MemoryBanks.set();
106+
return getDefaultMemoryBank();
107107
break;
108108
}
109109

0 commit comments

Comments
 (0)