brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.7 KiB · 3f174a6 Raw
228 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 62# RUN: llc -mtriple=aarch64 -mattr=+sve -mattr=+sme -run-pass=aarch64-machine-sme-abi -verify-machineinstrs %s -o - | FileCheck %s3 4--- |5  ; Test moving a state change to be before a $nzcv def6  define void @move_before_nzcv_def() "aarch64_inout_za" { ret void }7 8  ; Test moving a state change to a point where $x0 is live9  define void @move_to_x0_live() "aarch64_inout_za" { ret void }10 11  ; Test we don't move before a previous state change.12  define void @do_not_move_before_prior_state_change() "aarch64_za_state_agnostic" { ret void }13 14  ; Test we don't move into a call sequence.15  define void @do_not_move_into_call() "aarch64_inout_za" { ret void }16 17  declare void @clobber()18  declare void @inout_call() "aarch64_inout_za"19...20---21name:            move_before_nzcv_def22tracksRegLiveness: true23isSSA:             true24noVRegs:           false25body:             |26  bb.0:27 28    ; CHECK-LABEL: name: move_before_nzcv_def29    ; CHECK: [[RDSVLI_XI:%[0-9]+]]:gpr64 = RDSVLI_XI 1, implicit $vg30    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $sp31    ; CHECK-NEXT: [[MSUBXrrr:%[0-9]+]]:gpr64 = MSUBXrrr [[RDSVLI_XI]], [[RDSVLI_XI]], [[COPY]]32    ; CHECK-NEXT: $sp = COPY [[MSUBXrrr]]33    ; CHECK-NEXT: STPXi [[MSUBXrrr]], [[RDSVLI_XI]], %stack.0, 034    ; CHECK-NEXT: [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0, 0, 035    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY [[ADDXri]]36    ; CHECK-NEXT: MSR 56965, [[COPY1]]37    ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp38    ; CHECK-NEXT: RequiresZASavePseudo39    ; CHECK-NEXT: BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp40    ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp41    ; CHECK-NEXT: MSRpstatesvcrImm1 2, 1, implicit-def $nzcv42    ; CHECK-NEXT: [[MRS:%[0-9]+]]:gpr64 = MRS 56965, implicit-def $nzcv43    ; CHECK-NEXT: $x0 = ADDXri %stack.0, 0, 044    ; CHECK-NEXT: RestoreZAPseudo [[MRS]], $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x045    ; CHECK-NEXT: MSR 56965, $xzr46    ; CHECK-NEXT: $nzcv = IMPLICIT_DEF47    ; CHECK-NEXT: $zab0 = IMPLICIT_DEF48    ; CHECK-NEXT: FAKE_USE $nzcv49    ; CHECK-NEXT: RET_ReallyLR50    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp51    RequiresZASavePseudo52    BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp53    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp54 55    $nzcv = IMPLICIT_DEF56    $zab0 = IMPLICIT_DEF57    FAKE_USE $nzcv58 59    RET_ReallyLR60...61---62name:            move_to_x0_live63tracksRegLiveness: true64isSSA:             true65noVRegs:           false66body:             |67  bb.0:68 69    ; CHECK-LABEL: name: move_to_x0_live70    ; CHECK: [[RDSVLI_XI:%[0-9]+]]:gpr64 = RDSVLI_XI 1, implicit $vg71    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $sp72    ; CHECK-NEXT: [[MSUBXrrr:%[0-9]+]]:gpr64 = MSUBXrrr [[RDSVLI_XI]], [[RDSVLI_XI]], [[COPY]]73    ; CHECK-NEXT: $sp = COPY [[MSUBXrrr]]74    ; CHECK-NEXT: STPXi [[MSUBXrrr]], [[RDSVLI_XI]], %stack.0, 075    ; CHECK-NEXT: [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0, 0, 076    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY [[ADDXri]]77    ; CHECK-NEXT: MSR 56965, [[COPY1]]78    ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp79    ; CHECK-NEXT: RequiresZASavePseudo80    ; CHECK-NEXT: BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp81    ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp82    ; CHECK-NEXT: $x0 = IMPLICIT_DEF83    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr64 = COPY $x084    ; CHECK-NEXT: MSRpstatesvcrImm1 2, 1, implicit-def $nzcv85    ; CHECK-NEXT: [[MRS:%[0-9]+]]:gpr64 = MRS 56965, implicit-def $nzcv86    ; CHECK-NEXT: $x0 = ADDXri %stack.0, 0, 087    ; CHECK-NEXT: RestoreZAPseudo [[MRS]], $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x088    ; CHECK-NEXT: MSR 56965, $xzr89    ; CHECK-NEXT: $x0 = COPY [[COPY2]]90    ; CHECK-NEXT: $nzcv = IMPLICIT_DEF91    ; CHECK-NEXT: FAKE_USE $x092    ; CHECK-NEXT: $zab0 = IMPLICIT_DEF93    ; CHECK-NEXT: FAKE_USE $nzcv94    ; CHECK-NEXT: RET_ReallyLR95    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp96    RequiresZASavePseudo97    BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp98    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp99 100    $x0 = IMPLICIT_DEF101 102    $nzcv = IMPLICIT_DEF103    FAKE_USE $x0104 105    $zab0 = IMPLICIT_DEF106    FAKE_USE $nzcv107 108    RET_ReallyLR109...110---111name:            do_not_move_before_prior_state_change112tracksRegLiveness: true113isSSA:             true114noVRegs:           false115body:             |116  ; CHECK-LABEL: name: do_not_move_before_prior_state_change117  ; CHECK: bb.0:118  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)119  ; CHECK-NEXT: {{  $}}120  ; CHECK-NEXT:   BL &__arm_sme_state_size, csr_aarch64_sme_abi_support_routines_preservemost_from_x1, implicit-def $lr, implicit $sp, implicit-def $x0121  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr64 = COPY $x0122  ; CHECK-NEXT:   $sp = SUBXrx64 $sp, [[COPY]], 24123  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr64 = COPY $sp124  ; CHECK-NEXT:   $nzcv = IMPLICIT_DEF125  ; CHECK-NEXT:   $zab0 = IMPLICIT_DEF126  ; CHECK-NEXT:   [[MRS:%[0-9]+]]:gpr64 = MRS 55824, implicit-def $nzcv, implicit $nzcv127  ; CHECK-NEXT:   $x0 = COPY [[COPY1]]128  ; CHECK-NEXT:   BL &__arm_sme_save, csr_aarch64_sme_abi_support_routines_preservemost_from_x1, implicit-def $lr, implicit $sp, implicit $x0129  ; CHECK-NEXT:   MSR 55824, [[MRS]], implicit-def $nzcv130  ; CHECK-NEXT:   Bcc 2, %bb.1, implicit $nzcv131  ; CHECK-NEXT:   B %bb.2132  ; CHECK-NEXT: {{  $}}133  ; CHECK-NEXT: bb.1:134  ; CHECK-NEXT:   liveins: $nzcv135  ; CHECK-NEXT: {{  $}}136  ; CHECK-NEXT:   FAKE_USE $nzcv137  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp138  ; CHECK-NEXT:   RequiresZASavePseudo139  ; CHECK-NEXT:   BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp140  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp141  ; CHECK-NEXT:   $x0 = COPY [[COPY1]]142  ; CHECK-NEXT:   BL &__arm_sme_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x1, implicit-def $lr, implicit $sp, implicit $x0143  ; CHECK-NEXT:   RET_ReallyLR144  ; CHECK-NEXT: {{  $}}145  ; CHECK-NEXT: bb.2:146  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp147  ; CHECK-NEXT:   RequiresZASavePseudo148  ; CHECK-NEXT:   BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp149  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp150  ; CHECK-NEXT:   $x0 = COPY [[COPY1]]151  ; CHECK-NEXT:   BL &__arm_sme_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x1, implicit-def $lr, implicit $sp, implicit $x0152  ; CHECK-NEXT:   RET_ReallyLR153  bb.0:154    successors: %bb.1, %bb.2155 156    ; The insertion point can move before the $nzcv def (as that would require157    ; moving before a $zab0 def -- that requires the ACTIVE state).158    $nzcv = IMPLICIT_DEF159    $zab0 = IMPLICIT_DEF160    Bcc 2, %bb.1, implicit $nzcv161    B %bb.2162  ; bb.1 and bb.2 both require ZA saved on entry (to force bb.0's exit bundle to163  ; pick the LOCAL_SAVED state).164  bb.1:165    liveins: $nzcv166    FAKE_USE $nzcv167 168    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp169    RequiresZASavePseudo170    BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp171    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp172 173    RET_ReallyLR174  bb.2:175    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp176    RequiresZASavePseudo177    BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp178    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp179 180    RET_ReallyLR181...182---183name:            do_not_move_into_call184tracksRegLiveness: true185isSSA:             true186noVRegs:           false187body:             |188  bb.0:189 190    ; CHECK-LABEL: name: do_not_move_into_call191    ; CHECK: [[RDSVLI_XI:%[0-9]+]]:gpr64 = RDSVLI_XI 1, implicit $vg192    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $sp193    ; CHECK-NEXT: [[MSUBXrrr:%[0-9]+]]:gpr64 = MSUBXrrr [[RDSVLI_XI]], [[RDSVLI_XI]], [[COPY]]194    ; CHECK-NEXT: $sp = COPY [[MSUBXrrr]]195    ; CHECK-NEXT: STPXi [[MSUBXrrr]], [[RDSVLI_XI]], %stack.0, 0196    ; CHECK-NEXT: [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0, 0, 0197    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY [[ADDXri]]198    ; CHECK-NEXT: MSR 56965, [[COPY1]]199    ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp200    ; CHECK-NEXT: RequiresZASavePseudo201    ; CHECK-NEXT: BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp202    ; CHECK-NEXT: $nzcv = IMPLICIT_DEF203    ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp204    ; CHECK-NEXT: [[MRS:%[0-9]+]]:gpr64 = MRS 55824, implicit-def $nzcv, implicit $nzcv205    ; CHECK-NEXT: MSRpstatesvcrImm1 2, 1, implicit-def $nzcv206    ; CHECK-NEXT: [[MRS1:%[0-9]+]]:gpr64 = MRS 56965, implicit-def $nzcv207    ; CHECK-NEXT: $x0 = ADDXri %stack.0, 0, 0208    ; CHECK-NEXT: RestoreZAPseudo [[MRS1]], $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x0209    ; CHECK-NEXT: MSR 56965, $xzr210    ; CHECK-NEXT: MSR 55824, [[MRS]], implicit-def $nzcv211    ; CHECK-NEXT: $zab0 = IMPLICIT_DEF212    ; CHECK-NEXT: FAKE_USE $nzcv213    ; CHECK-NEXT: RET_ReallyLR214    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp215    RequiresZASavePseudo216    BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp217 218    ; This is artificial test where NZCV is def'd inside a call, so we can't219    ; move the insert point before it's definition.220    $nzcv = IMPLICIT_DEF221    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp222 223    $zab0 = IMPLICIT_DEF224    FAKE_USE $nzcv225 226    RET_ReallyLR227...228