# 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 ...