Skip to content

Commit a020581

Browse files
committed
AMDGPU/GlobalISel: Add baseline test for new ABI attribute hints
1 parent 04ce2de commit a020581

File tree

1 file changed

+280
-0
lines changed

1 file changed

+280
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,280 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
; RUN: llc -global-isel -amdgpu-fixed-function-abi -stop-after=irtranslator -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs -o - %s | FileCheck -enable-var-scope %s
3+
4+
; Test that we don't insert code to pass implicit arguments we know
5+
; the callee does not need.
6+
7+
declare hidden void @extern()
8+
9+
define amdgpu_kernel void @kernel_call_no_workitem_ids() {
10+
; CHECK-LABEL: name: kernel_call_no_workitem_ids
11+
; CHECK: bb.1 (%ir-block.0):
12+
; CHECK: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9
13+
; CHECK: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2
14+
; CHECK: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1
15+
; CHECK: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0
16+
; CHECK: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14
17+
; CHECK: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13
18+
; CHECK: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12
19+
; CHECK: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9
20+
; CHECK: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7
21+
; CHECK: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5
22+
; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $scc
23+
; CHECK: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @extern
24+
; CHECK: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]]
25+
; CHECK: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]]
26+
; CHECK: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0
27+
; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
28+
; CHECK: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64)
29+
; CHECK: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]]
30+
; CHECK: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]]
31+
; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]]
32+
; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]]
33+
; CHECK: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32)
34+
; CHECK: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
35+
; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10
36+
; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32)
37+
; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]]
38+
; CHECK: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
39+
; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20
40+
; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32)
41+
; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]]
42+
; CHECK: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg
43+
; CHECK: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>)
44+
; CHECK: $sgpr4_sgpr5 = COPY [[COPY9]](p4)
45+
; CHECK: $sgpr6_sgpr7 = COPY [[COPY10]](p4)
46+
; CHECK: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4)
47+
; CHECK: $sgpr10_sgpr11 = COPY [[COPY11]](s64)
48+
; CHECK: $sgpr12 = COPY [[COPY12]](s32)
49+
; CHECK: $sgpr13 = COPY [[COPY13]](s32)
50+
; CHECK: $sgpr14 = COPY [[COPY14]](s32)
51+
; CHECK: $vgpr31 = COPY [[OR1]](s32)
52+
; CHECK: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @extern, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31
53+
; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $scc
54+
; CHECK: S_ENDPGM 0
55+
call void @extern() "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z"
56+
ret void
57+
}
58+
59+
define amdgpu_kernel void @kernel_call_no_workgroup_ids() {
60+
; CHECK-LABEL: name: kernel_call_no_workgroup_ids
61+
; CHECK: bb.1 (%ir-block.0):
62+
; CHECK: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9
63+
; CHECK: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2
64+
; CHECK: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1
65+
; CHECK: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0
66+
; CHECK: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14
67+
; CHECK: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13
68+
; CHECK: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12
69+
; CHECK: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9
70+
; CHECK: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7
71+
; CHECK: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5
72+
; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $scc
73+
; CHECK: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @extern
74+
; CHECK: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]]
75+
; CHECK: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]]
76+
; CHECK: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0
77+
; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
78+
; CHECK: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64)
79+
; CHECK: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]]
80+
; CHECK: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]]
81+
; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]]
82+
; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]]
83+
; CHECK: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32)
84+
; CHECK: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
85+
; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10
86+
; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32)
87+
; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]]
88+
; CHECK: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
89+
; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20
90+
; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32)
91+
; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]]
92+
; CHECK: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg
93+
; CHECK: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>)
94+
; CHECK: $sgpr4_sgpr5 = COPY [[COPY9]](p4)
95+
; CHECK: $sgpr6_sgpr7 = COPY [[COPY10]](p4)
96+
; CHECK: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4)
97+
; CHECK: $sgpr10_sgpr11 = COPY [[COPY11]](s64)
98+
; CHECK: $sgpr12 = COPY [[COPY12]](s32)
99+
; CHECK: $sgpr13 = COPY [[COPY13]](s32)
100+
; CHECK: $sgpr14 = COPY [[COPY14]](s32)
101+
; CHECK: $vgpr31 = COPY [[OR1]](s32)
102+
; CHECK: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @extern, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31
103+
; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $scc
104+
; CHECK: S_ENDPGM 0
105+
call void @extern() "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z"
106+
ret void
107+
}
108+
109+
define amdgpu_kernel void @kernel_call_no_other_sgprs() {
110+
; CHECK-LABEL: name: kernel_call_no_other_sgprs
111+
; CHECK: bb.1 (%ir-block.0):
112+
; CHECK: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr0, $vgpr1, $vgpr2, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9
113+
; CHECK: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr2
114+
; CHECK: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr1
115+
; CHECK: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr0
116+
; CHECK: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr14
117+
; CHECK: [[COPY4:%[0-9]+]]:sgpr_32 = COPY $sgpr13
118+
; CHECK: [[COPY5:%[0-9]+]]:sgpr_32 = COPY $sgpr12
119+
; CHECK: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9
120+
; CHECK: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7
121+
; CHECK: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5
122+
; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $scc
123+
; CHECK: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @extern
124+
; CHECK: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY8]]
125+
; CHECK: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY7]]
126+
; CHECK: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0
127+
; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
128+
; CHECK: [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[C]], [[C1]](s64)
129+
; CHECK: [[COPY11:%[0-9]+]]:_(s64) = COPY [[COPY6]]
130+
; CHECK: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY5]]
131+
; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY4]]
132+
; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY3]]
133+
; CHECK: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32)
134+
; CHECK: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
135+
; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 10
136+
; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY16]], [[C2]](s32)
137+
; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY15]], [[SHL]]
138+
; CHECK: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
139+
; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 20
140+
; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY17]], [[C3]](s32)
141+
; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[OR]], [[SHL1]]
142+
; CHECK: [[COPY18:%[0-9]+]]:_(<4 x s32>) = COPY $private_rsrc_reg
143+
; CHECK: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY18]](<4 x s32>)
144+
; CHECK: $sgpr4_sgpr5 = COPY [[COPY9]](p4)
145+
; CHECK: $sgpr6_sgpr7 = COPY [[COPY10]](p4)
146+
; CHECK: $sgpr8_sgpr9 = COPY [[PTR_ADD]](p4)
147+
; CHECK: $sgpr10_sgpr11 = COPY [[COPY11]](s64)
148+
; CHECK: $sgpr12 = COPY [[COPY12]](s32)
149+
; CHECK: $sgpr13 = COPY [[COPY13]](s32)
150+
; CHECK: $sgpr14 = COPY [[COPY14]](s32)
151+
; CHECK: $vgpr31 = COPY [[OR1]](s32)
152+
; CHECK: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @extern, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31
153+
; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $scc
154+
; CHECK: S_ENDPGM 0
155+
call void @extern() "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z"
156+
ret void
157+
}
158+
159+
define void @func_call_no_workitem_ids() {
160+
; CHECK-LABEL: name: func_call_no_workitem_ids
161+
; CHECK: bb.1 (%ir-block.0):
162+
; CHECK: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr31, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9, $sgpr10_sgpr11, $sgpr30_sgpr31
163+
; CHECK: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr31
164+
; CHECK: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr14
165+
; CHECK: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr13
166+
; CHECK: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr12
167+
; CHECK: [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr10_sgpr11
168+
; CHECK: [[COPY5:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9
169+
; CHECK: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7
170+
; CHECK: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5
171+
; CHECK: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
172+
; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $scc
173+
; CHECK: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @extern
174+
; CHECK: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY7]]
175+
; CHECK: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY6]]
176+
; CHECK: [[COPY11:%[0-9]+]]:_(p4) = COPY [[COPY5]]
177+
; CHECK: [[COPY12:%[0-9]+]]:_(s64) = COPY [[COPY4]]
178+
; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY3]]
179+
; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY2]]
180+
; CHECK: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY1]]
181+
; CHECK: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
182+
; CHECK: [[COPY17:%[0-9]+]]:_(<4 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
183+
; CHECK: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY17]](<4 x s32>)
184+
; CHECK: $sgpr4_sgpr5 = COPY [[COPY9]](p4)
185+
; CHECK: $sgpr6_sgpr7 = COPY [[COPY10]](p4)
186+
; CHECK: $sgpr8_sgpr9 = COPY [[COPY11]](p4)
187+
; CHECK: $sgpr10_sgpr11 = COPY [[COPY12]](s64)
188+
; CHECK: $sgpr12 = COPY [[COPY13]](s32)
189+
; CHECK: $sgpr13 = COPY [[COPY14]](s32)
190+
; CHECK: $sgpr14 = COPY [[COPY15]](s32)
191+
; CHECK: $vgpr31 = COPY [[COPY16]](s32)
192+
; CHECK: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @extern, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31
193+
; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $scc
194+
; CHECK: [[COPY18:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY8]]
195+
; CHECK: S_SETPC_B64_return [[COPY18]]
196+
call void @extern() "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z"
197+
ret void
198+
}
199+
200+
define void @func_call_no_workgroup_ids() {
201+
; CHECK-LABEL: name: func_call_no_workgroup_ids
202+
; CHECK: bb.1 (%ir-block.0):
203+
; CHECK: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr31, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9, $sgpr10_sgpr11, $sgpr30_sgpr31
204+
; CHECK: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr31
205+
; CHECK: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr14
206+
; CHECK: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr13
207+
; CHECK: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr12
208+
; CHECK: [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr10_sgpr11
209+
; CHECK: [[COPY5:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9
210+
; CHECK: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7
211+
; CHECK: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5
212+
; CHECK: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
213+
; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $scc
214+
; CHECK: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @extern
215+
; CHECK: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY7]]
216+
; CHECK: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY6]]
217+
; CHECK: [[COPY11:%[0-9]+]]:_(p4) = COPY [[COPY5]]
218+
; CHECK: [[COPY12:%[0-9]+]]:_(s64) = COPY [[COPY4]]
219+
; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY3]]
220+
; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY2]]
221+
; CHECK: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY1]]
222+
; CHECK: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
223+
; CHECK: [[COPY17:%[0-9]+]]:_(<4 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
224+
; CHECK: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY17]](<4 x s32>)
225+
; CHECK: $sgpr4_sgpr5 = COPY [[COPY9]](p4)
226+
; CHECK: $sgpr6_sgpr7 = COPY [[COPY10]](p4)
227+
; CHECK: $sgpr8_sgpr9 = COPY [[COPY11]](p4)
228+
; CHECK: $sgpr10_sgpr11 = COPY [[COPY12]](s64)
229+
; CHECK: $sgpr12 = COPY [[COPY13]](s32)
230+
; CHECK: $sgpr13 = COPY [[COPY14]](s32)
231+
; CHECK: $sgpr14 = COPY [[COPY15]](s32)
232+
; CHECK: $vgpr31 = COPY [[COPY16]](s32)
233+
; CHECK: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @extern, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31
234+
; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $scc
235+
; CHECK: [[COPY18:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY8]]
236+
; CHECK: S_SETPC_B64_return [[COPY18]]
237+
call void @extern() "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z"
238+
ret void
239+
}
240+
241+
define void @func_call_no_other_sgprs() {
242+
; CHECK-LABEL: name: func_call_no_other_sgprs
243+
; CHECK: bb.1 (%ir-block.0):
244+
; CHECK: liveins: $sgpr12, $sgpr13, $sgpr14, $vgpr31, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9, $sgpr10_sgpr11, $sgpr30_sgpr31
245+
; CHECK: [[COPY:%[0-9]+]]:vgpr_32(s32) = COPY $vgpr31
246+
; CHECK: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr14
247+
; CHECK: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr13
248+
; CHECK: [[COPY3:%[0-9]+]]:sgpr_32 = COPY $sgpr12
249+
; CHECK: [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr10_sgpr11
250+
; CHECK: [[COPY5:%[0-9]+]]:sgpr_64 = COPY $sgpr8_sgpr9
251+
; CHECK: [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr6_sgpr7
252+
; CHECK: [[COPY7:%[0-9]+]]:sgpr_64 = COPY $sgpr4_sgpr5
253+
; CHECK: [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
254+
; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $scc
255+
; CHECK: [[GV:%[0-9]+]]:sreg_64(p0) = G_GLOBAL_VALUE @extern
256+
; CHECK: [[COPY9:%[0-9]+]]:_(p4) = COPY [[COPY7]]
257+
; CHECK: [[COPY10:%[0-9]+]]:_(p4) = COPY [[COPY6]]
258+
; CHECK: [[COPY11:%[0-9]+]]:_(p4) = COPY [[COPY5]]
259+
; CHECK: [[COPY12:%[0-9]+]]:_(s64) = COPY [[COPY4]]
260+
; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY3]]
261+
; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[COPY2]]
262+
; CHECK: [[COPY15:%[0-9]+]]:_(s32) = COPY [[COPY1]]
263+
; CHECK: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
264+
; CHECK: [[COPY17:%[0-9]+]]:_(<4 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
265+
; CHECK: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[COPY17]](<4 x s32>)
266+
; CHECK: $sgpr4_sgpr5 = COPY [[COPY9]](p4)
267+
; CHECK: $sgpr6_sgpr7 = COPY [[COPY10]](p4)
268+
; CHECK: $sgpr8_sgpr9 = COPY [[COPY11]](p4)
269+
; CHECK: $sgpr10_sgpr11 = COPY [[COPY12]](s64)
270+
; CHECK: $sgpr12 = COPY [[COPY13]](s32)
271+
; CHECK: $sgpr13 = COPY [[COPY14]](s32)
272+
; CHECK: $sgpr14 = COPY [[COPY15]](s32)
273+
; CHECK: $vgpr31 = COPY [[COPY16]](s32)
274+
; CHECK: $sgpr30_sgpr31 = SI_CALL [[GV]](p0), @extern, csr_amdgpu_highregs, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr4_sgpr5, implicit $sgpr6_sgpr7, implicit $sgpr8_sgpr9, implicit $sgpr10_sgpr11, implicit $sgpr12, implicit $sgpr13, implicit $sgpr14, implicit $vgpr31
275+
; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $scc
276+
; CHECK: [[COPY18:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY8]]
277+
; CHECK: S_SETPC_B64_return [[COPY18]]
278+
call void @extern() "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z"
279+
ret void
280+
}

0 commit comments

Comments
 (0)