[clang] Fix crashes when passing VLA to va_arg (#119563)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / preload-kernargs-inreg-hints.ll
blob20edbd6c0d0fa6386f512893a112de87db1f48b2
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
2 ; RUN: opt -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -passes=amdgpu-attributor -S < %s | FileCheck -check-prefix=NO-PRELOAD %s
3 ; RUN: opt -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -amdgpu-kernarg-preload-count=1 -passes=amdgpu-attributor -S < %s | FileCheck -check-prefix=PRELOAD-1 %s
4 ; RUN: opt -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -amdgpu-kernarg-preload-count=3 -passes=amdgpu-attributor -S < %s | FileCheck -check-prefix=PRELOAD-3 %s
5 ; RUN: opt -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -amdgpu-kernarg-preload-count=16 -passes=amdgpu-attributor -S < %s | FileCheck -check-prefix=PRELOAD-16 %s
6 ; RUN: opt -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -amdgpu-kernarg-preload-count=20 -passes=amdgpu-attributor -S < %s | FileCheck -check-prefix=PRELOAD-20 %s
8 define amdgpu_kernel void @test_preload_hint_kernel_1(ptr %0) #0 {
9 ; NO-PRELOAD-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1
10 ; NO-PRELOAD-SAME: (ptr [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
11 ; NO-PRELOAD-NEXT:    ret void
13 ; PRELOAD-1-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1
14 ; PRELOAD-1-SAME: (ptr inreg [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
15 ; PRELOAD-1-NEXT:    ret void
17 ; PRELOAD-3-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1
18 ; PRELOAD-3-SAME: (ptr inreg [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
19 ; PRELOAD-3-NEXT:    ret void
21 ; PRELOAD-16-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1
22 ; PRELOAD-16-SAME: (ptr inreg [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
23 ; PRELOAD-16-NEXT:    ret void
25 ; PRELOAD-20-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1
26 ; PRELOAD-20-SAME: (ptr inreg [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
27 ; PRELOAD-20-NEXT:    ret void
29   ret void
32 define amdgpu_kernel void @test_preload_hint_kernel_2(i32 %0, i64 %1) #0 {
33 ; NO-PRELOAD-LABEL: define {{[^@]+}}@test_preload_hint_kernel_2
34 ; NO-PRELOAD-SAME: (i32 [[TMP0:%.*]], i64 [[TMP1:%.*]]) #[[ATTR0]] {
35 ; NO-PRELOAD-NEXT:    ret void
37 ; PRELOAD-1-LABEL: define {{[^@]+}}@test_preload_hint_kernel_2
38 ; PRELOAD-1-SAME: (i32 inreg [[TMP0:%.*]], i64 [[TMP1:%.*]]) #[[ATTR0]] {
39 ; PRELOAD-1-NEXT:    ret void
41 ; PRELOAD-3-LABEL: define {{[^@]+}}@test_preload_hint_kernel_2
42 ; PRELOAD-3-SAME: (i32 inreg [[TMP0:%.*]], i64 inreg [[TMP1:%.*]]) #[[ATTR0]] {
43 ; PRELOAD-3-NEXT:    ret void
45 ; PRELOAD-16-LABEL: define {{[^@]+}}@test_preload_hint_kernel_2
46 ; PRELOAD-16-SAME: (i32 inreg [[TMP0:%.*]], i64 inreg [[TMP1:%.*]]) #[[ATTR0]] {
47 ; PRELOAD-16-NEXT:    ret void
49 ; PRELOAD-20-LABEL: define {{[^@]+}}@test_preload_hint_kernel_2
50 ; PRELOAD-20-SAME: (i32 inreg [[TMP0:%.*]], i64 inreg [[TMP1:%.*]]) #[[ATTR0]] {
51 ; PRELOAD-20-NEXT:    ret void
53   ret void
56 define amdgpu_kernel void @test_preload_hint_kernel_4(i32 %0, i64 %1, <2 x float> %2, ptr %3) #0 {
57 ; NO-PRELOAD-LABEL: define {{[^@]+}}@test_preload_hint_kernel_4
58 ; NO-PRELOAD-SAME: (i32 [[TMP0:%.*]], i64 [[TMP1:%.*]], <2 x float> [[TMP2:%.*]], ptr [[TMP3:%.*]]) #[[ATTR0]] {
59 ; NO-PRELOAD-NEXT:    ret void
61 ; PRELOAD-1-LABEL: define {{[^@]+}}@test_preload_hint_kernel_4
62 ; PRELOAD-1-SAME: (i32 inreg [[TMP0:%.*]], i64 [[TMP1:%.*]], <2 x float> [[TMP2:%.*]], ptr [[TMP3:%.*]]) #[[ATTR0]] {
63 ; PRELOAD-1-NEXT:    ret void
65 ; PRELOAD-3-LABEL: define {{[^@]+}}@test_preload_hint_kernel_4
66 ; PRELOAD-3-SAME: (i32 inreg [[TMP0:%.*]], i64 inreg [[TMP1:%.*]], <2 x float> inreg [[TMP2:%.*]], ptr [[TMP3:%.*]]) #[[ATTR0]] {
67 ; PRELOAD-3-NEXT:    ret void
69 ; PRELOAD-16-LABEL: define {{[^@]+}}@test_preload_hint_kernel_4
70 ; PRELOAD-16-SAME: (i32 inreg [[TMP0:%.*]], i64 inreg [[TMP1:%.*]], <2 x float> inreg [[TMP2:%.*]], ptr inreg [[TMP3:%.*]]) #[[ATTR0]] {
71 ; PRELOAD-16-NEXT:    ret void
73 ; PRELOAD-20-LABEL: define {{[^@]+}}@test_preload_hint_kernel_4
74 ; PRELOAD-20-SAME: (i32 inreg [[TMP0:%.*]], i64 inreg [[TMP1:%.*]], <2 x float> inreg [[TMP2:%.*]], ptr inreg [[TMP3:%.*]]) #[[ATTR0]] {
75 ; PRELOAD-20-NEXT:    ret void
77   ret void
80 define amdgpu_kernel void @test_preload_hint_kernel_18(i32 %0, i64 %1, <2 x float> %2, ptr %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32 %10, i32 %11, i32 %12, i32 %13, i32 %14, i32 %15, i32 %16, i32 %17) #0 {
81 ; NO-PRELOAD-LABEL: define {{[^@]+}}@test_preload_hint_kernel_18
82 ; NO-PRELOAD-SAME: (i32 [[TMP0:%.*]], i64 [[TMP1:%.*]], <2 x float> [[TMP2:%.*]], ptr [[TMP3:%.*]], i32 [[TMP4:%.*]], i32 [[TMP5:%.*]], i32 [[TMP6:%.*]], i32 [[TMP7:%.*]], i32 [[TMP8:%.*]], i32 [[TMP9:%.*]], i32 [[TMP10:%.*]], i32 [[TMP11:%.*]], i32 [[TMP12:%.*]], i32 [[TMP13:%.*]], i32 [[TMP14:%.*]], i32 [[TMP15:%.*]], i32 [[TMP16:%.*]], i32 [[TMP17:%.*]]) #[[ATTR0]] {
83 ; NO-PRELOAD-NEXT:    ret void
85 ; PRELOAD-1-LABEL: define {{[^@]+}}@test_preload_hint_kernel_18
86 ; PRELOAD-1-SAME: (i32 inreg [[TMP0:%.*]], i64 [[TMP1:%.*]], <2 x float> [[TMP2:%.*]], ptr [[TMP3:%.*]], i32 [[TMP4:%.*]], i32 [[TMP5:%.*]], i32 [[TMP6:%.*]], i32 [[TMP7:%.*]], i32 [[TMP8:%.*]], i32 [[TMP9:%.*]], i32 [[TMP10:%.*]], i32 [[TMP11:%.*]], i32 [[TMP12:%.*]], i32 [[TMP13:%.*]], i32 [[TMP14:%.*]], i32 [[TMP15:%.*]], i32 [[TMP16:%.*]], i32 [[TMP17:%.*]]) #[[ATTR0]] {
87 ; PRELOAD-1-NEXT:    ret void
89 ; PRELOAD-3-LABEL: define {{[^@]+}}@test_preload_hint_kernel_18
90 ; PRELOAD-3-SAME: (i32 inreg [[TMP0:%.*]], i64 inreg [[TMP1:%.*]], <2 x float> inreg [[TMP2:%.*]], ptr [[TMP3:%.*]], i32 [[TMP4:%.*]], i32 [[TMP5:%.*]], i32 [[TMP6:%.*]], i32 [[TMP7:%.*]], i32 [[TMP8:%.*]], i32 [[TMP9:%.*]], i32 [[TMP10:%.*]], i32 [[TMP11:%.*]], i32 [[TMP12:%.*]], i32 [[TMP13:%.*]], i32 [[TMP14:%.*]], i32 [[TMP15:%.*]], i32 [[TMP16:%.*]], i32 [[TMP17:%.*]]) #[[ATTR0]] {
91 ; PRELOAD-3-NEXT:    ret void
93 ; PRELOAD-16-LABEL: define {{[^@]+}}@test_preload_hint_kernel_18
94 ; PRELOAD-16-SAME: (i32 inreg [[TMP0:%.*]], i64 inreg [[TMP1:%.*]], <2 x float> inreg [[TMP2:%.*]], ptr inreg [[TMP3:%.*]], i32 inreg [[TMP4:%.*]], i32 inreg [[TMP5:%.*]], i32 inreg [[TMP6:%.*]], i32 inreg [[TMP7:%.*]], i32 inreg [[TMP8:%.*]], i32 inreg [[TMP9:%.*]], i32 inreg [[TMP10:%.*]], i32 inreg [[TMP11:%.*]], i32 inreg [[TMP12:%.*]], i32 inreg [[TMP13:%.*]], i32 inreg [[TMP14:%.*]], i32 inreg [[TMP15:%.*]], i32 [[TMP16:%.*]], i32 [[TMP17:%.*]]) #[[ATTR0]] {
95 ; PRELOAD-16-NEXT:    ret void
97 ; PRELOAD-20-LABEL: define {{[^@]+}}@test_preload_hint_kernel_18
98 ; PRELOAD-20-SAME: (i32 inreg [[TMP0:%.*]], i64 inreg [[TMP1:%.*]], <2 x float> inreg [[TMP2:%.*]], ptr inreg [[TMP3:%.*]], i32 inreg [[TMP4:%.*]], i32 inreg [[TMP5:%.*]], i32 inreg [[TMP6:%.*]], i32 inreg [[TMP7:%.*]], i32 inreg [[TMP8:%.*]], i32 inreg [[TMP9:%.*]], i32 inreg [[TMP10:%.*]], i32 inreg [[TMP11:%.*]], i32 inreg [[TMP12:%.*]], i32 inreg [[TMP13:%.*]], i32 inreg [[TMP14:%.*]], i32 inreg [[TMP15:%.*]], i32 [[TMP16:%.*]], i32 [[TMP17:%.*]]) #[[ATTR0]] {
99 ; PRELOAD-20-NEXT:    ret void
101   ret void
104 define void @test_preload_hint_non_kernel_2(i32 %0, i64 %1) #0 {
105 ; NO-PRELOAD-LABEL: define {{[^@]+}}@test_preload_hint_non_kernel_2
106 ; NO-PRELOAD-SAME: (i32 [[TMP0:%.*]], i64 [[TMP1:%.*]]) #[[ATTR1:[0-9]+]] {
107 ; NO-PRELOAD-NEXT:    ret void
109 ; PRELOAD-1-LABEL: define {{[^@]+}}@test_preload_hint_non_kernel_2
110 ; PRELOAD-1-SAME: (i32 [[TMP0:%.*]], i64 [[TMP1:%.*]]) #[[ATTR1:[0-9]+]] {
111 ; PRELOAD-1-NEXT:    ret void
113 ; PRELOAD-3-LABEL: define {{[^@]+}}@test_preload_hint_non_kernel_2
114 ; PRELOAD-3-SAME: (i32 [[TMP0:%.*]], i64 [[TMP1:%.*]]) #[[ATTR1:[0-9]+]] {
115 ; PRELOAD-3-NEXT:    ret void
117 ; PRELOAD-16-LABEL: define {{[^@]+}}@test_preload_hint_non_kernel_2
118 ; PRELOAD-16-SAME: (i32 [[TMP0:%.*]], i64 [[TMP1:%.*]]) #[[ATTR1:[0-9]+]] {
119 ; PRELOAD-16-NEXT:    ret void
121 ; PRELOAD-20-LABEL: define {{[^@]+}}@test_preload_hint_non_kernel_2
122 ; PRELOAD-20-SAME: (i32 [[TMP0:%.*]], i64 [[TMP1:%.*]]) #[[ATTR1:[0-9]+]] {
123 ; PRELOAD-20-NEXT:    ret void
125   ret void
128 define amdgpu_kernel void @test_preload_hint_kernel_1_call_func(ptr %0) #0 {
129 ; NO-PRELOAD-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_call_func
130 ; NO-PRELOAD-SAME: (ptr [[TMP0:%.*]]) #[[ATTR2:[0-9]+]] {
131 ; NO-PRELOAD-NEXT:    call void @func(ptr [[TMP0]])
132 ; NO-PRELOAD-NEXT:    ret void
134 ; PRELOAD-1-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_call_func
135 ; PRELOAD-1-SAME: (ptr inreg [[TMP0:%.*]]) #[[ATTR2:[0-9]+]] {
136 ; PRELOAD-1-NEXT:    call void @func(ptr [[TMP0]])
137 ; PRELOAD-1-NEXT:    ret void
139 ; PRELOAD-3-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_call_func
140 ; PRELOAD-3-SAME: (ptr inreg [[TMP0:%.*]]) #[[ATTR2:[0-9]+]] {
141 ; PRELOAD-3-NEXT:    call void @func(ptr [[TMP0]])
142 ; PRELOAD-3-NEXT:    ret void
144 ; PRELOAD-16-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_call_func
145 ; PRELOAD-16-SAME: (ptr inreg [[TMP0:%.*]]) #[[ATTR2:[0-9]+]] {
146 ; PRELOAD-16-NEXT:    call void @func(ptr [[TMP0]])
147 ; PRELOAD-16-NEXT:    ret void
149 ; PRELOAD-20-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_call_func
150 ; PRELOAD-20-SAME: (ptr inreg [[TMP0:%.*]]) #[[ATTR2:[0-9]+]] {
151 ; PRELOAD-20-NEXT:    call void @func(ptr [[TMP0]])
152 ; PRELOAD-20-NEXT:    ret void
154   call void @func(ptr %0)
155   ret void
158 define amdgpu_kernel void @test_preload_hint_kernel_1_call_intrinsic(i16 %0) #0 {
159 ; NO-PRELOAD-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_call_intrinsic
160 ; NO-PRELOAD-SAME: (i16 [[TMP0:%.*]]) #[[ATTR3:[0-9]+]] {
161 ; NO-PRELOAD-NEXT:    call void @llvm.amdgcn.set.prio(i16 [[TMP0]])
162 ; NO-PRELOAD-NEXT:    ret void
164 ; PRELOAD-1-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_call_intrinsic
165 ; PRELOAD-1-SAME: (i16 inreg [[TMP0:%.*]]) #[[ATTR3:[0-9]+]] {
166 ; PRELOAD-1-NEXT:    call void @llvm.amdgcn.set.prio(i16 [[TMP0]])
167 ; PRELOAD-1-NEXT:    ret void
169 ; PRELOAD-3-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_call_intrinsic
170 ; PRELOAD-3-SAME: (i16 inreg [[TMP0:%.*]]) #[[ATTR3:[0-9]+]] {
171 ; PRELOAD-3-NEXT:    call void @llvm.amdgcn.set.prio(i16 [[TMP0]])
172 ; PRELOAD-3-NEXT:    ret void
174 ; PRELOAD-16-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_call_intrinsic
175 ; PRELOAD-16-SAME: (i16 inreg [[TMP0:%.*]]) #[[ATTR3:[0-9]+]] {
176 ; PRELOAD-16-NEXT:    call void @llvm.amdgcn.set.prio(i16 [[TMP0]])
177 ; PRELOAD-16-NEXT:    ret void
179 ; PRELOAD-20-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_call_intrinsic
180 ; PRELOAD-20-SAME: (i16 inreg [[TMP0:%.*]]) #[[ATTR3:[0-9]+]] {
181 ; PRELOAD-20-NEXT:    call void @llvm.amdgcn.set.prio(i16 [[TMP0]])
182 ; PRELOAD-20-NEXT:    ret void
184   call void @llvm.amdgcn.set.prio(i16 %0)
185   ret void
188 define spir_kernel void @test_preload_hint_kernel_1_spir_cc(ptr %0) #0 {
189 ; NO-PRELOAD-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_spir_cc
190 ; NO-PRELOAD-SAME: (ptr [[TMP0:%.*]]) #[[ATTR0]] {
191 ; NO-PRELOAD-NEXT:    ret void
193 ; PRELOAD-1-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_spir_cc
194 ; PRELOAD-1-SAME: (ptr [[TMP0:%.*]]) #[[ATTR0]] {
195 ; PRELOAD-1-NEXT:    ret void
197 ; PRELOAD-3-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_spir_cc
198 ; PRELOAD-3-SAME: (ptr [[TMP0:%.*]]) #[[ATTR0]] {
199 ; PRELOAD-3-NEXT:    ret void
201 ; PRELOAD-16-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_spir_cc
202 ; PRELOAD-16-SAME: (ptr [[TMP0:%.*]]) #[[ATTR0]] {
203 ; PRELOAD-16-NEXT:    ret void
205 ; PRELOAD-20-LABEL: define {{[^@]+}}@test_preload_hint_kernel_1_spir_cc
206 ; PRELOAD-20-SAME: (ptr [[TMP0:%.*]]) #[[ATTR0]] {
207 ; PRELOAD-20-NEXT:    ret void
209   ret void
212 define amdgpu_kernel void @test_preload_hint_kernel_2_preexisting(i32 inreg %0, i64 %1) #0 {
213 ; NO-PRELOAD-LABEL: define {{[^@]+}}@test_preload_hint_kernel_2_preexisting
214 ; NO-PRELOAD-SAME: (i32 inreg [[TMP0:%.*]], i64 [[TMP1:%.*]]) #[[ATTR0]] {
215 ; NO-PRELOAD-NEXT:    ret void
217 ; PRELOAD-1-LABEL: define {{[^@]+}}@test_preload_hint_kernel_2_preexisting
218 ; PRELOAD-1-SAME: (i32 inreg [[TMP0:%.*]], i64 [[TMP1:%.*]]) #[[ATTR0]] {
219 ; PRELOAD-1-NEXT:    ret void
221 ; PRELOAD-3-LABEL: define {{[^@]+}}@test_preload_hint_kernel_2_preexisting
222 ; PRELOAD-3-SAME: (i32 inreg [[TMP0:%.*]], i64 inreg [[TMP1:%.*]]) #[[ATTR0]] {
223 ; PRELOAD-3-NEXT:    ret void
225 ; PRELOAD-16-LABEL: define {{[^@]+}}@test_preload_hint_kernel_2_preexisting
226 ; PRELOAD-16-SAME: (i32 inreg [[TMP0:%.*]], i64 inreg [[TMP1:%.*]]) #[[ATTR0]] {
227 ; PRELOAD-16-NEXT:    ret void
229 ; PRELOAD-20-LABEL: define {{[^@]+}}@test_preload_hint_kernel_2_preexisting
230 ; PRELOAD-20-SAME: (i32 inreg [[TMP0:%.*]], i64 inreg [[TMP1:%.*]]) #[[ATTR0]] {
231 ; PRELOAD-20-NEXT:    ret void
233   ret void
236 define amdgpu_kernel void @test_preload_hint_kernel_incompatible_attributes(ptr addrspace(4) byref(i32) %0, ptr nest %1) {
237 ; NO-PRELOAD-LABEL: define {{[^@]+}}@test_preload_hint_kernel_incompatible_attributes
238 ; NO-PRELOAD-SAME: (ptr addrspace(4) byref(i32) [[TMP0:%.*]], ptr nest [[TMP1:%.*]]) #[[ATTR4:[0-9]+]] {
239 ; NO-PRELOAD-NEXT:    ret void
241 ; PRELOAD-1-LABEL: define {{[^@]+}}@test_preload_hint_kernel_incompatible_attributes
242 ; PRELOAD-1-SAME: (ptr addrspace(4) byref(i32) [[TMP0:%.*]], ptr nest [[TMP1:%.*]]) #[[ATTR4:[0-9]+]] {
243 ; PRELOAD-1-NEXT:    ret void
245 ; PRELOAD-3-LABEL: define {{[^@]+}}@test_preload_hint_kernel_incompatible_attributes
246 ; PRELOAD-3-SAME: (ptr addrspace(4) byref(i32) [[TMP0:%.*]], ptr nest [[TMP1:%.*]]) #[[ATTR4:[0-9]+]] {
247 ; PRELOAD-3-NEXT:    ret void
249 ; PRELOAD-16-LABEL: define {{[^@]+}}@test_preload_hint_kernel_incompatible_attributes
250 ; PRELOAD-16-SAME: (ptr addrspace(4) byref(i32) [[TMP0:%.*]], ptr nest [[TMP1:%.*]]) #[[ATTR4:[0-9]+]] {
251 ; PRELOAD-16-NEXT:    ret void
253 ; PRELOAD-20-LABEL: define {{[^@]+}}@test_preload_hint_kernel_incompatible_attributes
254 ; PRELOAD-20-SAME: (ptr addrspace(4) byref(i32) [[TMP0:%.*]], ptr nest [[TMP1:%.*]]) #[[ATTR4:[0-9]+]] {
255 ; PRELOAD-20-NEXT:    ret void
257   ret void
260 declare void @func(ptr) #0
261 declare void @llvm.amdgcn.set.prio(i16)
263 attributes #0 = { nounwind }