brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · 9f33c06 Raw
129 lines · plain
1# RUN: llc -mtriple=aarch64 -mattr=+sve -mattr=+sme -run-pass=aarch64-machine-sme-abi -verify-machineinstrs %s -o - | FileCheck %s2# RUN: llc -mtriple=aarch64 -mattr=+sve -mattr=+sme -aarch64-new-sme-abi %s -o - | FileCheck %s --check-prefix=CHECK-ASM3 4# This tests the unfortunate case the status flags ($nzcv) are live at the point5# we want to restore ZA. Currently, this is handled by saving them to a scratch6# register.7 8--- |9  define void @cmp_branch(i32 %0) "aarch64_inout_za" {10    tail call void @clobber()11    %2 = icmp sgt i32 %0, 10012    br i1 %2, label %3, label %413 14  3:                                                ; preds = %115    tail call void @inout_call() #316    br label %417 18  4:                                                ; preds = %3, %119    tail call void @inout_call() #320    ret void21  }22 23  declare void @clobber()24  declare void @inout_call() "aarch64_inout_za"25...26---27name:            cmp_branch28alignment:       429tracksRegLiveness: true30noPhis:          false31isSSA:           true32noVRegs:         false33hasFakeUses:     false34registers:35  - { id: 0, class: gpr32common }36  - { id: 1, class: gpr32 }37liveins:38  - { reg: '$w0' }39frameInfo:40  maxAlignment:    141  adjustsStack:    true42  hasCalls:        true43  maxCallFrameSize: 044  hasTailCall:     true45machineFunctionInfo: {}46body:             |47  ; CHECK-LABEL: name: cmp_branch48  ; CHECK: bb.0 (%ir-block.1):49  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)50  ; CHECK-NEXT:   liveins: $w051  ; CHECK-NEXT: {{  $}}52  ; CHECK-NEXT:   [[RDSVLI_XI:%[0-9]+]]:gpr64 = RDSVLI_XI 1, implicit $vg53  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr64 = COPY $sp54  ; CHECK-NEXT:   [[MSUBXrrr:%[0-9]+]]:gpr64 = MSUBXrrr [[RDSVLI_XI]], [[RDSVLI_XI]], [[COPY]]55  ; CHECK-NEXT:   $sp = COPY [[MSUBXrrr]]56  ; CHECK-NEXT:   STPXi [[MSUBXrrr]], [[RDSVLI_XI]], %stack.0, 057  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gpr32common = COPY $w058  ; CHECK-NEXT:   [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0, 0, 059  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gpr64 = COPY [[ADDXri]]60  ; CHECK-NEXT:   MSR 56965, [[COPY2]]61  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp62  ; CHECK-NEXT:   RequiresZASavePseudo63  ; CHECK-NEXT:   BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp64  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp65  ; CHECK-NEXT:   MSRpstatesvcrImm1 2, 1, implicit-def $nzcv66  ; CHECK-NEXT:   [[MRS1:%[0-9]+]]:gpr64 = MRS 56965, implicit-def $nzcv67  ; CHECK-NEXT:   $x0 = ADDXri %stack.0, 0, 068  ; CHECK-NEXT:   RestoreZAPseudo [[MRS1]], $x0, &__arm_tpidr2_restore, csr_aarch64_sme_abi_support_routines_preservemost_from_x069  ; CHECK-NEXT:   MSR 56965, $xzr70  ; CHECK-NEXT:   [[SUBSWri:%[0-9]+]]:gpr32 = SUBSWri [[COPY1]], 101, 0, implicit-def $nzcv71  ; CHECK-NEXT:   Bcc 11, %bb.2, implicit $nzcv72  ; CHECK-NEXT:   B %bb.173  ; CHECK-NEXT: {{  $}}74  ; CHECK-NEXT: bb.1 (%ir-block.3):75  ; CHECK-NEXT:   successors: %bb.2(0x80000000)76  ; CHECK-NEXT: {{  $}}77  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp78  ; CHECK-NEXT:   InOutZAUsePseudo79  ; CHECK-NEXT:   BL @inout_call, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp80  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp81  ; CHECK-NEXT: {{  $}}82  ; CHECK-NEXT: bb.2 (%ir-block.4):83  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp84  ; CHECK-NEXT:   InOutZAUsePseudo85  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp86  ; CHECK-NEXT:   TCRETURNdi @inout_call, 0, csr_aarch64_aapcs, implicit $sp87 88  bb.0 (%ir-block.1):89    successors: %bb.1, %bb.290    liveins: $w091 92    %0:gpr32common = COPY $w093    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp94    RequiresZASavePseudo95    BL @clobber, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp96    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp97    %1:gpr32 = SUBSWri %0, 101, 0, implicit-def $nzcv98    Bcc 11, %bb.2, implicit $nzcv99    B %bb.1100 101  bb.1 (%ir-block.3):102    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp103    InOutZAUsePseudo104    BL @inout_call, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp105    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp106 107  bb.2 (%ir-block.4):108    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp109    InOutZAUsePseudo110    ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp111    TCRETURNdi @inout_call, 0, csr_aarch64_aapcs, implicit $sp112...113 114# CHECK-ASM-LABEL: cmp_branch115#       CHECK-ASM:   msr TPIDR2_EL0, x10116#  CHECK-ASM-NEXT:   bl clobber117#  CHECK-ASM-NEXT:   smstart za118#  CHECK-ASM-NEXT:   mrs x8, TPIDR2_EL0119#  CHECK-ASM-NEXT:   sub x0, x29, #16120#  CHECK-ASM-NEXT:   cbnz x8, .LBB0_2121#       CHECK-ASM:   bl __arm_tpidr2_restore122#  CHECK-ASM-NEXT: .LBB0_2:123#  CHECK-ASM-NEXT:   cmp w20, #101124#  CHECK-ASM-NEXT:   msr TPIDR2_EL0, xzr125#  CHECK-ASM-NEXT:   b.lt .LBB0_4126#       CHECK-ASM:   bl inout_call127#  CHECK-ASM-NEXT: .LBB0_4:128#       CHECK-ASM:   b inout_call129