[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / gfx11-user-sgpr-init16-bug.ll
blobea5add023d15cf033178c66b5e8cdf4156214a66
1 ; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GCN,WORKAROUND %s
2 ; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GCN,WORKAROUND %s
4 ; Does not apply to wave64
5 ; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+wavefrontsize64 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GCN,NOWORKAROUND %s
6 ; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+wavefrontsize64 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GCN,NOWORKAROUND %s
8 ; Does not apply to gfx1101
9 ; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1101 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GCN,NOWORKAROUND %s
10 ; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1101 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GCN,NOWORKAROUND %s
12 ; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1102 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GCN,WORKAROUND %s
13 ; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1102 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GCN,WORKAROUND %s
15 ; Does not apply to gfx1103
16 ; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1103 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GCN,NOWORKAROUND %s
17 ; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1103 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GCN,NOWORKAROUND %s
19 ; There aren't any stack objects, but we still enable the
20 ; private_segment_wavefront_offset to get to 16, and the workgroup ID
21 ; is in s14.
23 ; private_segment_buffer + workgroup_id_x = 5, + 11 padding
25 ; GCN-LABEL: {{^}}minimal_kernel_inputs:
26 ; WORKAROUND: v_mov_b32_e32 [[V:v[0-9]+]], s15
27 ; NOWORKAROUND: v_mov_b32_e32 [[V:v[0-9]+]], s0
28 ; GCN-NEXT: global_store_b32 v{{\[[0-9]+:[0-9]+\]}}, [[V]], off
30 ; GCN: .amdhsa_kernel minimal_kernel_inputs
31 ; WORKAROUND: .amdhsa_user_sgpr_count 15
32 ; NOWORKAROUND: .amdhsa_user_sgpr_count 0
33 ; GCN-NEXT: .amdhsa_user_sgpr_dispatch_ptr 0
34 ; GCN-NEXT: .amdhsa_user_sgpr_queue_ptr 0
35 ; GCN-NEXT: .amdhsa_user_sgpr_kernarg_segment_ptr 0
36 ; GCN-NEXT: .amdhsa_user_sgpr_dispatch_id 0
37 ; GCN-NEXT: .amdhsa_user_sgpr_private_segment_size 0
38 ; GCN-NEXT: .amdhsa_wavefront_size32
39 ; GCN-NEXT: .amdhsa_enable_private_segment 0
40 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_id_x 1
41 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_id_y 0
42 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_id_z 0
43 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_info 0
44 ; GCN-NEXT: .amdhsa_system_vgpr_workitem_id 0
45 ; WORKAROUND: ; COMPUTE_PGM_RSRC2:USER_SGPR: 15
46 ; NOWORKAROUND: ; COMPUTE_PGM_RSRC2:USER_SGPR: 0
47 define amdgpu_kernel void @minimal_kernel_inputs() {
48   %id = call i32 @llvm.amdgcn.workgroup.id.x()
49   store volatile i32 %id, ptr addrspace(1) undef
50   ret void
53 ; GCN-LABEL: {{^}}minimal_kernel_inputs_with_stack:
54 ; WORKAROUND: v_mov_b32_e32 [[V:v[0-9]+]], s15
55 ; NOWORKAROUND: v_mov_b32_e32 [[V:v[0-9]+]], s0
56 ; GCN: global_store_b32 v{{\[[0-9]+:[0-9]+\]}}, [[V]], off
58 ; GCN: .amdhsa_kernel minimal_kernel_inputs
59 ; WORKAROUND: .amdhsa_user_sgpr_count 15
60 ; NOWORKAROUND: .amdhsa_user_sgpr_count 0
61 ; GCN-NEXT: .amdhsa_user_sgpr_dispatch_ptr 0
62 ; GCN-NEXT: .amdhsa_user_sgpr_queue_ptr 0
63 ; GCN-NEXT: .amdhsa_user_sgpr_kernarg_segment_ptr 0
64 ; GCN-NEXT: .amdhsa_user_sgpr_dispatch_id 0
65 ; GCN-NEXT: .amdhsa_user_sgpr_private_segment_size 0
66 ; GCN-NEXT: .amdhsa_wavefront_size32
67 ; GCN-NEXT: .amdhsa_enable_private_segment 1
68 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_id_x 1
69 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_id_y 0
70 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_id_z 0
71 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_info 0
72 ; GCN-NEXT: .amdhsa_system_vgpr_workitem_id 0
73 ; WORKAROUND: ; COMPUTE_PGM_RSRC2:USER_SGPR: 15
74 ; NOWORKAROUND: ; COMPUTE_PGM_RSRC2:USER_SGPR: 0
75 define amdgpu_kernel void @minimal_kernel_inputs_with_stack() {
76   %alloca = alloca i32, addrspace(5)
77   %id = call i32 @llvm.amdgcn.workgroup.id.x()
78   store volatile i32 %id, ptr addrspace(1) undef
79   store volatile i32 0, ptr addrspace(5) %alloca
80   ret void
83 ; GCN-LABEL: {{^}}queue_ptr:
84 ; GCN: global_load_u8 v{{[0-9]+}}, v{{[0-9]+}}, s[0:1]
86 ; WORKAROUND: v_mov_b32_e32 [[V:v[0-9]+]], s15
87 ; NOWORKAROUND: v_mov_b32_e32 [[V:v[0-9]+]], s2
88 ; GCN-NEXT: global_store_b32 v{{\[[0-9]+:[0-9]+\]}}, [[V]], off
90 ; GCN: .amdhsa_kernel queue_ptr
91 ; WORKAROUND: .amdhsa_user_sgpr_count 15
92 ; NOWORKAROUND: .amdhsa_user_sgpr_count 2
93 ; GCN-NEXT: .amdhsa_user_sgpr_dispatch_ptr 0
94 ; GCN-NEXT: .amdhsa_user_sgpr_queue_ptr 1
95 ; GCN-NEXT: .amdhsa_user_sgpr_kernarg_segment_ptr 0
96 ; GCN-NEXT: .amdhsa_user_sgpr_dispatch_id 0
97 ; GCN-NEXT: .amdhsa_user_sgpr_private_segment_size 0
98 ; GCN-NEXT: .amdhsa_wavefront_size32
99 ; GCN-NEXT: .amdhsa_enable_private_segment 0
100 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_id_x 1
101 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_id_y 0
102 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_id_z 0
103 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_info 0
104 ; GCN-NEXT: .amdhsa_system_vgpr_workitem_id 0
105 ; WORKAROUND: ; COMPUTE_PGM_RSRC2:USER_SGPR: 15
106 ; NOWORKAROUND: ; COMPUTE_PGM_RSRC2:USER_SGPR: 2
107 define amdgpu_kernel void @queue_ptr() {
108   %queue.ptr = call noalias ptr addrspace(4) @llvm.amdgcn.queue.ptr() #0
109   %load = load volatile i8, ptr addrspace(4) %queue.ptr
110   %id = call i32 @llvm.amdgcn.workgroup.id.x()
111   store volatile i32 %id, ptr addrspace(1) undef
112   ret void
115 ; GCN-LABEL: {{^}}all_inputs:
116 ; WORKAROUND: v_mov_b32_e32 [[V_X:v[0-9]+]], s13
117 ; WORKAROUND: v_mov_b32_e32 [[V_Y:v[0-9]+]], s14
118 ; WORKAROUND: v_mov_b32_e32 [[V_Z:v[0-9]+]], s15
120 ; NOWORKAROUND: v_mov_b32_e32 [[V_X:v[0-9]+]], s8
121 ; NOWORKAROUND: v_mov_b32_e32 [[V_Y:v[0-9]+]], s9
122 ; NOWORKAROUND: v_mov_b32_e32 [[V_Z:v[0-9]+]], s10
124 ; GCN: global_load_u8 v{{[0-9]+}}, v{{[0-9]+}}, s[0:1]
125 ; GCN: global_load_u8 v{{[0-9]+}}, v{{[0-9]+}}, s[2:3]
126 ; GCN: global_load_u8 v{{[0-9]+}}, v{{[0-9]+}}, s[4:5]
128 ; GCN-DAG: v_mov_b32_e32 v[[DISPATCH_LO:[0-9]+]], s6
129 ; GCN-DAG: v_mov_b32_e32 v[[DISPATCH_HI:[0-9]+]], s7
131 ; GCN: global_store_b32 v{{\[[0-9]+:[0-9]+\]}}, [[V_X]], off
132 ; GCN: global_store_b32 v{{\[[0-9]+:[0-9]+\]}}, [[V_Y]], off
133 ; GCN: global_store_b32 v{{\[[0-9]+:[0-9]+\]}}, [[V_Z]], off
134 ; GCN: global_store_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[DISPATCH_LO]]:[[DISPATCH_HI]]{{\]}}, off
136 ; GCN: .amdhsa_kernel all_inputs
137 ; WORKAROUND: .amdhsa_user_sgpr_count 13
138 ; NOWORKAROUND: .amdhsa_user_sgpr_count 8
139 ; GCN-NEXT: .amdhsa_user_sgpr_dispatch_ptr 1
140 ; GCN-NEXT: .amdhsa_user_sgpr_queue_ptr 1
141 ; GCN-NEXT: .amdhsa_user_sgpr_kernarg_segment_ptr 1
142 ; GCN-NEXT: .amdhsa_user_sgpr_dispatch_id 1
143 ; GCN-NEXT: .amdhsa_user_sgpr_private_segment_size 0
144 ; GCN-NEXT: .amdhsa_wavefront_size32
145 ; GCN-NEXT: .amdhsa_enable_private_segment 1
146 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_id_x 1
147 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_id_y 1
148 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_id_z 1
149 ; GCN-NEXT: .amdhsa_system_sgpr_workgroup_info 0
150 ; GCN-NEXT: .amdhsa_system_vgpr_workitem_id 0
151 ; WORKAROUND: ; COMPUTE_PGM_RSRC2:USER_SGPR: 13
152 ; NOWORKAROUND: ; COMPUTE_PGM_RSRC2:USER_SGPR: 8
153 define amdgpu_kernel void @all_inputs() {
154   %alloca = alloca i32, addrspace(5)
155   store volatile i32 0, ptr addrspace(5) %alloca
157   %dispatch.ptr = call noalias ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()
158   %load.dispatch = load volatile i8, ptr addrspace(4) %dispatch.ptr
160   %queue.ptr = call noalias ptr addrspace(4) @llvm.amdgcn.queue.ptr()
161   %load.queue = load volatile i8, ptr addrspace(4) %queue.ptr
163   %implicitarg.ptr = call noalias ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()
164   %load.implicitarg = load volatile i8, ptr addrspace(4) %implicitarg.ptr
166   %id.x = call i32 @llvm.amdgcn.workgroup.id.x()
167   store volatile i32 %id.x, ptr addrspace(1) undef
169   %id.y = call i32 @llvm.amdgcn.workgroup.id.y()
170   store volatile i32 %id.y, ptr addrspace(1) undef
172   %id.z = call i32 @llvm.amdgcn.workgroup.id.z()
173   store volatile i32 %id.z, ptr addrspace(1) undef
175   %dispatch.id = call i64 @llvm.amdgcn.dispatch.id()
176   store volatile i64 %dispatch.id, ptr addrspace(1) undef
178   ret void
181 declare i32 @llvm.amdgcn.workgroup.id.x() #0
182 declare i32 @llvm.amdgcn.workgroup.id.y() #0
183 declare i32 @llvm.amdgcn.workgroup.id.z() #0
184 declare align 4 ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr() #0
185 declare align 4 ptr addrspace(4) @llvm.amdgcn.dispatch.ptr() #0
186 declare align 4 ptr addrspace(4) @llvm.amdgcn.queue.ptr() #0
187 declare align 4 ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr() #0
188 declare i64 @llvm.amdgcn.dispatch.id() #0
190 attributes #0 = { nounwind readnone speculatable willreturn }