brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · c8915aa Raw
116 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme -verify-machineinstrs < %s | FileCheck %s3; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme -verify-machineinstrs -aarch64-new-sme-abi  < %s | FileCheck %s --check-prefix=CHECK-NEWLOWERING4 5declare void @private_za_callee()6 7; Ensure that we don't use tail call optimization when a lazy-save is required.8define void @disable_tailcallopt() "aarch64_inout_za" nounwind {9; CHECK-LABEL: disable_tailcallopt:10; CHECK:       // %bb.0:11; CHECK-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill12; CHECK-NEXT:    mov x29, sp13; CHECK-NEXT:    sub sp, sp, #1614; CHECK-NEXT:    rdsvl x8, #115; CHECK-NEXT:    mov x9, sp16; CHECK-NEXT:    msub x9, x8, x8, x917; CHECK-NEXT:    mov sp, x918; CHECK-NEXT:    sub x10, x29, #1619; CHECK-NEXT:    stp x9, x8, [x29, #-16]20; CHECK-NEXT:    msr TPIDR2_EL0, x1021; CHECK-NEXT:    bl private_za_callee22; CHECK-NEXT:    smstart za23; CHECK-NEXT:    mrs x8, TPIDR2_EL024; CHECK-NEXT:    sub x0, x29, #1625; CHECK-NEXT:    cbnz x8, .LBB0_226; CHECK-NEXT:  // %bb.1:27; CHECK-NEXT:    bl __arm_tpidr2_restore28; CHECK-NEXT:  .LBB0_2:29; CHECK-NEXT:    msr TPIDR2_EL0, xzr30; CHECK-NEXT:    mov sp, x2931; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload32; CHECK-NEXT:    ret33;34; CHECK-NEWLOWERING-LABEL: disable_tailcallopt:35; CHECK-NEWLOWERING:       // %bb.0:36; CHECK-NEWLOWERING-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill37; CHECK-NEWLOWERING-NEXT:    mov x29, sp38; CHECK-NEWLOWERING-NEXT:    sub sp, sp, #1639; CHECK-NEWLOWERING-NEXT:    rdsvl x8, #140; CHECK-NEWLOWERING-NEXT:    mov x9, sp41; CHECK-NEWLOWERING-NEXT:    msub x9, x8, x8, x942; CHECK-NEWLOWERING-NEXT:    mov sp, x943; CHECK-NEWLOWERING-NEXT:    sub x10, x29, #1644; CHECK-NEWLOWERING-NEXT:    stp x9, x8, [x29, #-16]45; CHECK-NEWLOWERING-NEXT:    msr TPIDR2_EL0, x1046; CHECK-NEWLOWERING-NEXT:    bl private_za_callee47; CHECK-NEWLOWERING-NEXT:    smstart za48; CHECK-NEWLOWERING-NEXT:    mrs x8, TPIDR2_EL049; CHECK-NEWLOWERING-NEXT:    sub x0, x29, #1650; CHECK-NEWLOWERING-NEXT:    cbnz x8, .LBB0_251; CHECK-NEWLOWERING-NEXT:  // %bb.1:52; CHECK-NEWLOWERING-NEXT:    bl __arm_tpidr2_restore53; CHECK-NEWLOWERING-NEXT:  .LBB0_2:54; CHECK-NEWLOWERING-NEXT:    msr TPIDR2_EL0, xzr55; CHECK-NEWLOWERING-NEXT:    mov sp, x2956; CHECK-NEWLOWERING-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload57; CHECK-NEWLOWERING-NEXT:    ret58  tail call void @private_za_callee()59  ret void60}61 62; Ensure we set up and restore the lazy save correctly for instructions which are lowered to lib calls63define fp128 @f128_call_za(fp128 %a, fp128 %b) "aarch64_inout_za" nounwind {64; CHECK-LABEL: f128_call_za:65; CHECK:       // %bb.0:66; CHECK-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill67; CHECK-NEXT:    mov x29, sp68; CHECK-NEXT:    sub sp, sp, #1669; CHECK-NEXT:    rdsvl x8, #170; CHECK-NEXT:    mov x9, sp71; CHECK-NEXT:    msub x9, x8, x8, x972; CHECK-NEXT:    mov sp, x973; CHECK-NEXT:    sub x10, x29, #1674; CHECK-NEXT:    stp x9, x8, [x29, #-16]75; CHECK-NEXT:    msr TPIDR2_EL0, x1076; CHECK-NEXT:    bl __addtf377; CHECK-NEXT:    smstart za78; CHECK-NEXT:    mrs x8, TPIDR2_EL079; CHECK-NEXT:    sub x0, x29, #1680; CHECK-NEXT:    cbnz x8, .LBB1_281; CHECK-NEXT:  // %bb.1:82; CHECK-NEXT:    bl __arm_tpidr2_restore83; CHECK-NEXT:  .LBB1_2:84; CHECK-NEXT:    msr TPIDR2_EL0, xzr85; CHECK-NEXT:    mov sp, x2986; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload87; CHECK-NEXT:    ret88;89; CHECK-NEWLOWERING-LABEL: f128_call_za:90; CHECK-NEWLOWERING:       // %bb.0:91; CHECK-NEWLOWERING-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill92; CHECK-NEWLOWERING-NEXT:    mov x29, sp93; CHECK-NEWLOWERING-NEXT:    sub sp, sp, #1694; CHECK-NEWLOWERING-NEXT:    rdsvl x8, #195; CHECK-NEWLOWERING-NEXT:    mov x9, sp96; CHECK-NEWLOWERING-NEXT:    msub x9, x8, x8, x997; CHECK-NEWLOWERING-NEXT:    mov sp, x998; CHECK-NEWLOWERING-NEXT:    sub x10, x29, #1699; CHECK-NEWLOWERING-NEXT:    stp x9, x8, [x29, #-16]100; CHECK-NEWLOWERING-NEXT:    msr TPIDR2_EL0, x10101; CHECK-NEWLOWERING-NEXT:    bl __addtf3102; CHECK-NEWLOWERING-NEXT:    smstart za103; CHECK-NEWLOWERING-NEXT:    mrs x8, TPIDR2_EL0104; CHECK-NEWLOWERING-NEXT:    sub x0, x29, #16105; CHECK-NEWLOWERING-NEXT:    cbnz x8, .LBB1_2106; CHECK-NEWLOWERING-NEXT:  // %bb.1:107; CHECK-NEWLOWERING-NEXT:    bl __arm_tpidr2_restore108; CHECK-NEWLOWERING-NEXT:  .LBB1_2:109; CHECK-NEWLOWERING-NEXT:    msr TPIDR2_EL0, xzr110; CHECK-NEWLOWERING-NEXT:    mov sp, x29111; CHECK-NEWLOWERING-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload112; CHECK-NEWLOWERING-NEXT:    ret113  %res = fadd fp128 %a, %b114  ret fp128 %res115}116