70 lines · plain
1; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme -verify-machineinstrs < %s | FileCheck %s2; RUN: llc -mtriple=aarch64-apple-darwin -mattr=+sme -verify-machineinstrs < %s | FileCheck %s --check-prefix=DARWIN3; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme -verify-machineinstrs -stop-after=finalize-isel < %s | FileCheck %s --check-prefix=CHECK-CSRMASK4; RUN: llc -mtriple=aarch64-apple-darwin -mattr=+sme -verify-machineinstrs -stop-after=finalize-isel < %s | FileCheck %s --check-prefix=CHECK-CSRMASK5 6; Test that the PCS attribute is accepted and uses the correct register mask.7;8 9define void @test_sme_calling_convention_x0() nounwind {10; CHECK-LABEL: test_sme_calling_convention_x0:11; CHECK: // %bb.0:12; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill13; CHECK-NEXT: bl __arm_tpidr2_save14; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload15; CHECK-NEXT: ret16; DARWIN-LABEL: test_sme_calling_convention_x0:17; DARWIN: stp x29, x30, [sp, #-16]!18; DARWIN: bl ___arm_tpidr2_save19; DARWIN: ldp x29, x30, [sp], #1620; DARWIN: ret21;22; CHECK-CSRMASK-LABEL: name: test_sme_calling_convention_x023; CHECK-CSRMASK: BL @__arm_tpidr2_save, csr_aarch64_sme_abi_support_routines_preservemost_from_x024 call aarch64_sme_preservemost_from_x0 void @__arm_tpidr2_save()25 ret void26}27 28define i64 @test_sme_calling_convention_x1() nounwind {29; CHECK-LABEL: test_sme_calling_convention_x1:30; CHECK: // %bb.0:31; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill32; CHECK-NEXT: bl __arm_get_current_vg33; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload34; CHECK-NEXT: ret35; DARWIN-LABEL: test_sme_calling_convention_x1:36; DARWIN: stp x29, x30, [sp, #-16]!37; DARWIN: bl ___arm_get_current_vg38; DARWIN: ldp x29, x30, [sp], #1639; DARWIN: ret40;41; CHECK-CSRMASK-LABEL: name: test_sme_calling_convention_x142; CHECK-CSRMASK: BL @__arm_get_current_vg, csr_aarch64_sme_abi_support_routines_preservemost_from_x143 %vg = call aarch64_sme_preservemost_from_x1 i64 @__arm_get_current_vg()44 ret i64 %vg45}46 47define i64 @test_sme_calling_convention_x2() nounwind {48; CHECK-LABEL: test_sme_calling_convention_x2:49; CHECK: // %bb.0:50; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill51; CHECK-NEXT: bl __arm_sme_state52; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload53; CHECK-NEXT: ret54; DARWIN-LABEL: test_sme_calling_convention_x2:55; DARWIN: stp x29, x30, [sp, #-16]!56; DARWIN: bl ___arm_sme_state57; DARWIN: ldp x29, x30, [sp], #1658; DARWIN: ret59;60; CHECK-CSRMASK-LABEL: name: test_sme_calling_convention_x261; CHECK-CSRMASK: BL @__arm_sme_state, csr_aarch64_sme_abi_support_routines_preservemost_from_x262 %pstate = call aarch64_sme_preservemost_from_x2 {i64, i64} @__arm_sme_state()63 %pstate.sm = extractvalue {i64, i64} %pstate, 064 ret i64 %pstate.sm65}66 67declare aarch64_sme_preservemost_from_x0 void @__arm_tpidr2_save()68declare aarch64_sme_preservemost_from_x1 i64 @__arm_get_current_vg()69declare aarch64_sme_preservemost_from_x2 {i64, i64} @__arm_sme_state()70