394 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -mcpu=fiji -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck -check-prefix=GCN %s3 4--- |5 define amdgpu_kernel void @redef_m0_same_copy() { ret void }6 define amdgpu_kernel void @multi_redef_m0_same_copy() { ret void }7 define amdgpu_kernel void @redef_m0_different_copy() { ret void }8 define amdgpu_kernel void @redef_m0_mixed_copy0() { ret void }9 define amdgpu_kernel void @redef_m0_mixed_copy1() { ret void }10 define amdgpu_kernel void @redef_m0_same_mov_imm() { ret void }11 define amdgpu_kernel void @redef_m0_different_inst0() { ret void }12 define amdgpu_kernel void @redef_m0_different_inst1() { ret void }13 define amdgpu_kernel void @redef_m0_mixed_read_m0() { ret void }14 define amdgpu_kernel void @redef_m0_same_copy_call() { ret void }15 define amdgpu_kernel void @redef_m0_same_copy_multi_block() { ret void }16 define amdgpu_kernel void @redef_m0_copy_self() { ret void }17 define amdgpu_kernel void @redef_m0_copy_physreg() { ret void }18 19 declare void @func()20...21 22---23name: redef_m0_same_copy24tracksRegLiveness: true25machineFunctionInfo:26 isEntryFunction: true27body: |28 bb.0:29 liveins: $vgpr0, $sgpr030 31 ; GCN-LABEL: name: redef_m0_same_copy32 ; GCN: liveins: $vgpr0, $sgpr033 ; GCN-NEXT: {{ $}}34 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr035 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr036 ; GCN-NEXT: $m0 = COPY [[COPY1]]37 ; GCN-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32))38 ; GCN-NEXT: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load (s32))39 %0:vgpr_32 = COPY $vgpr040 %1:sgpr_32 = COPY $sgpr041 $m0 = COPY %142 %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load (s32))43 $m0 = COPY %144 %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load (s32))45 46...47 48---49name: multi_redef_m0_same_copy50tracksRegLiveness: true51machineFunctionInfo:52 isEntryFunction: true53body: |54 bb.0:55 liveins: $vgpr0, $sgpr056 57 ; GCN-LABEL: name: multi_redef_m0_same_copy58 ; GCN: liveins: $vgpr0, $sgpr059 ; GCN-NEXT: {{ $}}60 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr061 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr062 ; GCN-NEXT: $m0 = COPY [[COPY1]]63 ; GCN-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32))64 ; GCN-NEXT: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load (s32))65 %0:vgpr_32 = COPY $vgpr066 %1:sgpr_32 = COPY $sgpr067 $m0 = COPY %168 %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load (s32))69 $m0 = COPY %170 $m0 = COPY %171 %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load (s32))72 73...74 75---76name: redef_m0_different_copy77tracksRegLiveness: true78machineFunctionInfo:79 isEntryFunction: true80body: |81 bb.0:82 liveins: $vgpr0, $sgpr0, $sgpr183 84 ; GCN-LABEL: name: redef_m0_different_copy85 ; GCN: liveins: $vgpr0, $sgpr0, $sgpr186 ; GCN-NEXT: {{ $}}87 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr088 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr089 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr190 ; GCN-NEXT: $m0 = COPY [[COPY1]]91 ; GCN-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32))92 ; GCN-NEXT: $m0 = COPY [[COPY2]]93 ; GCN-NEXT: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load (s32))94 %0:vgpr_32 = COPY $vgpr095 %1:sgpr_32 = COPY $sgpr096 %2:sgpr_32 = COPY $sgpr197 $m0 = COPY %198 %3:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load (s32))99 $m0 = COPY %2100 %4:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load (s32))101 102...103 104---105name: redef_m0_mixed_copy0106tracksRegLiveness: true107machineFunctionInfo:108 isEntryFunction: true109body: |110 bb.0:111 liveins: $vgpr0, $sgpr0, $sgpr1112 113 ; GCN-LABEL: name: redef_m0_mixed_copy0114 ; GCN: liveins: $vgpr0, $sgpr0, $sgpr1115 ; GCN-NEXT: {{ $}}116 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0117 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0118 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr1119 ; GCN-NEXT: $m0 = COPY [[COPY1]]120 ; GCN-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32))121 ; GCN-NEXT: $m0 = COPY [[COPY2]]122 ; GCN-NEXT: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load (s32))123 %0:vgpr_32 = COPY $vgpr0124 %1:sgpr_32 = COPY $sgpr0125 %2:sgpr_32 = COPY $sgpr1126 $m0 = COPY %1127 %3:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load (s32))128 $m0 = COPY %1129 $m0 = COPY %2130 %4:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load (s32))131 132...133 134---135name: redef_m0_mixed_copy1136tracksRegLiveness: true137 138machineFunctionInfo:139 isEntryFunction: true140body: |141 bb.0:142 liveins: $vgpr0, $sgpr0, $sgpr1143 144 ; GCN-LABEL: name: redef_m0_mixed_copy1145 ; GCN: liveins: $vgpr0, $sgpr0, $sgpr1146 ; GCN-NEXT: {{ $}}147 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0148 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0149 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr1150 ; GCN-NEXT: $m0 = COPY [[COPY1]]151 ; GCN-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32))152 ; GCN-NEXT: $m0 = COPY [[COPY2]]153 ; GCN-NEXT: $m0 = COPY [[COPY1]]154 ; GCN-NEXT: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load (s32))155 %0:vgpr_32 = COPY $vgpr0156 %1:sgpr_32 = COPY $sgpr0157 %2:sgpr_32 = COPY $sgpr1158 $m0 = COPY %1159 %3:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load (s32))160 $m0 = COPY %2161 $m0 = COPY %1162 %4:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load (s32))163 164...165 166---167name: redef_m0_same_mov_imm168tracksRegLiveness: true169machineFunctionInfo:170 isEntryFunction: true171body: |172 bb.0:173 liveins: $vgpr0, $sgpr0174 175 ; GCN-LABEL: name: redef_m0_same_mov_imm176 ; GCN: liveins: $vgpr0, $sgpr0177 ; GCN-NEXT: {{ $}}178 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0179 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0180 ; GCN-NEXT: $m0 = S_MOV_B32 -1181 ; GCN-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32))182 ; GCN-NEXT: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load (s32))183 %0:vgpr_32 = COPY $vgpr0184 %1:sgpr_32 = COPY $sgpr0185 $m0 = S_MOV_B32 -1186 %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load (s32))187 $m0 = S_MOV_B32 -1188 %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load (s32))189 190...191 192---193name: redef_m0_different_inst0194tracksRegLiveness: true195machineFunctionInfo:196 isEntryFunction: true197body: |198 bb.0:199 liveins: $vgpr0, $sgpr0200 201 ; GCN-LABEL: name: redef_m0_different_inst0202 ; GCN: liveins: $vgpr0, $sgpr0203 ; GCN-NEXT: {{ $}}204 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0205 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0206 ; GCN-NEXT: $m0 = COPY [[COPY1]]207 ; GCN-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32))208 ; GCN-NEXT: $m0 = IMPLICIT_DEF209 ; GCN-NEXT: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load (s32))210 %0:vgpr_32 = COPY $vgpr0211 %1:sgpr_32 = COPY $sgpr0212 $m0 = COPY %1213 %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load (s32))214 $m0 = IMPLICIT_DEF215 %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load (s32))216 217...218 219---220name: redef_m0_different_inst1221tracksRegLiveness: true222machineFunctionInfo:223 isEntryFunction: true224body: |225 bb.0:226 liveins: $vgpr0, $sgpr0227 228 ; GCN-LABEL: name: redef_m0_different_inst1229 ; GCN: liveins: $vgpr0, $sgpr0230 ; GCN-NEXT: {{ $}}231 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0232 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0233 ; GCN-NEXT: $m0 = COPY [[COPY1]]234 ; GCN-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32))235 ; GCN-NEXT: S_NOP 0, implicit-def $m0236 ; GCN-NEXT: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load (s32))237 %0:vgpr_32 = COPY $vgpr0238 %1:sgpr_32 = COPY $sgpr0239 $m0 = COPY %1240 %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load (s32))241 S_NOP 0, implicit-def $m0242 %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load (s32))243 244...245 246---247name: redef_m0_mixed_read_m0248tracksRegLiveness: true249machineFunctionInfo:250 isEntryFunction: true251body: |252 bb.0:253 liveins: $vgpr0, $sgpr0, $sgpr1254 255 ; GCN-LABEL: name: redef_m0_mixed_read_m0256 ; GCN: liveins: $vgpr0, $sgpr0, $sgpr1257 ; GCN-NEXT: {{ $}}258 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0259 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0260 ; GCN-NEXT: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr1261 ; GCN-NEXT: $m0 = COPY [[COPY1]]262 ; GCN-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32))263 ; GCN-NEXT: $m0 = COPY [[COPY2]]264 ; GCN-NEXT: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load (s32))265 ; GCN-NEXT: [[DS_READ_B32_2:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 128, 0, implicit $m0, implicit $exec :: (load (s32))266 %0:vgpr_32 = COPY $vgpr0267 %1:sgpr_32 = COPY $sgpr0268 %2:sgpr_32 = COPY $sgpr1269 $m0 = COPY %1270 %3:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load (s32))271 $m0 = COPY %2272 %4:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load (s32))273 $m0 = COPY %2274 %5:vgpr_32 = DS_READ_B32 %0, 128, 0, implicit $m0, implicit $exec :: (load (s32))275...276 277---278name: redef_m0_same_copy_call279tracksRegLiveness: true280machineFunctionInfo:281 isEntryFunction: true282body: |283 bb.0:284 liveins: $vgpr0, $sgpr0285 286 ; GCN-LABEL: name: redef_m0_same_copy_call287 ; GCN: liveins: $vgpr0, $sgpr0288 ; GCN-NEXT: {{ $}}289 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0290 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0291 ; GCN-NEXT: $m0 = COPY [[COPY1]]292 ; GCN-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32))293 ; GCN-NEXT: dead $sgpr30_sgpr31 = SI_CALL undef $sgpr6_sgpr7, @func, csr_amdgpu294 ; GCN-NEXT: $m0 = COPY [[COPY1]]295 ; GCN-NEXT: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load (s32))296 %0:vgpr_32 = COPY $vgpr0297 %1:sgpr_32 = COPY $sgpr0298 $m0 = COPY %1299 %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load (s32))300 dead $sgpr30_sgpr31 = SI_CALL undef $sgpr6_sgpr7, @func, csr_amdgpu301 $m0 = COPY %1302 %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load (s32))303 304...305 306---307name: redef_m0_same_copy_multi_block308tracksRegLiveness: true309machineFunctionInfo:310 isEntryFunction: true311body: |312 ; GCN-LABEL: name: redef_m0_same_copy_multi_block313 ; GCN: bb.0:314 ; GCN-NEXT: successors: %bb.1(0x80000000)315 ; GCN-NEXT: liveins: $vgpr0, $sgpr0316 ; GCN-NEXT: {{ $}}317 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0318 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0319 ; GCN-NEXT: $m0 = COPY [[COPY1]]320 ; GCN-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32))321 ; GCN-NEXT: {{ $}}322 ; GCN-NEXT: bb.1:323 ; GCN-NEXT: $m0 = COPY [[COPY1]]324 ; GCN-NEXT: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load (s32))325 bb.0:326 liveins: $vgpr0, $sgpr0327 328 %0:vgpr_32 = COPY $vgpr0329 %1:sgpr_32 = COPY $sgpr0330 $m0 = COPY %1331 %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load (s32))332 333 bb.1:334 $m0 = COPY %1335 %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load (s32))336 337...338 339---340name: redef_m0_copy_self341tracksRegLiveness: true342machineFunctionInfo:343 isEntryFunction: true344body: |345 bb.0:346 liveins: $vgpr0, $sgpr0347 348 ; GCN-LABEL: name: redef_m0_copy_self349 ; GCN: liveins: $vgpr0, $sgpr0350 ; GCN-NEXT: {{ $}}351 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0352 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0353 ; GCN-NEXT: $m0 = COPY [[COPY1]]354 ; GCN-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32))355 ; GCN-NEXT: $m0 = COPY $m0356 ; GCN-NEXT: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load (s32))357 %0:vgpr_32 = COPY $vgpr0358 %1:sgpr_32 = COPY $sgpr0359 $m0 = COPY %1360 %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load (s32))361 $m0 = COPY $m0362 %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load (s32))363 364...365 366---367name: redef_m0_copy_physreg368tracksRegLiveness: true369machineFunctionInfo:370 isEntryFunction: true371body: |372 bb.0:373 liveins: $vgpr0, $sgpr0374 375 ; GCN-LABEL: name: redef_m0_copy_physreg376 ; GCN: liveins: $vgpr0, $sgpr0377 ; GCN-NEXT: {{ $}}378 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0379 ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0380 ; GCN-NEXT: $m0 = COPY $sgpr0381 ; GCN-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32))382 ; GCN-NEXT: $sgpr0 = S_MOV_B32 0383 ; GCN-NEXT: $m0 = COPY $sgpr0384 ; GCN-NEXT: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load (s32))385 %0:vgpr_32 = COPY $vgpr0386 %1:sgpr_32 = COPY $sgpr0387 $m0 = COPY $sgpr0388 %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load (s32))389 $sgpr0 = S_MOV_B32 0390 $m0 = COPY $sgpr0391 %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load (s32))392 393...394