| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6 |
| # RUN: llc -mtriple=amdgcn -mcpu=gfx90a -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck %s |
| |
| --- |
| name: fold_frame_index_av_mov_b32_imm_pseudo_from_s_mov_b32_fi_to_av |
| tracksRegLiveness: true |
| frameInfo: |
| maxAlignment: 4 |
| localFrameSize: 16384 |
| stack: |
| - { id: 0, size: 16384, alignment: 4, local-offset: 0 } |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: fold_frame_index_av_mov_b32_imm_pseudo_from_s_mov_b32_fi_to_av |
| ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.0 |
| ; CHECK-NEXT: [[AV_MOV_:%[0-9]+]]:av_32 = AV_MOV_B32_IMM_PSEUDO [[S_MOV_B32_]], implicit $exec |
| ; CHECK-NEXT: SI_RETURN implicit [[AV_MOV_]] |
| %0:sreg_32 = S_MOV_B32 %stack.0 |
| %1:av_32 = AV_MOV_B32_IMM_PSEUDO %0, implicit $exec |
| SI_RETURN implicit %1 |
| |
| ... |
| |
| --- |
| name: fold_frame_index_av_mov_b32_imm_pseudo_from_s_mov_b32_fi_to_v |
| tracksRegLiveness: true |
| frameInfo: |
| maxAlignment: 4 |
| localFrameSize: 16384 |
| stack: |
| - { id: 0, size: 16384, alignment: 4, local-offset: 0 } |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: fold_frame_index_av_mov_b32_imm_pseudo_from_s_mov_b32_fi_to_v |
| ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.0 |
| ; CHECK-NEXT: [[AV_MOV_:%[0-9]+]]:av_32 = AV_MOV_B32_IMM_PSEUDO [[S_MOV_B32_]], implicit $exec |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[AV_MOV_]], implicit $exec |
| ; CHECK-NEXT: $vgpr0 = COPY [[COPY]] |
| ; CHECK-NEXT: SI_RETURN implicit $vgpr0 |
| %0:sreg_32 = S_MOV_B32 %stack.0 |
| %1:av_32 = AV_MOV_B32_IMM_PSEUDO %0, implicit $exec |
| %2:vgpr_32 = COPY %1, implicit $exec |
| $vgpr0 = COPY %2 |
| SI_RETURN implicit $vgpr0 |
| |
| ... |
| |
| --- |
| name: fold_frame_index_av_mov_b32_imm_pseudo_from_s_mov_b32_lit_to_v |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: fold_frame_index_av_mov_b32_imm_pseudo_from_s_mov_b32_lit_to_v |
| ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1234 |
| ; CHECK-NEXT: [[AV_MOV_:%[0-9]+]]:av_32 = AV_MOV_B32_IMM_PSEUDO [[S_MOV_B32_]], implicit $exec |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[AV_MOV_]], implicit $exec |
| ; CHECK-NEXT: $vgpr0 = COPY [[COPY]] |
| ; CHECK-NEXT: SI_RETURN implicit $vgpr0 |
| %0:sreg_32 = S_MOV_B32 1234 |
| %1:av_32 = AV_MOV_B32_IMM_PSEUDO %0, implicit $exec |
| %2:vgpr_32 = COPY %1, implicit $exec |
| $vgpr0 = COPY %2 |
| SI_RETURN implicit $vgpr0 |
| |
| ... |
| |
| --- |
| name: fold_frame_index_av_mov_b32_imm_pseudo_from_s_mov_b32_imm_to_v |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: fold_frame_index_av_mov_b32_imm_pseudo_from_s_mov_b32_imm_to_v |
| ; CHECK: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8, implicit $exec |
| ; CHECK-NEXT: $vgpr0 = COPY [[V_MOV_B32_e32_]] |
| ; CHECK-NEXT: SI_RETURN implicit $vgpr0 |
| %0:sreg_32 = S_MOV_B32 8 |
| %1:av_32 = AV_MOV_B32_IMM_PSEUDO %0, implicit $exec |
| %2:vgpr_32 = COPY %1, implicit $exec |
| $vgpr0 = COPY %2 |
| SI_RETURN implicit $vgpr0 |
| |
| ... |
| |
| --- |
| name: fold_frame_index_av_regression_0 |
| tracksRegLiveness: true |
| frameInfo: |
| maxAlignment: 4 |
| localFrameSize: 16384 |
| stack: |
| - { id: 0, size: 16384, alignment: 4, local-offset: 0 } |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: fold_frame_index_av_regression_0 |
| ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.0 |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]], implicit $exec |
| ; CHECK-NEXT: $vgpr0 = COPY [[COPY]] |
| ; CHECK-NEXT: SI_RETURN implicit $vgpr0 |
| %0:sreg_32 = S_MOV_B32 %stack.0 |
| %1:av_32 = COPY %0 |
| %2:vgpr_32 = COPY %1, implicit $exec |
| $vgpr0 = COPY %2 |
| SI_RETURN implicit $vgpr0 |
| |
| ... |
| |
| --- |
| name: fold_frame_index_av_regression_1 |
| tracksRegLiveness: true |
| frameInfo: |
| maxAlignment: 4 |
| localFrameSize: 16384 |
| stack: |
| - { id: 0, size: 16384, alignment: 4, local-offset: 0 } |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: fold_frame_index_av_regression_1 |
| ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.0 |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]], implicit $exec |
| ; CHECK-NEXT: $vgpr0 = COPY [[COPY]] |
| ; CHECK-NEXT: SI_RETURN implicit $vgpr0 |
| %0:sreg_32 = S_MOV_B32 %stack.0 |
| %1:sreg_32 = S_MOV_B32 killed %0 |
| %2:sreg_64 = S_MOV_B64 0 |
| %3:av_32 = COPY %1 |
| %4:vgpr_32 = COPY %3, implicit $exec |
| $vgpr0 = COPY %4 |
| SI_RETURN implicit $vgpr0 |
| |
| ... |
| |