blob: df49ff295371dad1136f1daa1bb73a345f27de99 [file] [log] [blame]
Alexander Timofeeva321d952022-08-01 20:15:48 +02001# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +00002# RUN: llc -march=amdgcn -run-pass si-fix-sgpr-copies,si-fold-operands,dead-mi-elimination -verify-machineinstrs -o - %s | FileCheck -check-prefix=GCN %s
3
4# Check that constant is in SGPR registers
5
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +00006--- |
Nikita Popov60442f02023-01-05 13:13:06 +01007 define amdgpu_kernel void @const_to_sgpr(ptr addrspace(1) nocapture %arg, i64 %id) {
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +00008 bb:
9 br i1 undef, label %bb1, label %bb2
10
11 bb1: ; preds = %bb
12 br label %bb2
13
14 bb2: ; preds = %bb1, %bb
15 ret void
16 }
17
Nikita Popov60442f02023-01-05 13:13:06 +010018 define amdgpu_kernel void @const_to_sgpr_multiple_use(ptr addrspace(1) nocapture %arg, i64 %id1, i64 %id2) {
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +000019 bb:
20 br i1 undef, label %bb1, label %bb2
21
22 bb1: ; preds = %bb
23 br label %bb2
24
25 bb2: ; preds = %bb1, %bb
26 ret void
27 }
28
Nikita Popov60442f02023-01-05 13:13:06 +010029 define amdgpu_kernel void @const_to_sgpr_subreg(ptr addrspace(1) nocapture %arg, i64 %id) {
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +000030 bb:
31 br i1 undef, label %bb1, label %bb2
32
33 bb1: ; preds = %bb
34 br label %bb2
35
36 bb2: ; preds = %bb1, %bb
37 ret void
38 }
39
40...
41---
42name: const_to_sgpr
Guillaume Chatelet48904e92019-09-11 11:16:48 +000043alignment: 1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +000044exposesReturnsTwice: false
45legalized: false
46regBankSelected: false
47selected: false
48tracksRegLiveness: true
49registers:
50 - { id: 0, class: sreg_64 }
51 - { id: 1, class: sreg_64 }
52 - { id: 2, class: vgpr_32 }
53 - { id: 3, class: sgpr_64 }
54 - { id: 4, class: sreg_32_xm0 }
55 - { id: 5, class: sgpr_32 }
56 - { id: 6, class: sreg_64 }
57 - { id: 7, class: sreg_64_xexec }
58 - { id: 8, class: sreg_64_xexec }
59 - { id: 9, class: sreg_32 }
60 - { id: 10, class: sreg_64 }
61 - { id: 11, class: sreg_32_xm0 }
62 - { id: 12, class: sreg_32_xm0 }
63 - { id: 13, class: sreg_32_xm0 }
64 - { id: 14, class: sreg_32_xm0 }
65 - { id: 15, class: sreg_32_xm0 }
66 - { id: 16, class: sreg_32_xm0 }
67 - { id: 17, class: sreg_64 }
68 - { id: 18, class: sreg_32_xm0 }
69 - { id: 19, class: sreg_32_xm0 }
70 - { id: 20, class: sreg_64 }
71 - { id: 21, class: sreg_64 }
72 - { id: 22, class: vreg_64 }
73 - { id: 23, class: sreg_32_xm0 }
74 - { id: 24, class: sreg_64 }
75 - { id: 25, class: sreg_32_xm0 }
76 - { id: 26, class: sreg_32_xm0 }
77 - { id: 27, class: sgpr_64 }
78 - { id: 28, class: sgpr_128 }
79 - { id: 29, class: vgpr_32 }
80 - { id: 30, class: vreg_64 }
81liveins:
Puyan Lotfi43e94b12018-01-31 22:04:26 +000082 - { reg: '$vgpr0', virtual-reg: '%2' }
83 - { reg: '$sgpr0_sgpr1', virtual-reg: '%3' }
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +000084body: |
Alexander Timofeeva321d952022-08-01 20:15:48 +020085 ; GCN-LABEL: name: const_to_sgpr
86 ; GCN: bb.0.bb:
87 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
88 ; GCN-NEXT: liveins: $vgpr0, $sgpr0_sgpr1
89 ; GCN-NEXT: {{ $}}
90 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr0_sgpr1
91 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
92 ; GCN-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 9, 0
93 ; GCN-NEXT: [[S_LOAD_DWORDX2_IMM1:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 11, 0
94 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY [[S_LOAD_DWORDX2_IMM]]
95 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
96 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, killed [[V_MOV_B32_e32_]], %subreg.sub1
97 ; GCN-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_LOAD_DWORDX2_IMM1]].sub0, [[REG_SEQUENCE]].sub0, implicit-def $vcc, implicit $exec
98 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[S_LOAD_DWORDX2_IMM1]].sub1
99 ; GCN-NEXT: [[V_ADDC_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADDC_U32_e32 0, [[COPY3]], implicit-def $vcc, implicit $vcc, implicit $exec
skc7b4340512023-03-28 23:35:02 +0530100 ; GCN-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE killed [[V_ADD_CO_U32_e32_]], %subreg.sub0, killed [[V_ADDC_U32_e32_]], %subreg.sub1
Alexander Timofeeva321d952022-08-01 20:15:48 +0200101 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 0
102 ; GCN-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 1048576
103 ; GCN-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sreg_64 = REG_SEQUENCE killed [[S_MOV_B32_1]], %subreg.sub0, killed [[S_MOV_B32_]], %subreg.sub1
104 ; GCN-NEXT: [[V_CMP_LT_U64_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_U64_e64 killed [[REG_SEQUENCE1]], [[REG_SEQUENCE2]], implicit $exec
105 ; GCN-NEXT: [[SI_IF:%[0-9]+]]:sreg_64 = SI_IF killed [[V_CMP_LT_U64_e64_]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
106 ; GCN-NEXT: S_BRANCH %bb.1
107 ; GCN-NEXT: {{ $}}
108 ; GCN-NEXT: bb.1.bb1:
109 ; GCN-NEXT: successors: %bb.2(0x80000000)
110 ; GCN-NEXT: {{ $}}
111 ; GCN-NEXT: [[V_LSHL_B64_e64_:%[0-9]+]]:vreg_64 = V_LSHL_B64_e64 [[REG_SEQUENCE]], 2, implicit $exec
112 ; GCN-NEXT: [[S_MOV_B32_2:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 61440
113 ; GCN-NEXT: [[S_MOV_B32_3:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 0
114 ; GCN-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_64 = REG_SEQUENCE killed [[S_MOV_B32_3]], %subreg.sub0, killed [[S_MOV_B32_2]], %subreg.sub1
115 ; GCN-NEXT: [[REG_SEQUENCE4:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY2]], %subreg.sub1_sub2_sub3_sub4_sub5, killed [[REG_SEQUENCE3]], %subreg.sub1_sub2_sub3_sub4_sub5_sub6
116 ; GCN-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
Ivan Kosarev1b560e62022-11-14 12:37:26 +0000117 ; GCN-NEXT: BUFFER_STORE_DWORD_ADDR64 killed [[V_MOV_B32_e32_1]], [[V_LSHL_B64_e64_]], killed [[REG_SEQUENCE4]], 0, 0, 0, 0, implicit $exec
Alexander Timofeeva321d952022-08-01 20:15:48 +0200118 ; GCN-NEXT: {{ $}}
119 ; GCN-NEXT: bb.2.bb2:
120 ; GCN-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec
121 ; GCN-NEXT: S_ENDPGM 0
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000122 bb.0.bb:
123 successors: %bb.1.bb1(0x40000000), %bb.2.bb2(0x40000000)
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000124 liveins: $vgpr0, $sgpr0_sgpr1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000125
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000126 %3 = COPY $sgpr0_sgpr1
127 %2 = COPY $vgpr0
Stanislav Mekhanoshin3bffb1c2021-02-08 16:36:10 -0800128 %7 = S_LOAD_DWORDX2_IMM %3, 9, 0
129 %8 = S_LOAD_DWORDX2_IMM %3, 11, 0
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000130 %6 = COPY %7
131 %9 = S_MOV_B32 0
Bjorn Petterssona42ed3e2017-11-06 21:46:06 +0000132 %10 = REG_SEQUENCE %2, %subreg.sub0, killed %9, %subreg.sub1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000133 %0 = COPY %10
134 %11 = COPY %10.sub0
135 %12 = COPY %10.sub1
136 %13 = COPY %8.sub0
137 %14 = COPY %8.sub1
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000138 %15 = S_ADD_U32 killed %11, killed %13, implicit-def $scc
139 %16 = S_ADDC_U32 killed %12, killed %14, implicit-def dead $scc, implicit $scc
Bjorn Petterssona42ed3e2017-11-06 21:46:06 +0000140 %17 = REG_SEQUENCE killed %15, %subreg.sub0, killed %16, %subreg.sub1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000141 %18 = S_MOV_B32 0
142 %19 = S_MOV_B32 1048576
Bjorn Petterssona42ed3e2017-11-06 21:46:06 +0000143 %20 = REG_SEQUENCE killed %19, %subreg.sub0, killed %18, %subreg.sub1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000144 %22 = COPY killed %20
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000145 %21 = V_CMP_LT_U64_e64 killed %17, %22, implicit $exec
146 %1 = SI_IF killed %21, %bb.2.bb2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000147 S_BRANCH %bb.1.bb1
148
149 bb.1.bb1:
150 successors: %bb.2.bb2(0x80000000)
151
152 %23 = S_MOV_B32 2
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000153 %24 = S_LSHL_B64 %0, killed %23, implicit-def dead $scc
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000154 %25 = S_MOV_B32 61440
155 %26 = S_MOV_B32 0
Bjorn Petterssona42ed3e2017-11-06 21:46:06 +0000156 %27 = REG_SEQUENCE killed %26, %subreg.sub0, killed %25, %subreg.sub1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000157 %28 = REG_SEQUENCE %6, 17, killed %27, 18
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000158 %29 = V_MOV_B32_e32 0, implicit $exec
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000159 %30 = COPY %24
Ivan Kosarev1b560e62022-11-14 12:37:26 +0000160 BUFFER_STORE_DWORD_ADDR64 killed %29, killed %30, killed %28, 0, 0, 0, 0, implicit $exec
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000161
162 bb.2.bb2:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000163 SI_END_CF %1, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
David Stuttard20ea21c2019-03-12 09:52:58 +0000164 S_ENDPGM 0
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000165
166...
167---
168name: const_to_sgpr_multiple_use
Guillaume Chatelet48904e92019-09-11 11:16:48 +0000169alignment: 1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000170exposesReturnsTwice: false
171legalized: false
172regBankSelected: false
173selected: false
174tracksRegLiveness: true
175registers:
176 - { id: 0, class: sreg_64 }
177 - { id: 1, class: sreg_64 }
178 - { id: 2, class: vgpr_32 }
179 - { id: 3, class: sgpr_64 }
180 - { id: 4, class: sreg_32_xm0 }
181 - { id: 5, class: sgpr_32 }
182 - { id: 6, class: sreg_64 }
183 - { id: 7, class: sreg_64_xexec }
184 - { id: 8, class: sreg_64_xexec }
185 - { id: 9, class: sreg_64_xexec }
186 - { id: 10, class: sreg_32 }
187 - { id: 11, class: sreg_64 }
188 - { id: 12, class: sreg_32_xm0 }
189 - { id: 13, class: sreg_32_xm0 }
190 - { id: 14, class: sreg_32_xm0 }
191 - { id: 15, class: sreg_32_xm0 }
192 - { id: 16, class: sreg_32_xm0 }
193 - { id: 17, class: sreg_32_xm0 }
194 - { id: 18, class: sreg_64 }
195 - { id: 19, class: sreg_32_xm0 }
196 - { id: 20, class: sreg_32_xm0 }
197 - { id: 21, class: sreg_32_xm0 }
198 - { id: 22, class: sreg_32_xm0 }
199 - { id: 23, class: sreg_64 }
200 - { id: 24, class: sreg_32_xm0 }
201 - { id: 25, class: sreg_32_xm0 }
202 - { id: 26, class: sreg_64 }
203 - { id: 27, class: sreg_64 }
204 - { id: 28, class: vreg_64 }
205 - { id: 29, class: sreg_64 }
206 - { id: 30, class: vreg_64 }
207 - { id: 31, class: sreg_64 }
208 - { id: 32, class: sreg_32_xm0 }
209 - { id: 33, class: sreg_64 }
210 - { id: 34, class: sreg_32_xm0 }
211 - { id: 35, class: sreg_32_xm0 }
212 - { id: 36, class: sgpr_64 }
213 - { id: 37, class: sgpr_128 }
214 - { id: 38, class: vgpr_32 }
215 - { id: 39, class: vreg_64 }
216liveins:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000217 - { reg: '$vgpr0', virtual-reg: '%2' }
218 - { reg: '$sgpr0_sgpr1', virtual-reg: '%3' }
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000219body: |
Alexander Timofeeva321d952022-08-01 20:15:48 +0200220 ; GCN-LABEL: name: const_to_sgpr_multiple_use
221 ; GCN: bb.0.bb:
222 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
223 ; GCN-NEXT: liveins: $vgpr0, $sgpr0_sgpr1
224 ; GCN-NEXT: {{ $}}
225 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr0_sgpr1
226 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
227 ; GCN-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 9, 0
228 ; GCN-NEXT: [[S_LOAD_DWORDX2_IMM1:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 11, 0
229 ; GCN-NEXT: [[S_LOAD_DWORDX2_IMM2:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 13, 0
230 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY [[S_LOAD_DWORDX2_IMM]]
231 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
232 ; GCN-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sgpr_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec
233 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, killed [[S_MOV_B32_]], %subreg.sub1
234 ; GCN-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32_xm0 = S_ADD_U32 [[REG_SEQUENCE]].sub0, [[S_LOAD_DWORDX2_IMM1]].sub0, implicit-def $scc
235 ; GCN-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32_xm0 = S_ADDC_U32 0, [[S_LOAD_DWORDX2_IMM1]].sub1, implicit-def dead $scc, implicit $scc
236 ; GCN-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sreg_64 = REG_SEQUENCE killed [[S_ADD_U32_]], %subreg.sub0, killed [[S_ADDC_U32_]], %subreg.sub1
237 ; GCN-NEXT: [[S_ADD_U32_1:%[0-9]+]]:sreg_32_xm0 = S_ADD_U32 [[REG_SEQUENCE]].sub0, [[S_LOAD_DWORDX2_IMM2]].sub0, implicit-def $scc
238 ; GCN-NEXT: [[S_ADDC_U32_1:%[0-9]+]]:sreg_32_xm0 = S_ADDC_U32 0, [[S_LOAD_DWORDX2_IMM2]].sub1, implicit-def dead $scc, implicit $scc
239 ; GCN-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sreg_64 = REG_SEQUENCE killed [[S_ADD_U32_1]], %subreg.sub0, killed [[S_ADDC_U32_1]], %subreg.sub1
240 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1048576, implicit $exec
241 ; GCN-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
242 ; GCN-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64 = REG_SEQUENCE killed [[V_MOV_B32_e32_]], %subreg.sub0, killed [[V_MOV_B32_e32_1]], %subreg.sub1
243 ; GCN-NEXT: [[V_CMP_LT_U64_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_U64_e64 killed [[REG_SEQUENCE1]], [[REG_SEQUENCE3]], implicit $exec
244 ; GCN-NEXT: [[V_CMP_LT_U64_e64_1:%[0-9]+]]:sreg_64 = V_CMP_LT_U64_e64 killed [[REG_SEQUENCE2]], [[REG_SEQUENCE3]], implicit $exec
245 ; GCN-NEXT: [[S_AND_B64_:%[0-9]+]]:sreg_64 = S_AND_B64 killed [[V_CMP_LT_U64_e64_]], killed [[V_CMP_LT_U64_e64_1]], implicit-def dead $scc
246 ; GCN-NEXT: [[SI_IF:%[0-9]+]]:sreg_64 = SI_IF killed [[S_AND_B64_]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
247 ; GCN-NEXT: S_BRANCH %bb.1
248 ; GCN-NEXT: {{ $}}
249 ; GCN-NEXT: bb.1.bb1:
250 ; GCN-NEXT: successors: %bb.2(0x80000000)
251 ; GCN-NEXT: {{ $}}
252 ; GCN-NEXT: [[S_LSHL_B64_:%[0-9]+]]:sreg_64 = S_LSHL_B64 [[REG_SEQUENCE]], 2, implicit-def dead $scc
253 ; GCN-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 61440
254 ; GCN-NEXT: [[S_MOV_B32_2:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 0
255 ; GCN-NEXT: [[REG_SEQUENCE4:%[0-9]+]]:sgpr_64 = REG_SEQUENCE killed [[S_MOV_B32_2]], %subreg.sub0, killed [[S_MOV_B32_1]], %subreg.sub1
256 ; GCN-NEXT: [[REG_SEQUENCE5:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY2]], %subreg.sub1_sub2_sub3_sub4_sub5, killed [[REG_SEQUENCE4]], %subreg.sub1_sub2_sub3_sub4_sub5_sub6
257 ; GCN-NEXT: [[V_MOV_B32_e32_2:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
258 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vreg_64 = COPY [[S_LSHL_B64_]]
Ivan Kosarev1b560e62022-11-14 12:37:26 +0000259 ; GCN-NEXT: BUFFER_STORE_DWORD_ADDR64 killed [[V_MOV_B32_e32_2]], killed [[COPY3]], killed [[REG_SEQUENCE5]], 0, 0, 0, 0, implicit $exec
Alexander Timofeeva321d952022-08-01 20:15:48 +0200260 ; GCN-NEXT: {{ $}}
261 ; GCN-NEXT: bb.2.bb2:
262 ; GCN-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec
263 ; GCN-NEXT: S_ENDPGM 0
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000264 bb.0.bb:
265 successors: %bb.1.bb1(0x40000000), %bb.2.bb2(0x40000000)
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000266 liveins: $vgpr0, $sgpr0_sgpr1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000267
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000268 %3 = COPY $sgpr0_sgpr1
269 %2 = COPY $vgpr0
Stanislav Mekhanoshin3bffb1c2021-02-08 16:36:10 -0800270 %7 = S_LOAD_DWORDX2_IMM %3, 9, 0
271 %8 = S_LOAD_DWORDX2_IMM %3, 11, 0
272 %9 = S_LOAD_DWORDX2_IMM %3, 13, 0
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000273 %6 = COPY %7
274 %10 = S_MOV_B32 0
Bjorn Petterssona42ed3e2017-11-06 21:46:06 +0000275 %11 = REG_SEQUENCE %2, %subreg.sub0, killed %10, %subreg.sub1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000276 %0 = COPY %11
277 %12 = COPY %11.sub0
278 %13 = COPY %11.sub1
279 %14 = COPY %8.sub0
280 %15 = COPY %8.sub1
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000281 %16 = S_ADD_U32 %12, killed %14, implicit-def $scc
282 %17 = S_ADDC_U32 %13, killed %15, implicit-def dead $scc, implicit $scc
Bjorn Petterssona42ed3e2017-11-06 21:46:06 +0000283 %18 = REG_SEQUENCE killed %16, %subreg.sub0, killed %17, %subreg.sub1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000284 %19 = COPY %9.sub0
285 %20 = COPY %9.sub1
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000286 %21 = S_ADD_U32 %12, killed %19, implicit-def $scc
287 %22 = S_ADDC_U32 %13, killed %20, implicit-def dead $scc, implicit $scc
Bjorn Petterssona42ed3e2017-11-06 21:46:06 +0000288 %23 = REG_SEQUENCE killed %21, %subreg.sub0, killed %22, %subreg.sub1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000289 %24 = S_MOV_B32 0
290 %25 = S_MOV_B32 1048576
Bjorn Petterssona42ed3e2017-11-06 21:46:06 +0000291 %26 = REG_SEQUENCE killed %25, %subreg.sub0, killed %24, %subreg.sub1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000292 %28 = COPY %26
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000293 %27 = V_CMP_LT_U64_e64 killed %18, %28, implicit $exec
294 %29 = V_CMP_LT_U64_e64 killed %23, %28, implicit $exec
295 %31 = S_AND_B64 killed %27, killed %29, implicit-def dead $scc
296 %1 = SI_IF killed %31, %bb.2.bb2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000297 S_BRANCH %bb.1.bb1
298
299 bb.1.bb1:
300 successors: %bb.2.bb2(0x80000000)
301
302 %32 = S_MOV_B32 2
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000303 %33 = S_LSHL_B64 %0, killed %32, implicit-def dead $scc
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000304 %34 = S_MOV_B32 61440
305 %35 = S_MOV_B32 0
Bjorn Petterssona42ed3e2017-11-06 21:46:06 +0000306 %36 = REG_SEQUENCE killed %35, %subreg.sub0, killed %34, %subreg.sub1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000307 %37 = REG_SEQUENCE %6, 17, killed %36, 18
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000308 %38 = V_MOV_B32_e32 0, implicit $exec
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000309 %39 = COPY %33
Ivan Kosarev1b560e62022-11-14 12:37:26 +0000310 BUFFER_STORE_DWORD_ADDR64 killed %38, killed %39, killed %37, 0, 0, 0, 0, implicit $exec
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000311
312 bb.2.bb2:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000313 SI_END_CF %1, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
David Stuttard20ea21c2019-03-12 09:52:58 +0000314 S_ENDPGM 0
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000315
316...
317---
318name: const_to_sgpr_subreg
Guillaume Chatelet48904e92019-09-11 11:16:48 +0000319alignment: 1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000320exposesReturnsTwice: false
321legalized: false
322regBankSelected: false
323selected: false
324tracksRegLiveness: true
325registers:
326 - { id: 0, class: sreg_64 }
327 - { id: 1, class: sreg_64 }
328 - { id: 2, class: vgpr_32 }
329 - { id: 3, class: sgpr_64 }
330 - { id: 4, class: sreg_32_xm0 }
331 - { id: 5, class: sgpr_32 }
332 - { id: 6, class: sreg_64 }
333 - { id: 7, class: sreg_64_xexec }
334 - { id: 8, class: sreg_64_xexec }
335 - { id: 9, class: sreg_32 }
336 - { id: 10, class: sreg_64 }
337 - { id: 11, class: sreg_32_xm0 }
338 - { id: 12, class: sreg_32_xm0 }
339 - { id: 13, class: sreg_32_xm0 }
340 - { id: 14, class: sreg_32_xm0 }
341 - { id: 15, class: sreg_32_xm0 }
342 - { id: 16, class: sreg_32_xm0 }
343 - { id: 17, class: sreg_64 }
344 - { id: 18, class: sreg_32_xm0 }
345 - { id: 19, class: sreg_32_xm0 }
346 - { id: 20, class: sreg_64 }
347 - { id: 21, class: sreg_64 }
348 - { id: 22, class: vgpr_32 }
349 - { id: 23, class: sreg_32_xm0 }
350 - { id: 24, class: sreg_64 }
351 - { id: 25, class: sreg_32_xm0 }
352 - { id: 26, class: sreg_32_xm0 }
353 - { id: 27, class: sgpr_64 }
354 - { id: 28, class: sgpr_128 }
355 - { id: 29, class: vgpr_32 }
356 - { id: 30, class: vreg_64 }
357liveins:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000358 - { reg: '$vgpr0', virtual-reg: '%2' }
359 - { reg: '$sgpr0_sgpr1', virtual-reg: '%3' }
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000360body: |
Alexander Timofeeva321d952022-08-01 20:15:48 +0200361 ; GCN-LABEL: name: const_to_sgpr_subreg
362 ; GCN: bb.0.bb:
363 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
364 ; GCN-NEXT: liveins: $vgpr0, $sgpr0_sgpr1
365 ; GCN-NEXT: {{ $}}
366 ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr0_sgpr1
367 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
368 ; GCN-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 9, 0
369 ; GCN-NEXT: [[S_LOAD_DWORDX2_IMM1:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 11, 0
370 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY [[S_LOAD_DWORDX2_IMM]]
371 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
372 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, killed [[V_MOV_B32_e32_]], %subreg.sub1
373 ; GCN-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_LOAD_DWORDX2_IMM1]].sub0, [[REG_SEQUENCE]].sub0, implicit-def $vcc, implicit $exec
374 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[S_LOAD_DWORDX2_IMM1]].sub1
375 ; GCN-NEXT: [[V_ADDC_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADDC_U32_e32 0, [[COPY3]], implicit-def $vcc, implicit $vcc, implicit $exec
skc7b4340512023-03-28 23:35:02 +0530376 ; GCN-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE killed [[V_ADD_CO_U32_e32_]], %subreg.sub0, killed [[V_ADDC_U32_e32_]], %subreg.sub1
Alexander Timofeeva321d952022-08-01 20:15:48 +0200377 ; GCN-NEXT: [[V_CMP_LT_U32_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_U32_e64 killed [[REG_SEQUENCE1]].sub0, 12, implicit $exec
378 ; GCN-NEXT: [[SI_IF:%[0-9]+]]:sreg_64 = SI_IF killed [[V_CMP_LT_U32_e64_]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
379 ; GCN-NEXT: S_BRANCH %bb.1
380 ; GCN-NEXT: {{ $}}
381 ; GCN-NEXT: bb.1.bb1:
382 ; GCN-NEXT: successors: %bb.2(0x80000000)
383 ; GCN-NEXT: {{ $}}
384 ; GCN-NEXT: [[V_LSHL_B64_e64_:%[0-9]+]]:vreg_64 = V_LSHL_B64_e64 [[REG_SEQUENCE]], 2, implicit $exec
385 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 61440
386 ; GCN-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 0
387 ; GCN-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:sgpr_64 = REG_SEQUENCE killed [[S_MOV_B32_1]], %subreg.sub0, killed [[S_MOV_B32_]], %subreg.sub1
388 ; GCN-NEXT: [[REG_SEQUENCE3:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY2]], %subreg.sub1_sub2_sub3_sub4_sub5, killed [[REG_SEQUENCE2]], %subreg.sub1_sub2_sub3_sub4_sub5_sub6
389 ; GCN-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
Ivan Kosarev1b560e62022-11-14 12:37:26 +0000390 ; GCN-NEXT: BUFFER_STORE_DWORD_ADDR64 killed [[V_MOV_B32_e32_1]], [[V_LSHL_B64_e64_]], killed [[REG_SEQUENCE3]], 0, 0, 0, 0, implicit $exec
Alexander Timofeeva321d952022-08-01 20:15:48 +0200391 ; GCN-NEXT: {{ $}}
392 ; GCN-NEXT: bb.2.bb2:
393 ; GCN-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec
394 ; GCN-NEXT: S_ENDPGM 0
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000395 bb.0.bb:
396 successors: %bb.1.bb1(0x40000000), %bb.2.bb2(0x40000000)
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000397 liveins: $vgpr0, $sgpr0_sgpr1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000398
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000399 %3 = COPY $sgpr0_sgpr1
400 %2 = COPY $vgpr0
Stanislav Mekhanoshin3bffb1c2021-02-08 16:36:10 -0800401 %7 = S_LOAD_DWORDX2_IMM %3, 9, 0
402 %8 = S_LOAD_DWORDX2_IMM %3, 11, 0
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000403 %6 = COPY %7
404 %9 = S_MOV_B32 0
Bjorn Petterssona42ed3e2017-11-06 21:46:06 +0000405 %10 = REG_SEQUENCE %2, %subreg.sub0, killed %9, %subreg.sub1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000406 %0 = COPY %10
407 %11 = COPY %10.sub0
408 %12 = COPY %10.sub1
409 %13 = COPY %8.sub0
410 %14 = COPY %8.sub1
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000411 %15 = S_ADD_U32 killed %11, killed %13, implicit-def $scc
412 %16 = S_ADDC_U32 killed %12, killed %14, implicit-def dead $scc, implicit $scc
Bjorn Petterssona42ed3e2017-11-06 21:46:06 +0000413 %17 = REG_SEQUENCE killed %15, %subreg.sub0, killed %16, %subreg.sub1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000414 %18 = S_MOV_B32 12
415 %19 = S_MOV_B32 1048576
Bjorn Petterssona42ed3e2017-11-06 21:46:06 +0000416 %20 = REG_SEQUENCE killed %19, %subreg.sub0, killed %18, %subreg.sub1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000417 %22 = COPY killed %20.sub1
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000418 %21 = V_CMP_LT_U32_e64 killed %17.sub0, %22, implicit $exec
419 %1 = SI_IF killed %21, %bb.2.bb2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000420 S_BRANCH %bb.1.bb1
421
422 bb.1.bb1:
423 successors: %bb.2.bb2(0x80000000)
424
425 %23 = S_MOV_B32 2
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000426 %24 = S_LSHL_B64 %0, killed %23, implicit-def dead $scc
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000427 %25 = S_MOV_B32 61440
428 %26 = S_MOV_B32 0
Bjorn Petterssona42ed3e2017-11-06 21:46:06 +0000429 %27 = REG_SEQUENCE killed %26, %subreg.sub0, killed %25, %subreg.sub1
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000430 %28 = REG_SEQUENCE %6, 17, killed %27, 18
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000431 %29 = V_MOV_B32_e32 0, implicit $exec
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000432 %30 = COPY %24
Ivan Kosarev1b560e62022-11-14 12:37:26 +0000433 BUFFER_STORE_DWORD_ADDR64 killed %29, killed %30, killed %28, 0, 0, 0, 0, implicit $exec
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000434
435 bb.2.bb2:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000436 SI_END_CF %1, implicit-def dead $exec, implicit-def dead $scc, implicit $exec
David Stuttard20ea21c2019-03-12 09:52:58 +0000437 S_ENDPGM 0
Stanislav Mekhanoshin465a1ff2017-06-20 18:32:42 +0000438
439...