xref: /llvm-project/llvm/test/CodeGen/AMDGPU/attr-amdgpu-max-num-workgroups-propagate.ll (revision f4037277bb0220cb1dece91d21d4fdc2995eae7a)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes --check-globals all --version 5
2; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=amdgpu-attributor %s | FileCheck %s
3
4; External call to avoid inferring argument attributes. This makes the
5; final attribute groups easier to read
6declare void @dummy()
7
8define void @extern_callee() {
9; CHECK-LABEL: define void @extern_callee(
10; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
11; CHECK-NEXT:    call void @dummy()
12; CHECK-NEXT:    ret void
13;
14  call void @dummy()
15  ret void
16}
17
18define internal void @callee_1_2_3() {
19; CHECK-LABEL: define internal void @callee_1_2_3(
20; CHECK-SAME: ) #[[ATTR1:[0-9]+]] {
21; CHECK-NEXT:    call void @dummy()
22; CHECK-NEXT:    ret void
23;
24  call void @dummy()
25  ret void
26}
27
28define amdgpu_kernel void @kernel_1_2_3() #0 {
29; CHECK-LABEL: define amdgpu_kernel void @kernel_1_2_3(
30; CHECK-SAME: ) #[[ATTR2:[0-9]+]] {
31; CHECK-NEXT:    call void @callee_1_2_3()
32; CHECK-NEXT:    call void @extern_callee()
33; CHECK-NEXT:    call void @dummy()
34; CHECK-NEXT:    ret void
35;
36  call void @callee_1_2_3()
37  call void @extern_callee()
38  call void @dummy()
39  ret void
40}
41
42attributes #0 = {"amdgpu-max-num-workgroups"="1,2,3"}
43
44; -> 100,10,99
45define internal void @callee_merge_100_8_32__16_10_99() {
46; CHECK-LABEL: define internal void @callee_merge_100_8_32__16_10_99(
47; CHECK-SAME: ) #[[ATTR3:[0-9]+]] {
48; CHECK-NEXT:    call void @dummy()
49; CHECK-NEXT:    ret void
50;
51  call void @dummy()
52  ret void
53}
54
55define amdgpu_kernel void @kernel_100_8_32() #1 {
56; CHECK-LABEL: define amdgpu_kernel void @kernel_100_8_32(
57; CHECK-SAME: ) #[[ATTR4:[0-9]+]] {
58; CHECK-NEXT:    call void @callee_merge_100_8_32__16_10_99()
59; CHECK-NEXT:    ret void
60;
61  call void @callee_merge_100_8_32__16_10_99()
62  ret void
63}
64
65define amdgpu_cs void @amdgpu_cs_100_8_32() #1 {
66; CHECK-LABEL: define amdgpu_cs void @amdgpu_cs_100_8_32(
67; CHECK-SAME: ) #[[ATTR4]] {
68; CHECK-NEXT:    call void @callee_merge_100_8_32__16_10_99()
69; CHECK-NEXT:    ret void
70;
71  call void @callee_merge_100_8_32__16_10_99()
72  ret void
73}
74
75attributes #1 = {"amdgpu-max-num-workgroups"="100,8,32"}
76
77define amdgpu_kernel void @kernel_16_10_99() #2 {
78; CHECK-LABEL: define amdgpu_kernel void @kernel_16_10_99(
79; CHECK-SAME: ) #[[ATTR5:[0-9]+]] {
80; CHECK-NEXT:    call void @callee_merge_100_8_32__16_10_99()
81; CHECK-NEXT:    call void @dummy()
82; CHECK-NEXT:    ret void
83;
84  call void @callee_merge_100_8_32__16_10_99()
85  call void @dummy()
86  ret void
87}
88
89attributes #2 = {"amdgpu-max-num-workgroups"="16,10,99"}
90
91define internal void @merge_to_worst_case() {
92; CHECK-LABEL: define internal void @merge_to_worst_case(
93; CHECK-SAME: ) #[[ATTR0]] {
94; CHECK-NEXT:    call void @dummy()
95; CHECK-NEXT:    ret void
96;
97  call void @dummy()
98  ret void
99}
100
101define internal void @callee_x_worst_case() {
102; CHECK-LABEL: define internal void @callee_x_worst_case(
103; CHECK-SAME: ) #[[ATTR0]] {
104; CHECK-NEXT:    call void @dummy()
105; CHECK-NEXT:    ret void
106;
107  call void @dummy()
108  ret void
109}
110
111define amdgpu_kernel void @kernel_x_maximum() #3 {
112; CHECK-LABEL: define amdgpu_kernel void @kernel_x_maximum(
113; CHECK-SAME: ) #[[ATTR6:[0-9]+]] {
114; CHECK-NEXT:    call void @merge_to_worst_case()
115; CHECK-NEXT:    call void @callee_x_worst_case()
116; CHECK-NEXT:    call void @dummy()
117; CHECK-NEXT:    ret void
118;
119  call void @merge_to_worst_case()
120  call void @callee_x_worst_case()
121  call void @dummy()
122  ret void
123}
124
125attributes #3 = {"amdgpu-max-num-workgroups"="4294967295,1,1"}
126
127define amdgpu_kernel void @kernel_y_maximum() #4 {
128; CHECK-LABEL: define amdgpu_kernel void @kernel_y_maximum(
129; CHECK-SAME: ) #[[ATTR7:[0-9]+]] {
130; CHECK-NEXT:    call void @merge_to_worst_case()
131; CHECK-NEXT:    call void @dummy()
132; CHECK-NEXT:    ret void
133;
134  call void @merge_to_worst_case()
135  call void @dummy()
136  ret void
137}
138
139attributes #4 = {"amdgpu-max-num-workgroups"="1,4294967295,1"}
140
141define amdgpu_kernel void @kernel_z_maximum() #5 {
142; CHECK-LABEL: define amdgpu_kernel void @kernel_z_maximum(
143; CHECK-SAME: ) #[[ATTR8:[0-9]+]] {
144; CHECK-NEXT:    call void @merge_to_worst_case()
145; CHECK-NEXT:    call void @dummy()
146; CHECK-NEXT:    ret void
147;
148  call void @merge_to_worst_case()
149  call void @dummy()
150  ret void
151}
152
153attributes #5 = {"amdgpu-max-num-workgroups"="1,1,4294967295"}
154
155; Make sure the attribute isn't lost from the callee.
156define internal void @annotated_callee_from_unannotated_kernel() #6 {
157; CHECK-LABEL: define internal void @annotated_callee_from_unannotated_kernel(
158; CHECK-SAME: ) #[[ATTR9:[0-9]+]] {
159; CHECK-NEXT:    call void @dummy()
160; CHECK-NEXT:    ret void
161;
162  call void @dummy()
163  ret void
164}
165
166attributes #6 = {"amdgpu-max-num-workgroups"="42,99,123"}
167
168define amdgpu_kernel void @unannotated_kernel_calls_annotated_callee()  {
169; CHECK-LABEL: define amdgpu_kernel void @unannotated_kernel_calls_annotated_callee(
170; CHECK-SAME: ) #[[ATTR10:[0-9]+]] {
171; CHECK-NEXT:    call void @annotated_callee_from_unannotated_kernel()
172; CHECK-NEXT:    ret void
173;
174  call void @annotated_callee_from_unannotated_kernel()
175  ret void
176}
177
178
179define internal void @annotated_callee_merge_caller() #7 {
180; CHECK-LABEL: define internal void @annotated_callee_merge_caller(
181; CHECK-SAME: ) #[[ATTR11:[0-9]+]] {
182; CHECK-NEXT:    call void @dummy()
183; CHECK-NEXT:    ret void
184;
185  call void @dummy()
186  ret void
187}
188
189attributes #7 = {"amdgpu-max-num-workgroups"="512,256,1024"}
190
191define amdgpu_kernel void @call_annotated_callee_merge_caller() #8 {
192; CHECK-LABEL: define amdgpu_kernel void @call_annotated_callee_merge_caller(
193; CHECK-SAME: ) #[[ATTR12:[0-9]+]] {
194; CHECK-NEXT:    call void @annotated_callee_merge_caller()
195; CHECK-NEXT:    ret void
196;
197  call void @annotated_callee_merge_caller()
198  ret void
199}
200
201attributes #8 = {"amdgpu-max-num-workgroups"="256,128,2048"}
202
203define internal void @called_by_explicit_worst_case() {
204; CHECK-LABEL: define internal void @called_by_explicit_worst_case(
205; CHECK-SAME: ) #[[ATTR0]] {
206; CHECK-NEXT:    call void @dummy()
207; CHECK-NEXT:    ret void
208;
209  call void @dummy()
210  ret void
211}
212
213define amdgpu_kernel void @kernel_explicit_worst_case() #9 {
214; CHECK-LABEL: define amdgpu_kernel void @kernel_explicit_worst_case(
215; CHECK-SAME: ) #[[ATTR13:[0-9]+]] {
216; CHECK-NEXT:    call void @called_by_explicit_worst_case()
217; CHECK-NEXT:    ret void
218;
219  call void @called_by_explicit_worst_case()
220  ret void
221}
222
223attributes #9 = {"amdgpu-max-num-workgroups"="4294967295,4294967295,4294967295"}
224
225;.
226; CHECK: attributes #[[ATTR0]] = { "uniform-work-group-size"="false" }
227; CHECK: attributes #[[ATTR1]] = { "amdgpu-max-num-workgroups"="1,2,3" "uniform-work-group-size"="false" }
228; CHECK: attributes #[[ATTR2]] = { "amdgpu-max-num-workgroups"="1,2,3" "amdgpu-waves-per-eu"="4,10" "uniform-work-group-size"="false" }
229; CHECK: attributes #[[ATTR3]] = { "amdgpu-max-num-workgroups"="100,10,99" "uniform-work-group-size"="false" }
230; CHECK: attributes #[[ATTR4]] = { "amdgpu-max-num-workgroups"="100,8,32" "uniform-work-group-size"="false" }
231; CHECK: attributes #[[ATTR5]] = { "amdgpu-max-num-workgroups"="16,10,99" "amdgpu-waves-per-eu"="4,10" "uniform-work-group-size"="false" }
232; CHECK: attributes #[[ATTR6]] = { "amdgpu-max-num-workgroups"="4294967295,1,1" "amdgpu-waves-per-eu"="4,10" "uniform-work-group-size"="false" }
233; CHECK: attributes #[[ATTR7]] = { "amdgpu-max-num-workgroups"="1,4294967295,1" "uniform-work-group-size"="false" }
234; CHECK: attributes #[[ATTR8]] = { "amdgpu-max-num-workgroups"="1,1,4294967295" "amdgpu-waves-per-eu"="4,10" "uniform-work-group-size"="false" }
235; CHECK: attributes #[[ATTR9]] = { "amdgpu-max-num-workgroups"="42,99,123" "uniform-work-group-size"="false" }
236; CHECK: attributes #[[ATTR10]] = { "amdgpu-waves-per-eu"="4,10" "uniform-work-group-size"="false" }
237; CHECK: attributes #[[ATTR11]] = { "amdgpu-max-num-workgroups"="256,128,1024" "uniform-work-group-size"="false" }
238; CHECK: attributes #[[ATTR12]] = { "amdgpu-max-num-workgroups"="256,128,2048" "amdgpu-waves-per-eu"="4,10" "uniform-work-group-size"="false" }
239; CHECK: attributes #[[ATTR13]] = { "amdgpu-max-num-workgroups"="4294967295,4294967295,4294967295" "amdgpu-waves-per-eu"="4,10" "uniform-work-group-size"="false" }
240;.
241