602 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc -mtriple=amdgcn -mcpu=gfx803 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck -check-prefixes=CHECK,GFX8 %s3# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck -check-prefixes=CHECK,GFX9 %s4# RUN: llc -mtriple=amdgcn -mcpu=gfx1030 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck -check-prefixes=CHECK,GFX10 %s5# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck -check-prefixes=CHECK,GFX10 %s6 7---8name: copy_undef9tracksRegLiveness: true10stack:11 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }12body: |13 bb.0:14 ; CHECK-LABEL: name: copy_undef15 ; CHECK: [[COPY:%[0-9]+]]:vgpr_32 = COPY undef %2:sreg_3216 ; CHECK-NEXT: SI_RETURN implicit [[COPY]]17 %0:sreg_32 = S_MOV_B32 %stack.018 %2:vgpr_32 = COPY undef %1:sreg_3219 SI_RETURN implicit %220...21 22---23name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr24tracksRegLiveness: true25stack:26 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }27body: |28 bb.0:29 ; GFX8-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr30 ; GFX8: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = nuw V_ADD_CO_U32_e32 128, %stack.0, implicit-def dead $vcc, implicit $exec31 ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e32_]]32 ;33 ; GFX9-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr34 ; GFX9: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = nuw V_ADD_U32_e32 128, %stack.0, implicit $exec35 ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]36 ;37 ; GFX10-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr38 ; GFX10: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = nuw V_ADD_U32_e32 128, %stack.0, implicit $exec39 ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]40 %0:sreg_32 = S_MOV_B32 %stack.041 %1:sreg_32 = nuw S_ADD_I32 %0, 128, implicit-def dead $scc42 %2:vgpr_32 = COPY %143 SI_RETURN implicit %244...45 46---47name: fold_s_add_i32__const_copy_mov_fi_to_virt_vgpr48tracksRegLiveness: true49stack:50 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }51body: |52 bb.0:53 ; GFX8-LABEL: name: fold_s_add_i32__const_copy_mov_fi_to_virt_vgpr54 ; GFX8: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 128, %stack.0, implicit-def dead $vcc, implicit $exec55 ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e32_]]56 ;57 ; GFX9-LABEL: name: fold_s_add_i32__const_copy_mov_fi_to_virt_vgpr58 ; GFX9: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec59 ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]60 ;61 ; GFX10-LABEL: name: fold_s_add_i32__const_copy_mov_fi_to_virt_vgpr62 ; GFX10: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec63 ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]64 %0:sreg_32 = S_MOV_B32 %stack.065 %1:sreg_32 = S_ADD_I32 128, %0, implicit-def dead $scc66 %2:vgpr_32 = COPY %167 SI_RETURN implicit %268...69 70---71name: fold_s_add_i32__fi_imm_copy_to_virt_vgpr72tracksRegLiveness: true73stack:74 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }75body: |76 bb.0:77 ; GFX8-LABEL: name: fold_s_add_i32__fi_imm_copy_to_virt_vgpr78 ; GFX8: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = nuw V_ADD_CO_U32_e64 64, %stack.0, 0, implicit $exec79 ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_]]80 ;81 ; GFX9-LABEL: name: fold_s_add_i32__fi_imm_copy_to_virt_vgpr82 ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = nuw V_ADD_U32_e64 64, %stack.0, 0, implicit $exec83 ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]84 ;85 ; GFX10-LABEL: name: fold_s_add_i32__fi_imm_copy_to_virt_vgpr86 ; GFX10: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = nuw V_ADD_U32_e64 64, %stack.0, 0, implicit $exec87 ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]88 %0:sreg_32 = nuw S_ADD_I32 %stack.0, 64, implicit-def dead $scc89 %1:vgpr_32 = COPY %090 SI_RETURN implicit %191...92 93---94name: fold_s_add_i32__imm_fi_copy_to_virt_vgpr95tracksRegLiveness: true96stack:97 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }98body: |99 bb.0:100 ; GFX8-LABEL: name: fold_s_add_i32__imm_fi_copy_to_virt_vgpr101 ; GFX8: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = nuw V_ADD_CO_U32_e64 64, %stack.0, 0, implicit $exec102 ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_]]103 ;104 ; GFX9-LABEL: name: fold_s_add_i32__imm_fi_copy_to_virt_vgpr105 ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = nuw V_ADD_U32_e64 64, %stack.0, 0, implicit $exec106 ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]107 ;108 ; GFX10-LABEL: name: fold_s_add_i32__imm_fi_copy_to_virt_vgpr109 ; GFX10: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = nuw V_ADD_U32_e64 64, %stack.0, 0, implicit $exec110 ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]111 %0:sreg_32 = nuw S_ADD_I32 64, %stack.0, implicit-def dead $scc112 %1:vgpr_32 = COPY %0113 SI_RETURN implicit %1114...115 116---117name: fold_s_add_i32__mov_fi_const_copy_to_phys_vgpr118tracksRegLiveness: true119stack:120 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }121body: |122 bb.0:123 ; CHECK-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_phys_vgpr124 ; CHECK: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, 128, implicit-def dead $scc125 ; CHECK-NEXT: $vgpr0 = COPY [[S_ADD_I32_]]126 ; CHECK-NEXT: SI_RETURN implicit $vgpr0127 %0:sreg_32 = S_MOV_B32 %stack.0128 %1:sreg_32 = S_ADD_I32 %0, 128, implicit-def dead $scc129 $vgpr0 = COPY %1130 SI_RETURN implicit $vgpr0131...132 133---134name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr_live_vcc135tracksRegLiveness: true136stack:137 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }138body: |139 bb.0:140 liveins: $vcc141 ; GFX8-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr_live_vcc142 ; GFX8: liveins: $vcc143 ; GFX8-NEXT: {{ $}}144 ; GFX8-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, 128, implicit-def dead $scc145 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]146 ; GFX8-NEXT: SI_RETURN implicit [[COPY]], implicit $vcc147 ;148 ; GFX9-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr_live_vcc149 ; GFX9: liveins: $vcc150 ; GFX9-NEXT: {{ $}}151 ; GFX9-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec152 ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]], implicit $vcc153 ;154 ; GFX10-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr_live_vcc155 ; GFX10: liveins: $vcc156 ; GFX10-NEXT: {{ $}}157 ; GFX10-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec158 ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]], implicit $vcc159 %0:sreg_32 = S_MOV_B32 %stack.0160 %1:sreg_32 = S_ADD_I32 %0, 128, implicit-def dead $scc161 %2:vgpr_32 = COPY %1162 SI_RETURN implicit %2, implicit $vcc163...164 165---166name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr_live_scc167tracksRegLiveness: true168frameInfo:169 maxAlignment: 4170 localFrameSize: 16384171stack:172 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }173body: |174 bb.0:175 ; CHECK-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr_live_scc176 ; CHECK: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, 128, implicit-def $scc177 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]178 ; CHECK-NEXT: SI_RETURN implicit [[COPY]], implicit $scc179 %0:sreg_32 = S_MOV_B32 %stack.0180 %1:sreg_32 = S_ADD_I32 %0, 128, implicit-def $scc181 %2:vgpr_32 = COPY %1182 SI_RETURN implicit %2, implicit $scc183...184 185---186name: fold_s_add_i32__mov_fi_reg_copy_to_virt_vgpr187tracksRegLiveness: true188stack:189 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }190body: |191 bb.0:192 liveins: $sgpr8193 194 ; GFX8-LABEL: name: fold_s_add_i32__mov_fi_reg_copy_to_virt_vgpr195 ; GFX8: liveins: $sgpr8196 ; GFX8-NEXT: {{ $}}197 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8198 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY]], %stack.0, 0, implicit $exec199 ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_]]200 ;201 ; GFX9-LABEL: name: fold_s_add_i32__mov_fi_reg_copy_to_virt_vgpr202 ; GFX9: liveins: $sgpr8203 ; GFX9-NEXT: {{ $}}204 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8205 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec206 ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]207 ;208 ; GFX10-LABEL: name: fold_s_add_i32__mov_fi_reg_copy_to_virt_vgpr209 ; GFX10: liveins: $sgpr8210 ; GFX10-NEXT: {{ $}}211 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8212 ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec213 ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]214 %0:sreg_32 = COPY $sgpr8215 %1:sreg_32 = S_MOV_B32 %stack.0216 %2:sreg_32 = S_ADD_I32 %0, %1, implicit-def dead $scc217 %3:vgpr_32 = COPY %2218 SI_RETURN implicit %3219...220 221 222---223name: fold_s_add_i32__reg_copy_mov_fi_to_virt_vgpr224tracksRegLiveness: true225stack:226 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }227body: |228 bb.0:229 liveins: $sgpr8230 231 ; GFX8-LABEL: name: fold_s_add_i32__reg_copy_mov_fi_to_virt_vgpr232 ; GFX8: liveins: $sgpr8233 ; GFX8-NEXT: {{ $}}234 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8235 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY]], %stack.0, 0, implicit $exec236 ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_]]237 ;238 ; GFX9-LABEL: name: fold_s_add_i32__reg_copy_mov_fi_to_virt_vgpr239 ; GFX9: liveins: $sgpr8240 ; GFX9-NEXT: {{ $}}241 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8242 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec243 ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]244 ;245 ; GFX10-LABEL: name: fold_s_add_i32__reg_copy_mov_fi_to_virt_vgpr246 ; GFX10: liveins: $sgpr8247 ; GFX10-NEXT: {{ $}}248 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8249 ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec250 ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]251 %0:sreg_32 = COPY $sgpr8252 %1:sreg_32 = S_MOV_B32 %stack.0253 %2:sreg_32 = S_ADD_I32 %1, %0, implicit-def dead $scc254 %3:vgpr_32 = COPY %2255 SI_RETURN implicit %3256...257 258---259name: fold_s_add_i32__fi_fi_copy_to_virt_vgpr260tracksRegLiveness: true261stack:262 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }263 - { id: 1, size: 16384, alignment: 4, local-offset: 0 }264body: |265 bb.0:266 ; CHECK-LABEL: name: fold_s_add_i32__fi_fi_copy_to_virt_vgpr267 ; CHECK: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, %stack.1, implicit-def dead $scc268 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[COPY]]269 ; CHECK-NEXT: SI_RETURN implicit [[COPY]]270 %0:sreg_32 = S_ADD_I32 %stack.0, %stack.1, implicit-def dead $scc271 %1:vgpr_32 = COPY %1272 SI_RETURN implicit %1273...274 275---276name: fold_s_add_i32__fi_const_copy_to_virt_vgpr277tracksRegLiveness: true278stack:279 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }280body: |281 bb.0:282 ; GFX8-LABEL: name: fold_s_add_i32__fi_const_copy_to_virt_vgpr283 ; GFX8: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 128, %stack.0, implicit-def dead $vcc, implicit $exec284 ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e32_]]285 ;286 ; GFX9-LABEL: name: fold_s_add_i32__fi_const_copy_to_virt_vgpr287 ; GFX9: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec288 ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]289 ;290 ; GFX10-LABEL: name: fold_s_add_i32__fi_const_copy_to_virt_vgpr291 ; GFX10: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec292 ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]293 %0:sreg_32 = S_ADD_I32 %stack.0, 128, implicit-def dead $scc294 %1:vgpr_32 = COPY %0295 SI_RETURN implicit %1296...297 298---299name: fold_s_add_i32__const_fi_copy_to_virt_vgpr300tracksRegLiveness: true301stack:302 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }303body: |304 bb.0:305 ; GFX8-LABEL: name: fold_s_add_i32__const_fi_copy_to_virt_vgpr306 ; GFX8: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 128, %stack.0, implicit-def dead $vcc, implicit $exec307 ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e32_]]308 ;309 ; GFX9-LABEL: name: fold_s_add_i32__const_fi_copy_to_virt_vgpr310 ; GFX9: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec311 ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]312 ;313 ; GFX10-LABEL: name: fold_s_add_i32__const_fi_copy_to_virt_vgpr314 ; GFX10: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec315 ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]316 %0:sreg_32 = S_ADD_I32 128, %stack.0, implicit-def dead $scc317 %1:vgpr_32 = COPY %0318 SI_RETURN implicit %1319...320 321---322name: fold_s_add_i32__fi_reg_copy_to_virt_vgpr323tracksRegLiveness: true324stack:325 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }326body: |327 bb.0:328 liveins: $sgpr8329 ; GFX8-LABEL: name: fold_s_add_i32__fi_reg_copy_to_virt_vgpr330 ; GFX8: liveins: $sgpr8331 ; GFX8-NEXT: {{ $}}332 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8333 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY]], %stack.0, 0, implicit $exec334 ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_]]335 ;336 ; GFX9-LABEL: name: fold_s_add_i32__fi_reg_copy_to_virt_vgpr337 ; GFX9: liveins: $sgpr8338 ; GFX9-NEXT: {{ $}}339 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8340 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec341 ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]342 ;343 ; GFX10-LABEL: name: fold_s_add_i32__fi_reg_copy_to_virt_vgpr344 ; GFX10: liveins: $sgpr8345 ; GFX10-NEXT: {{ $}}346 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8347 ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec348 ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]349 %0:sreg_32 = COPY $sgpr8350 %1:sreg_32 = S_ADD_I32 %stack.0, %0, implicit-def dead $scc351 %2:vgpr_32 = COPY %1352 SI_RETURN implicit %2353...354 355---356name: fold_s_add_i32__reg_fi_copy_to_virt_vgpr357tracksRegLiveness: true358stack:359 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }360body: |361 bb.0:362 liveins: $sgpr8363 ; GFX8-LABEL: name: fold_s_add_i32__reg_fi_copy_to_virt_vgpr364 ; GFX8: liveins: $sgpr8365 ; GFX8-NEXT: {{ $}}366 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8367 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY]], %stack.0, 0, implicit $exec368 ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_]]369 ;370 ; GFX9-LABEL: name: fold_s_add_i32__reg_fi_copy_to_virt_vgpr371 ; GFX9: liveins: $sgpr8372 ; GFX9-NEXT: {{ $}}373 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8374 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec375 ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]376 ;377 ; GFX10-LABEL: name: fold_s_add_i32__reg_fi_copy_to_virt_vgpr378 ; GFX10: liveins: $sgpr8379 ; GFX10-NEXT: {{ $}}380 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8381 ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec382 ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]383 %0:sreg_32 = COPY $sgpr8384 %1:sreg_32 = S_ADD_I32 %0, %stack.0, implicit-def dead $scc385 %2:vgpr_32 = COPY %1386 SI_RETURN implicit %2387...388 389---390name: fold_s_or_b32__mov_fi_const_copy_to_virt_vgpr391tracksRegLiveness: true392stack:393 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }394body: |395 bb.0:396 ; CHECK-LABEL: name: fold_s_or_b32__mov_fi_const_copy_to_virt_vgpr397 ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.0398 ; CHECK-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[S_MOV_B32_]], 128, implicit-def dead $scc399 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_OR_B32_]]400 ; CHECK-NEXT: SI_RETURN implicit [[COPY]]401 %0:sreg_32 = S_MOV_B32 %stack.0402 %1:sreg_32 = S_OR_B32 %0, 128, implicit-def dead $scc403 %2:vgpr_32 = COPY %1404 SI_RETURN implicit %2405...406 407---408name: fold_s_or_b32__const_copy_mov_fi_to_virt_vgpr409tracksRegLiveness: true410stack:411 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }412body: |413 bb.0:414 ; CHECK-LABEL: name: fold_s_or_b32__const_copy_mov_fi_to_virt_vgpr415 ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.0416 ; CHECK-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 128, [[S_MOV_B32_]], implicit-def dead $scc417 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_OR_B32_]]418 ; CHECK-NEXT: SI_RETURN implicit [[COPY]]419 %0:sreg_32 = S_MOV_B32 %stack.0420 %1:sreg_32 = S_OR_B32 128, %0, implicit-def dead $scc421 %2:vgpr_32 = COPY %1422 SI_RETURN implicit %2423...424 425---426name: fold_s_or_b32__fi_imm_copy_to_virt_vgpr427tracksRegLiveness: true428stack:429 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }430body: |431 bb.0:432 ; CHECK-LABEL: name: fold_s_or_b32__fi_imm_copy_to_virt_vgpr433 ; CHECK: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = disjoint V_OR_B32_e64 64, %stack.0, implicit $exec434 ; CHECK-NEXT: SI_RETURN implicit [[V_OR_B32_e64_]]435 %0:sreg_32 = disjoint S_OR_B32 %stack.0, 64, implicit-def dead $scc436 %1:vgpr_32 = COPY %0437 SI_RETURN implicit %1438...439 440---441name: fold_s_or_b32__imm_fi_copy_to_virt_vgpr442tracksRegLiveness: true443stack:444 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }445body: |446 bb.0:447 ; CHECK-LABEL: name: fold_s_or_b32__imm_fi_copy_to_virt_vgpr448 ; CHECK: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = disjoint V_OR_B32_e64 64, %stack.0, implicit $exec449 ; CHECK-NEXT: SI_RETURN implicit [[V_OR_B32_e64_]]450 %0:sreg_32 = disjoint S_OR_B32 64, %stack.0, implicit-def dead $scc451 %1:vgpr_32 = COPY %0452 SI_RETURN implicit %1453...454 455---456name: fold_s_and_b32__fi_imm_copy_to_virt_vgpr457tracksRegLiveness: true458stack:459 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }460body: |461 bb.0:462 ; CHECK-LABEL: name: fold_s_and_b32__fi_imm_copy_to_virt_vgpr463 ; CHECK: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 64, %stack.0, implicit $exec464 ; CHECK-NEXT: SI_RETURN implicit [[V_AND_B32_e64_]]465 %0:sreg_32 = S_AND_B32 %stack.0, 64, implicit-def dead $scc466 %1:vgpr_32 = COPY %0467 SI_RETURN implicit %1468...469 470---471name: fold_s_and_b32__fi_const_copy_to_virt_vgpr472tracksRegLiveness: true473stack:474 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }475body: |476 bb.0:477 ; CHECK-LABEL: name: fold_s_and_b32__fi_const_copy_to_virt_vgpr478 ; CHECK: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 128, %stack.0, implicit $exec479 ; CHECK-NEXT: SI_RETURN implicit [[V_AND_B32_e32_]]480 %0:sreg_32 = S_AND_B32 %stack.0, 128, implicit-def dead $scc481 %1:vgpr_32 = COPY %0482 SI_RETURN implicit %1483...484 485---486name: fold_s_mul_i32__fi_imm_copy_to_virt_vgpr487tracksRegLiveness: true488stack:489 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }490body: |491 bb.0:492 ; CHECK-LABEL: name: fold_s_mul_i32__fi_imm_copy_to_virt_vgpr493 ; CHECK: [[V_MUL_LO_U32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_LO_U32_e64 64, %stack.0, implicit $exec494 ; CHECK-NEXT: SI_RETURN implicit [[V_MUL_LO_U32_e64_]]495 %0:sreg_32 = S_MUL_I32 %stack.0, 64, implicit-def dead $scc496 %1:vgpr_32 = COPY %0497 SI_RETURN implicit %1498...499 500---501name: fold_s_mul_i32__fi_reg_copy_to_virt_vgpr502tracksRegLiveness: true503stack:504 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }505body: |506 bb.0:507 liveins: $sgpr4508 ; CHECK-LABEL: name: fold_s_mul_i32__fi_reg_copy_to_virt_vgpr509 ; CHECK: liveins: $sgpr4510 ; CHECK-NEXT: {{ $}}511 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4512 ; CHECK-NEXT: [[V_MUL_LO_U32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_LO_U32_e64 [[COPY]], %stack.0, implicit $exec513 ; CHECK-NEXT: SI_RETURN implicit [[V_MUL_LO_U32_e64_]]514 %0:sreg_32 = COPY $sgpr4515 %1:sreg_32 = S_MUL_I32 %stack.0, %0, implicit-def dead $scc516 %2:vgpr_32 = COPY %1517 SI_RETURN implicit %2518...519 520---521name: fold_s_and_b32__mov_fi_const_copy_to_virt_vgpr522tracksRegLiveness: true523stack:524 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }525body: |526 bb.0:527 ; CHECK-LABEL: name: fold_s_and_b32__mov_fi_const_copy_to_virt_vgpr528 ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.0529 ; CHECK-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[S_MOV_B32_]], 128, implicit-def dead $scc530 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_AND_B32_]]531 ; CHECK-NEXT: SI_RETURN implicit [[COPY]]532 %0:sreg_32 = S_MOV_B32 %stack.0533 %1:sreg_32 = S_AND_B32 %0, 128, implicit-def dead $scc534 %2:vgpr_32 = COPY %1535 SI_RETURN implicit %2536...537 538# Physreg copy of %2 to $vgpr0 should not be erased539---540name: fold_fi_into_s_or_b32_user_is_physreg_copy541tracksRegLiveness: true542stack:543 - { id: 0, size: 16, alignment: 16 }544machineFunctionInfo:545 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'546 frameOffsetReg: '$sgpr33'547 stackPtrOffsetReg: '$sgpr32'548body: |549 ; CHECK-LABEL: name: fold_fi_into_s_or_b32_user_is_physreg_copy550 ; CHECK: bb.0:551 ; CHECK-NEXT: successors: %bb.1(0x80000000)552 ; CHECK-NEXT: liveins: $vgpr0_vgpr1553 ; CHECK-NEXT: {{ $}}554 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1555 ; CHECK-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, 4, implicit-def dead $scc556 ; CHECK-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec557 ; CHECK-NEXT: {{ $}}558 ; CHECK-NEXT: bb.1:559 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)560 ; CHECK-NEXT: {{ $}}561 ; CHECK-NEXT: [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[COPY]].sub0, implicit $exec562 ; CHECK-NEXT: [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[COPY]].sub1, implicit $exec563 ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1564 ; CHECK-NEXT: [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[REG_SEQUENCE]], [[COPY]], implicit $exec565 ; CHECK-NEXT: [[S_AND_SAVEEXEC_B64_:%[0-9]+]]:sreg_64_xexec = S_AND_SAVEEXEC_B64 killed [[V_CMP_EQ_U64_e64_]], implicit-def $exec, implicit-def $scc, implicit $exec566 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32567 ; CHECK-NEXT: $vgpr0 = COPY [[S_ADD_I32_]]568 ; CHECK-NEXT: $sgpr30_sgpr31 = SI_CALL [[REG_SEQUENCE]], 0, csr_amdgpu, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $vgpr0569 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32570 ; CHECK-NEXT: $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc571 ; CHECK-NEXT: SI_WATERFALL_LOOP %bb.1, implicit $exec572 ; CHECK-NEXT: {{ $}}573 ; CHECK-NEXT: bb.2:574 ; CHECK-NEXT: $exec = S_MOV_B64 [[S_MOV_B64_]]575 ; CHECK-NEXT: SI_RETURN576 bb.0:577 liveins: $vgpr0_vgpr1578 579 %0:vreg_64 = COPY $vgpr0_vgpr1580 %1:sreg_32 = S_MOV_B32 %stack.0581 %2:sreg_32 = S_ADD_I32 killed %1, 4, implicit-def dead $scc582 %3:sreg_64_xexec = S_MOV_B64 $exec583 584 bb.1:585 %4:sreg_32_xm0 = V_READFIRSTLANE_B32 %0.sub0, implicit $exec586 %5:sreg_32_xm0 = V_READFIRSTLANE_B32 %0.sub1, implicit $exec587 %6:sgpr_64 = REG_SEQUENCE %4, %subreg.sub0, %5, %subreg.sub1588 %7:sreg_64_xexec = V_CMP_EQ_U64_e64 %6, %0, implicit $exec589 %8:sreg_64_xexec = S_AND_SAVEEXEC_B64 killed %7, implicit-def $exec, implicit-def $scc, implicit $exec590 ADJCALLSTACKUP 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32591 $vgpr0 = COPY %2592 $sgpr30_sgpr31 = SI_CALL %6, 0, csr_amdgpu, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $vgpr0593 ADJCALLSTACKDOWN 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32594 $exec = S_XOR_B64_term $exec, %8, implicit-def $scc595 SI_WATERFALL_LOOP %bb.1, implicit $exec596 597 bb.2:598 $exec = S_MOV_B64 %3599 SI_RETURN600 601...602