Skip to content

Commit 81d3d1b

Browse files
committed
[AMDGPU][Verifier] Check address space of alloca instruction
1 parent 1b6cbaa commit 81d3d1b

File tree

2 files changed

+104
-0
lines changed

2 files changed

+104
-0
lines changed

llvm/lib/IR/Verifier.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4392,6 +4392,12 @@ void Verifier::visitAllocaInst(AllocaInst &AI) {
43924392
verifySwiftErrorValue(&AI);
43934393
}
43944394

4395+
if (TT.isAMDGPU()) {
4396+
Check(AI.getAddressSpace() == AMDGPUAS::PRIVATE_ADDRESS ||
4397+
AI.getAddressSpace() == AMDGPUAS::FLAT_ADDRESS,
4398+
"alloca on amdgpu must be in addrspace(0) or addrspace(5)", &AI);
4399+
}
4400+
43954401
visitInstruction(AI);
43964402
}
43974403

llvm/test/Verifier/AMDGPU/alloca.ll

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
; RUN: not llvm-as %s --disable-output 2>&1 | FileCheck %s
2+
3+
target triple = "amdgcn-amd-amdhsa"
4+
5+
target datalayout = "A5"
6+
7+
; CHECK: alloca on amdgpu must be in addrspace(0) or addrspace(5)
8+
; CHECK-NEXT: %alloca.1 = alloca i32, align 4, addrspace(1)
9+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
10+
; CHECK-NEXT: %alloca.2 = alloca i32, align 4, addrspace(2)
11+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
12+
; CHECK-NEXT: %alloca.3 = alloca i32, align 4, addrspace(3)
13+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
14+
; CHECK-NEXT: %alloca.4 = alloca i32, align 4, addrspace(4)
15+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
16+
; CHECK-NEXT: %alloca.6 = alloca i32, align 4, addrspace(6)
17+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
18+
; CHECK-NEXT: %alloca.7 = alloca i32, align 4, addrspace(7)
19+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
20+
; CHECK-NEXT: %alloca.8 = alloca i32, align 4, addrspace(8)
21+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
22+
; CHECK-NEXT: %alloca.9 = alloca i32, align 4, addrspace(9)
23+
define void @static_alloca() {
24+
entry:
25+
%alloca.0 = alloca i32, align 4
26+
%alloca.1 = alloca i32, align 4, addrspace(1)
27+
%alloca.2 = alloca i32, align 4, addrspace(2)
28+
%alloca.3 = alloca i32, align 4, addrspace(3)
29+
%alloca.4 = alloca i32, align 4, addrspace(4)
30+
%alloca.5 = alloca i32, align 4, addrspace(5)
31+
%alloca.6 = alloca i32, align 4, addrspace(6)
32+
%alloca.7 = alloca i32, align 4, addrspace(7)
33+
%alloca.8 = alloca i32, align 4, addrspace(8)
34+
%alloca.9 = alloca i32, align 4, addrspace(9)
35+
ret void
36+
}
37+
38+
; CHECK: alloca on amdgpu must be in addrspace(0) or addrspace(5)
39+
; CHECK-NEXT: %alloca.1 = alloca i32, i32 %n, align 4, addrspace(1)
40+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
41+
; CHECK-NEXT: %alloca.2 = alloca i32, i32 %n, align 4, addrspace(2)
42+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
43+
; CHECK-NEXT: %alloca.3 = alloca i32, i32 %n, align 4, addrspace(3)
44+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
45+
; CHECK-NEXT: %alloca.4 = alloca i32, i32 %n, align 4, addrspace(4)
46+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
47+
; CHECK-NEXT: %alloca.6 = alloca i32, i32 %n, align 4, addrspace(6)
48+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
49+
; CHECK-NEXT: %alloca.7 = alloca i32, i32 %n, align 4, addrspace(7)
50+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
51+
; CHECK-NEXT: %alloca.8 = alloca i32, i32 %n, align 4, addrspace(8)
52+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
53+
; CHECK-NEXT: %alloca.9 = alloca i32, i32 %n, align 4, addrspace(9)
54+
define void @dynamic_alloca_i32(i32 %n) {
55+
entry:
56+
%alloca.0 = alloca i32, i32 %n, align 4
57+
%alloca.1 = alloca i32, i32 %n, align 4, addrspace(1)
58+
%alloca.2 = alloca i32, i32 %n, align 4, addrspace(2)
59+
%alloca.3 = alloca i32, i32 %n, align 4, addrspace(3)
60+
%alloca.4 = alloca i32, i32 %n, align 4, addrspace(4)
61+
%alloca.5 = alloca i32, i32 %n, align 4, addrspace(5)
62+
%alloca.6 = alloca i32, i32 %n, align 4, addrspace(6)
63+
%alloca.7 = alloca i32, i32 %n, align 4, addrspace(7)
64+
%alloca.8 = alloca i32, i32 %n, align 4, addrspace(8)
65+
%alloca.9 = alloca i32, i32 %n, align 4, addrspace(9)
66+
ret void
67+
}
68+
69+
; CHECK: alloca on amdgpu must be in addrspace(0) or addrspace(5)
70+
; CHECK-NEXT: %alloca.1 = alloca i32, i64 %n, align 4, addrspace(1)
71+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
72+
; CHECK-NEXT: %alloca.2 = alloca i32, i64 %n, align 4, addrspace(2)
73+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
74+
; CHECK-NEXT: %alloca.3 = alloca i32, i64 %n, align 4, addrspace(3)
75+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
76+
; CHECK-NEXT: %alloca.4 = alloca i32, i64 %n, align 4, addrspace(4)
77+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
78+
; CHECK-NEXT: %alloca.6 = alloca i32, i64 %n, align 4, addrspace(6)
79+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
80+
; CHECK-NEXT: %alloca.7 = alloca i32, i64 %n, align 4, addrspace(7)
81+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
82+
; CHECK-NEXT: %alloca.8 = alloca i32, i64 %n, align 4, addrspace(8)
83+
; CHECK-NEXT: alloca on amdgpu must be in addrspace(0) or addrspace(5)
84+
; CHECK-NEXT: %alloca.9 = alloca i32, i64 %n, align 4, addrspace(9)
85+
define void @dynamic_alloca_i64(i64 %n) {
86+
entry:
87+
%alloca.0 = alloca i32, i64 %n, align 4
88+
%alloca.1 = alloca i32, i64 %n, align 4, addrspace(1)
89+
%alloca.2 = alloca i32, i64 %n, align 4, addrspace(2)
90+
%alloca.3 = alloca i32, i64 %n, align 4, addrspace(3)
91+
%alloca.4 = alloca i32, i64 %n, align 4, addrspace(4)
92+
%alloca.5 = alloca i32, i64 %n, align 4, addrspace(5)
93+
%alloca.6 = alloca i32, i64 %n, align 4, addrspace(6)
94+
%alloca.7 = alloca i32, i64 %n, align 4, addrspace(7)
95+
%alloca.8 = alloca i32, i64 %n, align 4, addrspace(8)
96+
%alloca.9 = alloca i32, i64 %n, align 4, addrspace(9)
97+
ret void
98+
}

0 commit comments

Comments
 (0)