1
1
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2
2
; RUN: opt -S -mtriple=amdgcn-- -passes=amdgpu-lower-module-lds < %s | FileCheck %s
3
3
4
-
5
4
; Not reached by a non-kernel function and therefore not changed by this pass
6
5
@dynamic_kernel_only = external addrspace (3 ) global [0 x double ]
7
6
34
33
35
34
36
35
define amdgpu_kernel void @kernel_only () {
37
- ; CHECK-LABEL: @kernel_only() #0 {
36
+ ; CHECK-LABEL: @kernel_only() {
38
37
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x double], ptr addrspace(3) @dynamic_kernel_only, i32 0, i32 0
39
38
; CHECK-NEXT: store double 3.140000e+00, ptr addrspace(3) [[ARRAYIDX]], align 8
40
39
; CHECK-NEXT: ret void
@@ -45,8 +44,8 @@ define amdgpu_kernel void @kernel_only() {
45
44
}
46
45
47
46
; The accesses from functions are rewritten to go through the llvm.amdgcn.dynlds.offset.table
48
- define void @use_shared1 () # 0 {
49
- ; CHECK-LABEL: @use_shared1() #1 {
47
+ define void @use_shared1 () {
48
+ ; CHECK-LABEL: @use_shared1() {
50
49
; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.amdgcn.lds.kernel.id()
51
50
; CHECK-NEXT: [[DYNAMIC_SHARED1:%.*]] = getelementptr inbounds [5 x i32], ptr addrspace(4) @llvm.amdgcn.dynlds.offset.table, i32 0, i32 [[TMP1]]
52
51
; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr addrspace(4) [[DYNAMIC_SHARED1]], align 4
@@ -61,7 +60,7 @@ define void @use_shared1() #0 {
61
60
}
62
61
63
62
define void @use_shared2 () #0 {
64
- ; CHECK-LABEL: @use_shared2() #1 {
63
+ ; CHECK-LABEL: @use_shared2() #0 {
65
64
; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.amdgcn.lds.kernel.id()
66
65
; CHECK-NEXT: [[DYNAMIC_SHARED2:%.*]] = getelementptr inbounds [5 x i32], ptr addrspace(4) @llvm.amdgcn.dynlds.offset.table, i32 0, i32 [[TMP1]]
67
66
; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr addrspace(4) [[DYNAMIC_SHARED2]], align 4
@@ -78,7 +77,7 @@ define void @use_shared2() #0 {
78
77
; Include a normal variable so that the new variables aren't all at the same absolute_symbol
79
78
@static_shared = addrspace (3 ) global i32 undef
80
79
define void @use_shared4 () #0 {
81
- ; CHECK-LABEL: @use_shared4() #1 {
80
+ ; CHECK-LABEL: @use_shared4() #0 {
82
81
; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.amdgcn.lds.kernel.id()
83
82
; CHECK-NEXT: store i32 4, ptr addrspace(3) @llvm.amdgcn.module.lds, align 4
84
83
; CHECK-NEXT: [[DYNAMIC_SHARED4:%.*]] = getelementptr inbounds [5 x i32], ptr addrspace(4) @llvm.amdgcn.dynlds.offset.table, i32 0, i32 [[TMP1]]
@@ -95,7 +94,7 @@ define void @use_shared4() #0 {
95
94
}
96
95
97
96
define void @use_shared8 () #0 {
98
- ; CHECK-LABEL: @use_shared8() #1 {
97
+ ; CHECK-LABEL: @use_shared8() #0 {
99
98
; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.amdgcn.lds.kernel.id()
100
99
; CHECK-NEXT: [[DYNAMIC_SHARED8:%.*]] = getelementptr inbounds [5 x i32], ptr addrspace(4) @llvm.amdgcn.dynlds.offset.table, i32 0, i32 [[TMP1]]
101
100
; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr addrspace(4) [[DYNAMIC_SHARED8]], align 4
@@ -111,7 +110,7 @@ define void @use_shared8() #0 {
111
110
112
111
; The kernels are annotated with kernel.id and llvm.donothing use of the corresponding variable
113
112
define amdgpu_kernel void @expect_align1 () {
114
- ; CHECK-LABEL: @expect_align1() #0 !llvm.amdgcn.lds.kernel.id !2
113
+ ; CHECK-LABEL: @expect_align1() !llvm.amdgcn.lds.kernel.id !2
115
114
; CHECK-NEXT: call void @llvm.donothing() [ "ExplicitUse"(ptr addrspace(3) @llvm.amdgcn.expect_align1.dynlds) ]
116
115
; CHECK-NEXT: call void @use_shared1()
117
116
; CHECK-NEXT: ret void
@@ -121,7 +120,7 @@ define amdgpu_kernel void @expect_align1() {
121
120
}
122
121
123
122
define amdgpu_kernel void @expect_align2 () {
124
- ; CHECK-LABEL: @expect_align2() #0 !llvm.amdgcn.lds.kernel.id !3
123
+ ; CHECK-LABEL: @expect_align2() !llvm.amdgcn.lds.kernel.id !3
125
124
; CHECK-NEXT: call void @llvm.donothing() [ "ExplicitUse"(ptr addrspace(3) @llvm.amdgcn.expect_align2.dynlds) ]
126
125
; CHECK-NEXT: call void @use_shared2()
127
126
; CHECK-NEXT: ret void
@@ -131,7 +130,7 @@ define amdgpu_kernel void @expect_align2() {
131
130
}
132
131
133
132
define amdgpu_kernel void @expect_align4 () {
134
- ; CHECK-LABEL: @expect_align4() #2 !llvm.amdgcn.lds.kernel.id !4 {
133
+ ; CHECK-LABEL: @expect_align4() #1 !llvm.amdgcn.lds.kernel.id !4 {
135
134
; CHECK-NEXT: call void @llvm.donothing() [ "ExplicitUse"(ptr addrspace(3) @llvm.amdgcn.expect_align4.dynlds) ]
136
135
; CHECK-NEXT: call void @llvm.donothing() [ "ExplicitUse"(ptr addrspace(3) @llvm.amdgcn.module.lds) ]
137
136
; CHECK-NEXT: call void @use_shared4()
@@ -141,9 +140,9 @@ define amdgpu_kernel void @expect_align4() {
141
140
ret void
142
141
}
143
142
144
- ; Use dynamic_shared directly too. Can elide module lds (#0)
143
+ ; Use dynamic_shared directly too.
145
144
define amdgpu_kernel void @expect_align8 () {
146
- ; CHECK-LABEL: @expect_align8() #0 !llvm.amdgcn.lds.kernel.id !5 {
145
+ ; CHECK-LABEL: @expect_align8() !llvm.amdgcn.lds.kernel.id !5 {
147
146
; CHECK-NEXT: call void @llvm.donothing() [ "ExplicitUse"(ptr addrspace(3) @llvm.amdgcn.expect_align8.dynlds) ]
148
147
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i64], ptr addrspace(3) @dynamic_shared8, i32 0, i32 9
149
148
; CHECK-NEXT: store i64 3, ptr addrspace(3) [[ARRAYIDX]], align 4
@@ -158,7 +157,7 @@ define amdgpu_kernel void @expect_align8() {
158
157
159
158
; Note: use_shared4 uses module.lds so this will allocate at offset 4
160
159
define amdgpu_kernel void @expect_max_of_2_and_4 () {
161
- ; CHECK-LABEL: @expect_max_of_2_and_4() #2 !llvm.amdgcn.lds.kernel.id !6 {
160
+ ; CHECK-LABEL: @expect_max_of_2_and_4() #1 !llvm.amdgcn.lds.kernel.id !6 {
162
161
; CHECK-NEXT: call void @llvm.donothing() [ "ExplicitUse"(ptr addrspace(3) @llvm.amdgcn.expect_max_of_2_and_4.dynlds) ]
163
162
; CHECK-NEXT: call void @llvm.donothing() [ "ExplicitUse"(ptr addrspace(3) @llvm.amdgcn.module.lds) ]
164
163
; CHECK-NEXT: call void @use_shared2()
@@ -174,16 +173,15 @@ define amdgpu_kernel void @expect_max_of_2_and_4() {
174
173
attributes #0 = { noinline }
175
174
176
175
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
177
- ; CHECK: declare void @llvm.donothing() #3
176
+ ; CHECK: declare void @llvm.donothing() #2
178
177
179
178
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
180
- ; CHECK: declare i32 @llvm.amdgcn.lds.kernel.id() #4
179
+ ; CHECK: declare i32 @llvm.amdgcn.lds.kernel.id() #3
181
180
182
- ; CHECK: attributes #0 = { "amdgpu-elide-module-lds" }
183
- ; CHECK: attributes #1 = { noinline }
184
- ; CHECK: attributes #2 = { "amdgpu-lds-size"="4" }
185
- ; CHECK: attributes #3 = { nocallback nofree nosync nounwind willreturn memory(none) }
186
- ; CHECK: attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
181
+ ; CHECK: attributes #0 = { noinline }
182
+ ; CHECK: attributes #1 = { "amdgpu-lds-size"="4" }
183
+ ; CHECK: attributes #2 = { nocallback nofree nosync nounwind willreturn memory(none) }
184
+ ; CHECK: attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
187
185
188
186
; CHECK: !0 = !{i64 0, i64 1}
189
187
; CHECK: !1 = !{i64 4, i64 5}
0 commit comments