678 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck -check-prefixes=CHECK,GFX9 %s3# RUN: llc -mtriple=amdgcn -mcpu=gfx1030 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck -check-prefixes=CHECK,GFX10 %s4# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck -check-prefixes=CHECK,GFX12 %s5 6---7name: fold_frame_index__s_add_i32__fi_const8tracksRegLiveness: true9frameInfo:10 maxAlignment: 411 localFrameSize: 1638412stack:13 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }14body: |15 bb.0:16 ; CHECK-LABEL: name: fold_frame_index__s_add_i32__fi_const17 ; CHECK: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, 128, implicit-def $scc18 ; CHECK-NEXT: $sgpr4 = COPY [[S_ADD_I32_]]19 ; CHECK-NEXT: SI_RETURN implicit $sgpr420 %0:sreg_32 = S_MOV_B32 %stack.021 %1:sreg_32 = S_ADD_I32 %0, 128, implicit-def $scc22 $sgpr4 = COPY %123 SI_RETURN implicit $sgpr424...25 26---27name: fold_frame_index__s_add_i32__const_fi28tracksRegLiveness: true29frameInfo:30 maxAlignment: 431 localFrameSize: 1638432stack:33 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }34body: |35 bb.0:36 ; CHECK-LABEL: name: fold_frame_index__s_add_i32__const_fi37 ; CHECK: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 128, %stack.0, implicit-def $scc38 ; CHECK-NEXT: $sgpr4 = COPY [[S_ADD_I32_]]39 ; CHECK-NEXT: SI_RETURN implicit $sgpr440 %0:sreg_32 = S_MOV_B32 %stack.041 %1:sreg_32 = S_ADD_I32 128, %0, implicit-def $scc42 $sgpr4 = COPY %143 SI_RETURN implicit $sgpr444...45 46---47name: fold_frame_index__s_add_i32__materializedconst_fi48tracksRegLiveness: true49frameInfo:50 maxAlignment: 451 localFrameSize: 1638452stack:53 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }54body: |55 bb.0:56 ; CHECK-LABEL: name: fold_frame_index__s_add_i32__materializedconst_fi57 ; CHECK: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def $scc58 ; CHECK-NEXT: $sgpr4 = COPY [[S_ADD_I32_]]59 ; CHECK-NEXT: SI_RETURN implicit $sgpr460 %0:sreg_32 = S_MOV_B32 25661 %1:sreg_32 = S_MOV_B32 %stack.062 %2:sreg_32 = S_ADD_I32 %0, %1, implicit-def $scc63 $sgpr4 = COPY %264 SI_RETURN implicit $sgpr465...66 67---68name: fold_frame_index__s_add_i32__fi_materializedconst_069tracksRegLiveness: true70frameInfo:71 maxAlignment: 472 localFrameSize: 1638473stack:74 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }75body: |76 bb.0:77 ; CHECK-LABEL: name: fold_frame_index__s_add_i32__fi_materializedconst_078 ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 25679 ; CHECK-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[S_MOV_B32_]], implicit-def $scc80 ; CHECK-NEXT: $sgpr4 = COPY [[S_ADD_I32_]]81 ; CHECK-NEXT: SI_RETURN implicit $sgpr482 %0:sreg_32 = S_MOV_B32 %stack.083 %1:sreg_32 = S_MOV_B32 25684 %2:sreg_32 = S_ADD_I32 %0, %1, implicit-def $scc85 $sgpr4 = COPY %286 SI_RETURN implicit $sgpr487...88 89 90---91name: fold_frame_index__s_add_i32__fi_materializedconst_192tracksRegLiveness: true93frameInfo:94 maxAlignment: 495 localFrameSize: 1638496stack:97 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }98body: |99 bb.0:100 ; CHECK-LABEL: name: fold_frame_index__s_add_i32__fi_materializedconst_1101 ; CHECK: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 256, %stack.0, implicit-def $scc102 ; CHECK-NEXT: $sgpr4 = COPY [[S_ADD_I32_]]103 ; CHECK-NEXT: SI_RETURN implicit $sgpr4104 %0:sreg_32 = S_MOV_B32 256105 %1:sreg_32 = S_MOV_B32 %stack.0106 %2:sreg_32 = S_ADD_I32 %0, %1, implicit-def $scc107 $sgpr4 = COPY %2108 SI_RETURN implicit $sgpr4109...110 111---112name: fold_frame_index__s_add_i32__reg_fi113tracksRegLiveness: true114frameInfo:115 maxAlignment: 4116 localFrameSize: 16384117stack:118 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }119body: |120 bb.0:121 liveins: $sgpr4122 ; CHECK-LABEL: name: fold_frame_index__s_add_i32__reg_fi123 ; CHECK: liveins: $sgpr4124 ; CHECK-NEXT: {{ $}}125 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4126 ; CHECK-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], %stack.0, implicit-def $scc127 ; CHECK-NEXT: $sgpr4 = COPY [[S_ADD_I32_]]128 ; CHECK-NEXT: SI_RETURN implicit $sgpr4129 %0:sreg_32 = COPY $sgpr4130 %1:sreg_32 = S_MOV_B32 %stack.0131 %2:sreg_32 = S_ADD_I32 %0, %1, implicit-def $scc132 $sgpr4 = COPY %2133 SI_RETURN implicit $sgpr4134...135 136---137name: fold_frame_index__s_add_i32__fi_reg138tracksRegLiveness: true139frameInfo:140 maxAlignment: 4141 localFrameSize: 16384142stack:143 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }144body: |145 bb.0:146 liveins: $sgpr4147 ; CHECK-LABEL: name: fold_frame_index__s_add_i32__fi_reg148 ; CHECK: liveins: $sgpr4149 ; CHECK-NEXT: {{ $}}150 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4151 ; CHECK-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, [[COPY]], implicit-def $scc152 ; CHECK-NEXT: $sgpr4 = COPY [[S_ADD_I32_]]153 ; CHECK-NEXT: SI_RETURN implicit $sgpr4154 %0:sreg_32 = COPY $sgpr4155 %1:sreg_32 = S_MOV_B32 %stack.0156 %2:sreg_32 = S_ADD_I32 %1, %0, implicit-def $scc157 $sgpr4 = COPY %2158 SI_RETURN implicit $sgpr4159...160 161---162name: fold_frame_index__v_add_u32_e32__const_v_fi163tracksRegLiveness: true164frameInfo:165 maxAlignment: 4166 localFrameSize: 16384167stack:168 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }169body: |170 bb.0:171 ; CHECK-LABEL: name: fold_frame_index__v_add_u32_e32__const_v_fi172 ; CHECK: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec173 ; CHECK-NEXT: $sgpr4 = COPY [[V_ADD_U32_e32_]]174 ; CHECK-NEXT: SI_RETURN implicit $sgpr4175 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec176 %1:vgpr_32 = V_ADD_U32_e32 128, %0, implicit $exec177 $sgpr4 = COPY %1178 SI_RETURN implicit $sgpr4179...180 181---182name: fold_frame_index__v_add_u32_e32__materialized_v_const_v_fi183tracksRegLiveness: true184frameInfo:185 maxAlignment: 4186 localFrameSize: 16384187stack:188 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }189body: |190 bb.0:191 ; CHECK-LABEL: name: fold_frame_index__v_add_u32_e32__materialized_v_const_v_fi192 ; CHECK: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 128, implicit $exec193 ; CHECK-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 %stack.0, [[V_MOV_B32_e32_]], implicit $exec194 ; CHECK-NEXT: $sgpr4 = COPY [[V_ADD_U32_e32_]]195 ; CHECK-NEXT: SI_RETURN implicit $sgpr4196 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec197 %1:vgpr_32 = V_MOV_B32_e32 128, implicit $exec198 %2:vgpr_32 = V_ADD_U32_e32 %1, %0, implicit $exec199 $sgpr4 = COPY %2200 SI_RETURN implicit $sgpr4201...202 203---204name: fold_frame_index__v_add_u32_e64__imm_v_fi205tracksRegLiveness: true206frameInfo:207 maxAlignment: 4208 localFrameSize: 16384209stack:210 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }211body: |212 bb.0:213 ; CHECK-LABEL: name: fold_frame_index__v_add_u32_e64__imm_v_fi214 ; CHECK: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 64, %stack.0, 0, implicit $exec215 ; CHECK-NEXT: $sgpr4 = COPY [[V_ADD_U32_e64_]]216 ; CHECK-NEXT: SI_RETURN implicit $sgpr4217 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec218 %1:vgpr_32 = V_ADD_U32_e64 64, %0, 0, implicit $exec219 $sgpr4 = COPY %1220 SI_RETURN implicit $sgpr4221...222 223---224name: fold_frame_index__v_add_u32_e64___v_fi_imm225tracksRegLiveness: true226frameInfo:227 maxAlignment: 4228 localFrameSize: 16384229stack:230 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }231body: |232 bb.0:233 ; CHECK-LABEL: name: fold_frame_index__v_add_u32_e64___v_fi_imm234 ; CHECK: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 %stack.0, 64, 0, implicit $exec235 ; CHECK-NEXT: $sgpr4 = COPY [[V_ADD_U32_e64_]]236 ; CHECK-NEXT: SI_RETURN implicit $sgpr4237 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec238 %1:vgpr_32 = V_ADD_U32_e64 %0, 64, 0, implicit $exec239 $sgpr4 = COPY %1240 SI_RETURN implicit $sgpr4241...242 243---244name: fold_frame_index__v_add_co_u32_e32__const_v_fi245tracksRegLiveness: true246frameInfo:247 maxAlignment: 4248 localFrameSize: 16384249stack:250 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }251body: |252 bb.0:253 ; CHECK-LABEL: name: fold_frame_index__v_add_co_u32_e32__const_v_fi254 ; CHECK: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 128, %stack.0, implicit-def $vcc, implicit $exec255 ; CHECK-NEXT: $vgpr0 = COPY [[V_ADD_CO_U32_e32_]]256 ; CHECK-NEXT: SI_RETURN implicit $vgpr0257 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec258 %1:vgpr_32 = V_ADD_CO_U32_e32 128, %0, implicit-def $vcc, implicit $exec259 $vgpr0 = COPY %1260 SI_RETURN implicit $vgpr0261...262 263---264name: fold_frame_index__v_add_co_u32_e64__v_fi_imm265tracksRegLiveness: true266frameInfo:267 maxAlignment: 4268 localFrameSize: 16384269stack:270 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }271body: |272 bb.0:273 ; CHECK-LABEL: name: fold_frame_index__v_add_co_u32_e64__v_fi_imm274 ; CHECK: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 %stack.0, 64, 0, implicit $exec275 ; CHECK-NEXT: $vgpr0 = COPY [[V_ADD_CO_U32_e64_]]276 ; CHECK-NEXT: SI_RETURN implicit $vgpr0277 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec278 %1:vgpr_32, %2:sreg_64 = V_ADD_CO_U32_e64 %0, 64, 0, implicit $exec279 $vgpr0 = COPY %1280 SI_RETURN implicit $vgpr0281...282 283---284name: fold_frame_index__v_add_co_u32_e64__imm_v_fi285tracksRegLiveness: true286frameInfo:287 maxAlignment: 4288 localFrameSize: 16384289stack:290 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }291body: |292 bb.0:293 ; CHECK-LABEL: name: fold_frame_index__v_add_co_u32_e64__imm_v_fi294 ; CHECK: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 64, %stack.0, 0, implicit $exec295 ; CHECK-NEXT: $vgpr0 = COPY [[V_ADD_CO_U32_e64_]]296 ; CHECK-NEXT: SI_RETURN implicit $vgpr0297 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec298 %1:vgpr_32, %2:sreg_64 = V_ADD_CO_U32_e64 64, %0, 0, implicit $exec299 $vgpr0 = COPY %1300 SI_RETURN implicit $vgpr0301...302 303---304name: multi_use_scalar_fi__add_imm_add_inline_imm305tracksRegLiveness: true306frameInfo:307 maxAlignment: 4308 localFrameSize: 16384309stack:310 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }311body: |312 bb.0:313 liveins: $sgpr0, $sgpr1314 315 ; CHECK-LABEL: name: multi_use_scalar_fi__add_imm_add_inline_imm316 ; CHECK: liveins: $sgpr0, $sgpr1317 ; CHECK-NEXT: {{ $}}318 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0319 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1320 ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.0321 ; CHECK-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[S_MOV_B32_]], 16380, implicit-def dead $scc322 ; CHECK-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, 56, implicit-def dead $scc323 ; CHECK-NEXT: $sgpr4 = COPY [[S_ADD_I32_]]324 ; CHECK-NEXT: $sgpr5 = COPY [[S_ADD_I32_1]]325 ; CHECK-NEXT: SI_RETURN implicit $sgpr4, implicit $sgpr5326 %0:sreg_32 = COPY $sgpr0327 %1:sreg_32 = COPY $sgpr1328 %2:sreg_32 = S_MOV_B32 16380329 %3:sreg_32 = S_MOV_B32 56330 %4:sreg_32 = S_MOV_B32 %stack.0331 %5:sreg_32 = S_ADD_I32 %4, killed %2, implicit-def dead $scc332 %6:sreg_32 = S_ADD_I32 %4, killed %3, implicit-def dead $scc333 $sgpr4 = COPY %5334 $sgpr5 = COPY %6335 SI_RETURN implicit $sgpr4, implicit $sgpr5336...337 338---339name: multi_add_use_vector_fi__add_imm_add_inline_imm340tracksRegLiveness: true341frameInfo:342 maxAlignment: 4343 localFrameSize: 16384344stack:345 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }346body: |347 bb.0:348 liveins: $vgpr0, $vgpr1349 350 ; GFX9-LABEL: name: multi_add_use_vector_fi__add_imm_add_inline_imm351 ; GFX9: liveins: $vgpr0, $vgpr1352 ; GFX9-NEXT: {{ $}}353 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0354 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1355 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec356 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[V_MOV_B32_e32_]], killed [[COPY1]], 0, implicit $exec357 ; GFX9-NEXT: [[V_ADD_U32_e64_1:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[V_MOV_B32_e32_]], 56, 0, implicit $exec358 ; GFX9-NEXT: $vgpr0 = COPY [[V_ADD_U32_e64_]]359 ; GFX9-NEXT: $vgpr1 = COPY [[V_ADD_U32_e64_1]]360 ; GFX9-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1361 ;362 ; GFX10-LABEL: name: multi_add_use_vector_fi__add_imm_add_inline_imm363 ; GFX10: liveins: $vgpr0, $vgpr1364 ; GFX10-NEXT: {{ $}}365 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0366 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1367 ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 %stack.0, killed [[COPY1]], 0, implicit $exec368 ; GFX10-NEXT: [[V_ADD_U32_e64_1:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 %stack.0, 56, 0, implicit $exec369 ; GFX10-NEXT: $vgpr0 = COPY [[V_ADD_U32_e64_]]370 ; GFX10-NEXT: $vgpr1 = COPY [[V_ADD_U32_e64_1]]371 ; GFX10-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1372 ;373 ; GFX12-LABEL: name: multi_add_use_vector_fi__add_imm_add_inline_imm374 ; GFX12: liveins: $vgpr0, $vgpr1375 ; GFX12-NEXT: {{ $}}376 ; GFX12-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0377 ; GFX12-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1378 ; GFX12-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 %stack.0, killed [[COPY1]], 0, implicit $exec379 ; GFX12-NEXT: [[V_ADD_U32_e64_1:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 %stack.0, 56, 0, implicit $exec380 ; GFX12-NEXT: $vgpr0 = COPY [[V_ADD_U32_e64_]]381 ; GFX12-NEXT: $vgpr1 = COPY [[V_ADD_U32_e64_1]]382 ; GFX12-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1383 %0:vgpr_32 = COPY $vgpr0384 %1:vgpr_32 = COPY $vgpr1385 %2:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec386 %3:vgpr_32 = V_ADD_U32_e64 %2, killed %1, 0, implicit $exec387 %4:vgpr_32 = V_MOV_B32_e32 999, implicit $exec388 %5:vgpr_32 = COPY %3389 %6:sreg_32 = S_MOV_B32 56390 %7:vgpr_32 = V_ADD_U32_e64 %2, killed %6, 0, implicit $exec391 %8:vgpr_32 = COPY %7392 $vgpr0 = COPY %3393 $vgpr1 = COPY %7394 SI_RETURN implicit $vgpr0, implicit $vgpr1395 396...397 398---399name: fold_frame_index__through_reg_sequence_to_user_subreg400tracksRegLiveness: true401frameInfo:402 maxAlignment: 4403 localFrameSize: 16384404stack:405 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }406body: |407 bb.0:408 liveins: $sgpr8409 ; CHECK-LABEL: name: fold_frame_index__through_reg_sequence_to_user_subreg410 ; CHECK: liveins: $sgpr8411 ; CHECK-NEXT: {{ $}}412 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8413 ; CHECK-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 123414 ; CHECK-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.0415 ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1416 ; CHECK-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], %stack.0, implicit-def $scc417 ; CHECK-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], 123, implicit-def $scc418 ; CHECK-NEXT: $sgpr4 = COPY [[S_ADD_I32_]]419 ; CHECK-NEXT: $sgpr5 = COPY [[S_ADD_I32_1]]420 ; CHECK-NEXT: SI_RETURN implicit $sgpr4, implicit $sgpr5421 %0:sreg_32 = COPY $sgpr8422 %1:sreg_32 = S_MOV_B32 123423 %2:sreg_32 = S_MOV_B32 %stack.0424 %3:sreg_64 = REG_SEQUENCE %1, %subreg.sub0, %2, %subreg.sub1425 %4:sreg_32 = S_ADD_I32 %0, %3.sub1, implicit-def $scc426 %5:sreg_32 = S_ADD_I32 %0, %3.sub0, implicit-def $scc427 $sgpr4 = COPY %4428 $sgpr5 = COPY %5429 SI_RETURN implicit $sgpr4, implicit $sgpr5430 431...432 433name: fold_frame_index__s_add_u32__fi_const434tracksRegLiveness: true435frameInfo:436 maxAlignment: 4437 localFrameSize: 16384438stack:439 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }440body: |441 bb.0:442 ; CHECK-LABEL: name: fold_frame_index__s_add_u32__fi_const443 ; CHECK: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 %stack.0, 128, implicit-def $scc444 ; CHECK-NEXT: $sgpr4 = COPY [[S_ADD_U32_]]445 ; CHECK-NEXT: SI_RETURN implicit $sgpr4446 %0:sreg_32 = S_MOV_B32 %stack.0447 %1:sreg_32 = S_ADD_U32 %0, 128, implicit-def $scc448 $sgpr4 = COPY %1449 SI_RETURN implicit $sgpr4450...451 452---453name: fold_frame_index__s_add_u32__const_fi454tracksRegLiveness: true455frameInfo:456 maxAlignment: 4457 localFrameSize: 16384458stack:459 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }460body: |461 bb.0:462 ; CHECK-LABEL: name: fold_frame_index__s_add_u32__const_fi463 ; CHECK: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 128, %stack.0, implicit-def $scc464 ; CHECK-NEXT: $sgpr4 = COPY [[S_ADD_U32_]]465 ; CHECK-NEXT: SI_RETURN implicit $sgpr4466 %0:sreg_32 = S_MOV_B32 %stack.0467 %1:sreg_32 = S_ADD_U32 128, %0, implicit-def $scc468 $sgpr4 = COPY %1469 SI_RETURN implicit $sgpr4470...471 472---473name: fold_frame_index__s_add_u32__fi_inlineimm474tracksRegLiveness: true475frameInfo:476 maxAlignment: 4477 localFrameSize: 16384478stack:479 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }480body: |481 bb.0:482 ; CHECK-LABEL: name: fold_frame_index__s_add_u32__fi_inlineimm483 ; CHECK: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 %stack.0, 16, implicit-def $scc484 ; CHECK-NEXT: $sgpr4 = COPY [[S_ADD_U32_]]485 ; CHECK-NEXT: SI_RETURN implicit $sgpr4486 %0:sreg_32 = S_MOV_B32 %stack.0487 %1:sreg_32 = S_ADD_U32 %0, 16, implicit-def $scc488 $sgpr4 = COPY %1489 SI_RETURN implicit $sgpr4490...491 492---493name: fold_frame_index__s_add_u32__inlineimm_fi494tracksRegLiveness: true495frameInfo:496 maxAlignment: 4497 localFrameSize: 16384498stack:499 - { id: 0, size: 16384, alignment: 4, local-offset: 0 }500body: |501 bb.0:502 ; CHECK-LABEL: name: fold_frame_index__s_add_u32__inlineimm_fi503 ; CHECK: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 16, %stack.0, implicit-def $scc504 ; CHECK-NEXT: $sgpr4 = COPY [[S_ADD_U32_]]505 ; CHECK-NEXT: SI_RETURN implicit $sgpr4506 %0:sreg_32 = S_MOV_B32 %stack.0507 %1:sreg_32 = S_ADD_U32 16, %0, implicit-def $scc508 $sgpr4 = COPY %1509 SI_RETURN implicit $sgpr4510...511 512---513name: no_fold_literal_and_fi_s_or_b32514tracksRegLiveness: true515frameInfo:516 maxAlignment: 16517 localFrameSize: 8192518stack:519 - { id: 0, size: 4096, alignment: 4, local-offset: 0 }520 - { id: 1, size: 4096, alignment: 16, local-offset: 4096 }521body: |522 bb.0:523 ; CHECK-LABEL: name: no_fold_literal_and_fi_s_or_b32524 ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.1525 ; CHECK-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 killed [[S_MOV_B32_]], 12345, implicit-def dead $scc526 ; CHECK-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]]527 %0:sreg_32 = S_MOV_B32 12345528 %1:sreg_32 = S_MOV_B32 %stack.1529 %2:sreg_32 = S_AND_B32 killed %1, killed %0, implicit-def dead $scc530 S_ENDPGM 0, implicit %2531 532...533 534---535name: no_fold_literal_or_fi_s_or_b32536tracksRegLiveness: true537frameInfo:538 maxAlignment: 16539 localFrameSize: 8192540stack:541 - { id: 0, size: 4096, alignment: 4, local-offset: 0 }542 - { id: 1, size: 4096, alignment: 16, local-offset: 4096 }543body: |544 bb.0:545 ; CHECK-LABEL: name: no_fold_literal_or_fi_s_or_b32546 ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.1547 ; CHECK-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 killed [[S_MOV_B32_]], 12345, implicit-def dead $scc548 ; CHECK-NEXT: S_ENDPGM 0, implicit [[S_OR_B32_]]549 %0:sreg_32 = S_MOV_B32 12345550 %1:sreg_32 = S_MOV_B32 %stack.1551 %2:sreg_32 = S_OR_B32 killed %1, killed %0, implicit-def dead $scc552 S_ENDPGM 0, implicit %2553 554...555 556---557name: no_fold_literal_and_fi_s_mul_i32558tracksRegLiveness: true559frameInfo:560 maxAlignment: 16561 localFrameSize: 8192562stack:563 - { id: 0, size: 4096, alignment: 4, local-offset: 0 }564 - { id: 1, size: 4096, alignment: 16, local-offset: 4096 }565body: |566 bb.0:567 ; CHECK-LABEL: name: no_fold_literal_and_fi_s_mul_i32568 ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.1569 ; CHECK-NEXT: [[S_MUL_I32_:%[0-9]+]]:sreg_32 = S_MUL_I32 killed [[S_MOV_B32_]], 12345, implicit-def dead $scc570 ; CHECK-NEXT: S_ENDPGM 0, implicit [[S_MUL_I32_]]571 %0:sreg_32 = S_MOV_B32 12345572 %1:sreg_32 = S_MOV_B32 %stack.1573 %2:sreg_32 = S_MUL_I32 killed %1, killed %0, implicit-def dead $scc574 S_ENDPGM 0, implicit %2575 576...577 578---579name: no_fold_multiple_fi_s_cselect_b32580tracksRegLiveness: true581stack:582 - { id: 0, size: 64, alignment: 4 }583 - { id: 1, size: 32, alignment: 4 }584body: |585 bb.0:586 ; CHECK-LABEL: name: no_fold_multiple_fi_s_cselect_b32587 ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.1588 ; CHECK-NEXT: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 killed [[S_MOV_B32_]], %stack.0, implicit undef $scc589 ; CHECK-NEXT: S_ENDPGM 0, implicit [[S_CSELECT_B32_]]590 %0:sreg_32 = S_MOV_B32 %stack.0591 %1:sreg_32 = S_MOV_B32 %stack.1592 %2:sreg_32 = S_CSELECT_B32 killed %1, killed %0, implicit undef $scc593 S_ENDPGM 0, implicit %2594 595...596 597---598name: no_fold_multiple_fi_v_cndmask_b32_e64599tracksRegLiveness: true600stack:601 - { id: 0, size: 64, alignment: 4 }602 - { id: 1, size: 32, alignment: 4 }603body: |604 bb.0:605 liveins: $sgpr8_sgpr9606 ; GFX9-LABEL: name: no_fold_multiple_fi_v_cndmask_b32_e64607 ; GFX9: liveins: $sgpr8_sgpr9608 ; GFX9-NEXT: {{ $}}609 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY $sgpr8_sgpr9610 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec611 ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec612 ; GFX9-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, killed [[V_MOV_B32_e32_]], 0, killed [[V_MOV_B32_e32_1]], [[COPY]], implicit $exec613 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]614 ;615 ; GFX10-LABEL: name: no_fold_multiple_fi_v_cndmask_b32_e64616 ; GFX10: liveins: $sgpr8_sgpr9617 ; GFX10-NEXT: {{ $}}618 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY $sgpr8_sgpr9619 ; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec620 ; GFX10-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, %stack.0, 0, killed [[V_MOV_B32_e32_]], [[COPY]], implicit $exec621 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]622 ;623 ; GFX12-LABEL: name: no_fold_multiple_fi_v_cndmask_b32_e64624 ; GFX12: liveins: $sgpr8_sgpr9625 ; GFX12-NEXT: {{ $}}626 ; GFX12-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY $sgpr8_sgpr9627 ; GFX12-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec628 ; GFX12-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, %stack.0, 0, killed [[V_MOV_B32_e32_]], [[COPY]], implicit $exec629 ; GFX12-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]630 %0:sreg_64_xexec = COPY $sgpr8_sgpr9631 %1:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec632 %2:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec633 %3:vgpr_32 = V_CNDMASK_B32_e64 0, killed %1, 0, killed %2, %0, implicit $exec634 S_ENDPGM 0, implicit %3635 636...637 638---639name: no_fold_multiple_fi_v_cndmask_b32_e32640tracksRegLiveness: true641stack:642 - { id: 0, size: 64, alignment: 4 }643 - { id: 1, size: 32, alignment: 4 }644body: |645 bb.0:646 liveins: $sgpr8_sgpr9647 ; GFX9-LABEL: name: no_fold_multiple_fi_v_cndmask_b32_e32648 ; GFX9: liveins: $sgpr8_sgpr9649 ; GFX9-NEXT: {{ $}}650 ; GFX9-NEXT: $vcc = COPY $sgpr8_sgpr9651 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec652 ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec653 ; GFX9-NEXT: [[V_CNDMASK_B32_e32_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e32 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B32_e32_1]], implicit $vcc, implicit $exec654 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e32_]]655 ;656 ; GFX10-LABEL: name: no_fold_multiple_fi_v_cndmask_b32_e32657 ; GFX10: liveins: $sgpr8_sgpr9658 ; GFX10-NEXT: {{ $}}659 ; GFX10-NEXT: $vcc = COPY $sgpr8_sgpr9660 ; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec661 ; GFX10-NEXT: [[V_CNDMASK_B32_e32_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e32 %stack.0, killed [[V_MOV_B32_e32_]], implicit $vcc, implicit $exec662 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e32_]]663 ;664 ; GFX12-LABEL: name: no_fold_multiple_fi_v_cndmask_b32_e32665 ; GFX12: liveins: $sgpr8_sgpr9666 ; GFX12-NEXT: {{ $}}667 ; GFX12-NEXT: $vcc = COPY $sgpr8_sgpr9668 ; GFX12-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec669 ; GFX12-NEXT: [[V_CNDMASK_B32_e32_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e32 %stack.0, killed [[V_MOV_B32_e32_]], implicit $vcc, implicit $exec670 ; GFX12-NEXT: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e32_]]671 $vcc = COPY $sgpr8_sgpr9672 %1:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec673 %2:vgpr_32 = V_MOV_B32_e32 %stack.1, implicit $exec674 %3:vgpr_32 = V_CNDMASK_B32_e32 killed %1, killed %2, implicit $vcc, implicit $exec675 S_ENDPGM 0, implicit %3676 677...678