413 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mattr=+sme2 < %s | FileCheck %s --check-prefixes=CHECK-COMMON,CHECK3; RUN: llc -mattr=+sme2 < %s -aarch64-new-sme-abi | FileCheck %s --check-prefixes=CHECK-COMMON,CHECK-NEWLOWERING4 5target triple = "aarch64"6 7declare i64 @private_za_decl(i64)8declare void @private_za()9declare i64 @agnostic_decl(i64) "aarch64_za_state_agnostic"10 11; No calls. Test that no buffer is allocated.12define i64 @agnostic_caller_no_callees(ptr %ptr) nounwind "aarch64_za_state_agnostic" {13; CHECK-COMMON-LABEL: agnostic_caller_no_callees:14; CHECK-COMMON: // %bb.0:15; CHECK-COMMON-NEXT: ldr x0, [x0]16; CHECK-COMMON-NEXT: ret17 %v = load i64, ptr %ptr18 ret i64 %v19}20 21; agnostic-ZA -> private-ZA22;23; Test that a buffer is allocated and that the appropriate save/restore calls are24; inserted for calls to non-agnostic functions and that the arg/result registers are25; preserved by the register allocator.26define i64 @agnostic_caller_private_za_callee(i64 %v) nounwind "aarch64_za_state_agnostic" {27; CHECK-LABEL: agnostic_caller_private_za_callee:28; CHECK: // %bb.0:29; CHECK-NEXT: stp x29, x30, [sp, #-32]! // 16-byte Folded Spill30; CHECK-NEXT: str x19, [sp, #16] // 8-byte Spill31; CHECK-NEXT: mov x29, sp32; CHECK-NEXT: mov x8, x033; CHECK-NEXT: bl __arm_sme_state_size34; CHECK-NEXT: sub sp, sp, x035; CHECK-NEXT: mov x19, sp36; CHECK-NEXT: mov x0, x1937; CHECK-NEXT: bl __arm_sme_save38; CHECK-NEXT: mov x0, x839; CHECK-NEXT: bl private_za_decl40; CHECK-NEXT: mov x1, x041; CHECK-NEXT: mov x0, x1942; CHECK-NEXT: bl __arm_sme_restore43; CHECK-NEXT: mov x0, x1944; CHECK-NEXT: bl __arm_sme_save45; CHECK-NEXT: mov x0, x146; CHECK-NEXT: bl private_za_decl47; CHECK-NEXT: mov x1, x048; CHECK-NEXT: mov x0, x1949; CHECK-NEXT: bl __arm_sme_restore50; CHECK-NEXT: mov x0, x151; CHECK-NEXT: mov sp, x2952; CHECK-NEXT: ldr x19, [sp, #16] // 8-byte Reload53; CHECK-NEXT: ldp x29, x30, [sp], #32 // 16-byte Folded Reload54; CHECK-NEXT: ret55;56; CHECK-NEWLOWERING-LABEL: agnostic_caller_private_za_callee:57; CHECK-NEWLOWERING: // %bb.0:58; CHECK-NEWLOWERING-NEXT: stp x29, x30, [sp, #-32]! // 16-byte Folded Spill59; CHECK-NEWLOWERING-NEXT: str x19, [sp, #16] // 8-byte Spill60; CHECK-NEWLOWERING-NEXT: mov x29, sp61; CHECK-NEWLOWERING-NEXT: mov x8, x062; CHECK-NEWLOWERING-NEXT: bl __arm_sme_state_size63; CHECK-NEWLOWERING-NEXT: sub sp, sp, x064; CHECK-NEWLOWERING-NEXT: mov x19, sp65; CHECK-NEWLOWERING-NEXT: mov x0, x1966; CHECK-NEWLOWERING-NEXT: bl __arm_sme_save67; CHECK-NEWLOWERING-NEXT: mov x0, x868; CHECK-NEWLOWERING-NEXT: bl private_za_decl69; CHECK-NEWLOWERING-NEXT: bl private_za_decl70; CHECK-NEWLOWERING-NEXT: mov x8, x071; CHECK-NEWLOWERING-NEXT: mov x0, x1972; CHECK-NEWLOWERING-NEXT: bl __arm_sme_restore73; CHECK-NEWLOWERING-NEXT: mov x0, x874; CHECK-NEWLOWERING-NEXT: mov sp, x2975; CHECK-NEWLOWERING-NEXT: ldr x19, [sp, #16] // 8-byte Reload76; CHECK-NEWLOWERING-NEXT: ldp x29, x30, [sp], #32 // 16-byte Folded Reload77; CHECK-NEWLOWERING-NEXT: ret78 %res = call i64 @private_za_decl(i64 %v)79 %res2 = call i64 @private_za_decl(i64 %res)80 ret i64 %res281}82 83; agnostic-ZA -> agnostic-ZA84;85; Should not result in save/restore code.86define i64 @agnostic_caller_agnostic_callee(i64 %v) nounwind "aarch64_za_state_agnostic" {87; CHECK-COMMON-LABEL: agnostic_caller_agnostic_callee:88; CHECK-COMMON: // %bb.0:89; CHECK-COMMON-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill90; CHECK-COMMON-NEXT: bl agnostic_decl91; CHECK-COMMON-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload92; CHECK-COMMON-NEXT: ret93 %res = call i64 @agnostic_decl(i64 %v)94 ret i64 %res95}96 97; shared-ZA -> agnostic-ZA98;99; Should not result in lazy-save or save of ZT0100define i64 @shared_caller_agnostic_callee(i64 %v) nounwind "aarch64_inout_za" "aarch64_inout_zt0" {101; CHECK-COMMON-LABEL: shared_caller_agnostic_callee:102; CHECK-COMMON: // %bb.0:103; CHECK-COMMON-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill104; CHECK-COMMON-NEXT: bl agnostic_decl105; CHECK-COMMON-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload106; CHECK-COMMON-NEXT: ret107 %res = call i64 @agnostic_decl(i64 %v)108 ret i64 %res109}110 111; agnostic-ZA + streaming -> private-ZA + non-streaming112define i64 @streaming_agnostic_caller_nonstreaming_private_za_callee(i64 %v) nounwind "aarch64_za_state_agnostic" "aarch64_pstate_sm_enabled" {113; CHECK-LABEL: streaming_agnostic_caller_nonstreaming_private_za_callee:114; CHECK: // %bb.0:115; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill116; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill117; CHECK-NEXT: mov x8, x0118; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill119; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill120; CHECK-NEXT: stp x29, x30, [sp, #64] // 16-byte Folded Spill121; CHECK-NEXT: add x29, sp, #64122; CHECK-NEXT: stp x20, x19, [sp, #80] // 16-byte Folded Spill123; CHECK-NEXT: bl __arm_sme_state_size124; CHECK-NEXT: sub sp, sp, x0125; CHECK-NEXT: mov x20, sp126; CHECK-NEXT: mov x0, x20127; CHECK-NEXT: bl __arm_sme_save128; CHECK-NEXT: smstop sm129; CHECK-NEXT: mov x0, x8130; CHECK-NEXT: bl private_za_decl131; CHECK-NEXT: mov x1, x0132; CHECK-NEXT: smstart sm133; CHECK-NEXT: mov x0, x20134; CHECK-NEXT: bl __arm_sme_restore135; CHECK-NEXT: mov x0, x20136; CHECK-NEXT: bl __arm_sme_save137; CHECK-NEXT: smstop sm138; CHECK-NEXT: mov x0, x1139; CHECK-NEXT: bl private_za_decl140; CHECK-NEXT: mov x1, x0141; CHECK-NEXT: smstart sm142; CHECK-NEXT: mov x0, x20143; CHECK-NEXT: bl __arm_sme_restore144; CHECK-NEXT: mov x0, x1145; CHECK-NEXT: sub sp, x29, #64146; CHECK-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload147; CHECK-NEXT: ldp x29, x30, [sp, #64] // 16-byte Folded Reload148; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload149; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload150; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload151; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload152; CHECK-NEXT: ret153;154; CHECK-NEWLOWERING-LABEL: streaming_agnostic_caller_nonstreaming_private_za_callee:155; CHECK-NEWLOWERING: // %bb.0:156; CHECK-NEWLOWERING-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill157; CHECK-NEWLOWERING-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill158; CHECK-NEWLOWERING-NEXT: mov x8, x0159; CHECK-NEWLOWERING-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill160; CHECK-NEWLOWERING-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill161; CHECK-NEWLOWERING-NEXT: stp x29, x30, [sp, #64] // 16-byte Folded Spill162; CHECK-NEWLOWERING-NEXT: add x29, sp, #64163; CHECK-NEWLOWERING-NEXT: stp x20, x19, [sp, #80] // 16-byte Folded Spill164; CHECK-NEWLOWERING-NEXT: bl __arm_sme_state_size165; CHECK-NEWLOWERING-NEXT: sub sp, sp, x0166; CHECK-NEWLOWERING-NEXT: mov x20, sp167; CHECK-NEWLOWERING-NEXT: mov x0, x20168; CHECK-NEWLOWERING-NEXT: bl __arm_sme_save169; CHECK-NEWLOWERING-NEXT: smstop sm170; CHECK-NEWLOWERING-NEXT: mov x0, x8171; CHECK-NEWLOWERING-NEXT: bl private_za_decl172; CHECK-NEWLOWERING-NEXT: bl private_za_decl173; CHECK-NEWLOWERING-NEXT: smstart sm174; CHECK-NEWLOWERING-NEXT: mov x8, x0175; CHECK-NEWLOWERING-NEXT: mov x0, x20176; CHECK-NEWLOWERING-NEXT: bl __arm_sme_restore177; CHECK-NEWLOWERING-NEXT: mov x0, x8178; CHECK-NEWLOWERING-NEXT: sub sp, x29, #64179; CHECK-NEWLOWERING-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload180; CHECK-NEWLOWERING-NEXT: ldp x29, x30, [sp, #64] // 16-byte Folded Reload181; CHECK-NEWLOWERING-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload182; CHECK-NEWLOWERING-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload183; CHECK-NEWLOWERING-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload184; CHECK-NEWLOWERING-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload185; CHECK-NEWLOWERING-NEXT: ret186 %res = call i64 @private_za_decl(i64 %v)187 %res2 = call i64 @private_za_decl(i64 %res)188 ret i64 %res2189}190 191; agnostic-ZA + streaming-compatible -> private-ZA + non-streaming192define i64 @streaming_compatible_agnostic_caller_nonstreaming_private_za_callee(i64 %v) nounwind "aarch64_za_state_agnostic" "aarch64_pstate_sm_compatible" {193; CHECK-LABEL: streaming_compatible_agnostic_caller_nonstreaming_private_za_callee:194; CHECK: // %bb.0:195; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill196; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill197; CHECK-NEXT: mov x8, x0198; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill199; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill200; CHECK-NEXT: stp x29, x30, [sp, #64] // 16-byte Folded Spill201; CHECK-NEXT: add x29, sp, #64202; CHECK-NEXT: stp x20, x19, [sp, #80] // 16-byte Folded Spill203; CHECK-NEXT: mrs x20, SVCR204; CHECK-NEXT: bl __arm_sme_state_size205; CHECK-NEXT: sub sp, sp, x0206; CHECK-NEXT: mov x19, sp207; CHECK-NEXT: mov x0, x19208; CHECK-NEXT: bl __arm_sme_save209; CHECK-NEXT: tbz w20, #0, .LBB5_2210; CHECK-NEXT: // %bb.1:211; CHECK-NEXT: smstop sm212; CHECK-NEXT: .LBB5_2:213; CHECK-NEXT: mov x0, x8214; CHECK-NEXT: bl private_za_decl215; CHECK-NEXT: mov x1, x0216; CHECK-NEXT: tbz w20, #0, .LBB5_4217; CHECK-NEXT: // %bb.3:218; CHECK-NEXT: smstart sm219; CHECK-NEXT: .LBB5_4:220; CHECK-NEXT: mov x0, x19221; CHECK-NEXT: bl __arm_sme_restore222; CHECK-NEXT: mov x0, x19223; CHECK-NEXT: bl __arm_sme_save224; CHECK-NEXT: tbz w20, #0, .LBB5_6225; CHECK-NEXT: // %bb.5:226; CHECK-NEXT: smstop sm227; CHECK-NEXT: .LBB5_6:228; CHECK-NEXT: mov x0, x1229; CHECK-NEXT: bl private_za_decl230; CHECK-NEXT: mov x1, x0231; CHECK-NEXT: tbz w20, #0, .LBB5_8232; CHECK-NEXT: // %bb.7:233; CHECK-NEXT: smstart sm234; CHECK-NEXT: .LBB5_8:235; CHECK-NEXT: mov x0, x19236; CHECK-NEXT: bl __arm_sme_restore237; CHECK-NEXT: mov x0, x1238; CHECK-NEXT: sub sp, x29, #64239; CHECK-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload240; CHECK-NEXT: ldp x29, x30, [sp, #64] // 16-byte Folded Reload241; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload242; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload243; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload244; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload245; CHECK-NEXT: ret246;247; CHECK-NEWLOWERING-LABEL: streaming_compatible_agnostic_caller_nonstreaming_private_za_callee:248; CHECK-NEWLOWERING: // %bb.0:249; CHECK-NEWLOWERING-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill250; CHECK-NEWLOWERING-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill251; CHECK-NEWLOWERING-NEXT: mov x8, x0252; CHECK-NEWLOWERING-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill253; CHECK-NEWLOWERING-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill254; CHECK-NEWLOWERING-NEXT: stp x29, x30, [sp, #64] // 16-byte Folded Spill255; CHECK-NEWLOWERING-NEXT: add x29, sp, #64256; CHECK-NEWLOWERING-NEXT: stp x20, x19, [sp, #80] // 16-byte Folded Spill257; CHECK-NEWLOWERING-NEXT: bl __arm_sme_state_size258; CHECK-NEWLOWERING-NEXT: sub sp, sp, x0259; CHECK-NEWLOWERING-NEXT: mov x19, sp260; CHECK-NEWLOWERING-NEXT: mrs x20, SVCR261; CHECK-NEWLOWERING-NEXT: mov x0, x19262; CHECK-NEWLOWERING-NEXT: bl __arm_sme_save263; CHECK-NEWLOWERING-NEXT: tbz w20, #0, .LBB5_2264; CHECK-NEWLOWERING-NEXT: // %bb.1:265; CHECK-NEWLOWERING-NEXT: smstop sm266; CHECK-NEWLOWERING-NEXT: .LBB5_2:267; CHECK-NEWLOWERING-NEXT: mov x0, x8268; CHECK-NEWLOWERING-NEXT: bl private_za_decl269; CHECK-NEWLOWERING-NEXT: bl private_za_decl270; CHECK-NEWLOWERING-NEXT: tbz w20, #0, .LBB5_4271; CHECK-NEWLOWERING-NEXT: // %bb.3:272; CHECK-NEWLOWERING-NEXT: smstart sm273; CHECK-NEWLOWERING-NEXT: .LBB5_4:274; CHECK-NEWLOWERING-NEXT: mov x8, x0275; CHECK-NEWLOWERING-NEXT: mov x0, x19276; CHECK-NEWLOWERING-NEXT: bl __arm_sme_restore277; CHECK-NEWLOWERING-NEXT: mov x0, x8278; CHECK-NEWLOWERING-NEXT: sub sp, x29, #64279; CHECK-NEWLOWERING-NEXT: ldp x20, x19, [sp, #80] // 16-byte Folded Reload280; CHECK-NEWLOWERING-NEXT: ldp x29, x30, [sp, #64] // 16-byte Folded Reload281; CHECK-NEWLOWERING-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload282; CHECK-NEWLOWERING-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload283; CHECK-NEWLOWERING-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload284; CHECK-NEWLOWERING-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload285; CHECK-NEWLOWERING-NEXT: ret286 %res = call i64 @private_za_decl(i64 %v)287 %res2 = call i64 @private_za_decl(i64 %res)288 ret i64 %res2289}290 291declare i64 @many_args_private_za_callee(292 i64, i64, i64, i64, i64, i64, i64, i64, i64, i64)293 294; In this example some arguments are passed on the stack, which decrements the295; stack pointer before the call -- in this test the call to __arm_sme_save296; should occur _before_ the stack decrement.297define i64 @test_many_callee_arguments(298; CHECK-LABEL: test_many_callee_arguments:299; CHECK: // %bb.0:300; CHECK-NEXT: stp x29, x30, [sp, #-32]! // 16-byte Folded Spill301; CHECK-NEXT: str x19, [sp, #16] // 8-byte Spill302; CHECK-NEXT: mov x29, sp303; CHECK-NEXT: mov x8, x0304; CHECK-NEXT: bl __arm_sme_state_size305; CHECK-NEXT: sub sp, sp, x0306; CHECK-NEXT: ldp x9, x10, [x29, #32]307; CHECK-NEXT: mov x19, sp308; CHECK-NEXT: mov x0, x19309; CHECK-NEXT: bl __arm_sme_save310; CHECK-NEXT: stp x9, x10, [sp, #-16]!311; CHECK-NEXT: mov x0, x8312; CHECK-NEXT: bl many_args_private_za_callee313; CHECK-NEXT: add sp, sp, #16314; CHECK-NEXT: mov x1, x0315; CHECK-NEXT: mov x0, x19316; CHECK-NEXT: bl __arm_sme_restore317; CHECK-NEXT: mov x0, x1318; CHECK-NEXT: mov sp, x29319; CHECK-NEXT: ldr x19, [sp, #16] // 8-byte Reload320; CHECK-NEXT: ldp x29, x30, [sp], #32 // 16-byte Folded Reload321; CHECK-NEXT: ret322;323; CHECK-NEWLOWERING-LABEL: test_many_callee_arguments:324; CHECK-NEWLOWERING: // %bb.0:325; CHECK-NEWLOWERING-NEXT: stp x29, x30, [sp, #-32]! // 16-byte Folded Spill326; CHECK-NEWLOWERING-NEXT: str x19, [sp, #16] // 8-byte Spill327; CHECK-NEWLOWERING-NEXT: mov x29, sp328; CHECK-NEWLOWERING-NEXT: mov x8, x0329; CHECK-NEWLOWERING-NEXT: bl __arm_sme_state_size330; CHECK-NEWLOWERING-NEXT: sub sp, sp, x0331; CHECK-NEWLOWERING-NEXT: mov x19, sp332; CHECK-NEWLOWERING-NEXT: ldp x9, x10, [x29, #32]333; CHECK-NEWLOWERING-NEXT: mov x0, x19334; CHECK-NEWLOWERING-NEXT: bl __arm_sme_save335; CHECK-NEWLOWERING-NEXT: stp x9, x10, [sp, #-16]!336; CHECK-NEWLOWERING-NEXT: mov x0, x8337; CHECK-NEWLOWERING-NEXT: bl many_args_private_za_callee338; CHECK-NEWLOWERING-NEXT: add sp, sp, #16339; CHECK-NEWLOWERING-NEXT: mov x8, x0340; CHECK-NEWLOWERING-NEXT: mov x0, x19341; CHECK-NEWLOWERING-NEXT: bl __arm_sme_restore342; CHECK-NEWLOWERING-NEXT: mov x0, x8343; CHECK-NEWLOWERING-NEXT: mov sp, x29344; CHECK-NEWLOWERING-NEXT: ldr x19, [sp, #16] // 8-byte Reload345; CHECK-NEWLOWERING-NEXT: ldp x29, x30, [sp], #32 // 16-byte Folded Reload346; CHECK-NEWLOWERING-NEXT: ret347 i64 %0, i64 %1, i64 %2, i64 %3, i64 %4, i64 %5, i64 %6, i64 %7, i64 %8, i64 %9348) nounwind "aarch64_za_state_agnostic" {349 %ret = call i64 @many_args_private_za_callee(350 i64 %0, i64 %1, i64 %2, i64 %3, i64 %4, i64 %5, i64 %6, i64 %7, i64 %8, i64 %9)351 ret i64 %ret352}353 354define void @agnostic_za_buffer_alloc_with_stack_probes() nounwind "aarch64_za_state_agnostic" "probe-stack"="inline-asm" "stack-probe-size"="65536"{355; CHECK-LABEL: agnostic_za_buffer_alloc_with_stack_probes:356; CHECK: // %bb.0:357; CHECK-NEXT: stp x29, x30, [sp, #-32]! // 16-byte Folded Spill358; CHECK-NEXT: str x19, [sp, #16] // 8-byte Spill359; CHECK-NEXT: mov x29, sp360; CHECK-NEXT: bl __arm_sme_state_size361; CHECK-NEXT: mov x8, sp362; CHECK-NEXT: sub x19, x8, x0363; CHECK-NEXT: .LBB7_1: // =>This Inner Loop Header: Depth=1364; CHECK-NEXT: sub sp, sp, #16, lsl #12 // =65536365; CHECK-NEXT: cmp sp, x19366; CHECK-NEXT: b.le .LBB7_3367; CHECK-NEXT: // %bb.2: // in Loop: Header=BB7_1 Depth=1368; CHECK-NEXT: str xzr, [sp]369; CHECK-NEXT: b .LBB7_1370; CHECK-NEXT: .LBB7_3:371; CHECK-NEXT: mov sp, x19372; CHECK-NEXT: ldr xzr, [sp]373; CHECK-NEXT: mov x0, x19374; CHECK-NEXT: bl __arm_sme_save375; CHECK-NEXT: bl private_za376; CHECK-NEXT: mov x0, x19377; CHECK-NEXT: bl __arm_sme_restore378; CHECK-NEXT: mov sp, x29379; CHECK-NEXT: ldr x19, [sp, #16] // 8-byte Reload380; CHECK-NEXT: ldp x29, x30, [sp], #32 // 16-byte Folded Reload381; CHECK-NEXT: ret382;383; CHECK-NEWLOWERING-LABEL: agnostic_za_buffer_alloc_with_stack_probes:384; CHECK-NEWLOWERING: // %bb.0:385; CHECK-NEWLOWERING-NEXT: stp x29, x30, [sp, #-32]! // 16-byte Folded Spill386; CHECK-NEWLOWERING-NEXT: str x19, [sp, #16] // 8-byte Spill387; CHECK-NEWLOWERING-NEXT: mov x29, sp388; CHECK-NEWLOWERING-NEXT: bl __arm_sme_state_size389; CHECK-NEWLOWERING-NEXT: mov x8, sp390; CHECK-NEWLOWERING-NEXT: sub x19, x8, x0391; CHECK-NEWLOWERING-NEXT: mov x0, x19392; CHECK-NEWLOWERING-NEXT: bl __arm_sme_save393; CHECK-NEWLOWERING-NEXT: .LBB7_1: // =>This Inner Loop Header: Depth=1394; CHECK-NEWLOWERING-NEXT: sub sp, sp, #16, lsl #12 // =65536395; CHECK-NEWLOWERING-NEXT: cmp sp, x19396; CHECK-NEWLOWERING-NEXT: b.le .LBB7_3397; CHECK-NEWLOWERING-NEXT: // %bb.2: // in Loop: Header=BB7_1 Depth=1398; CHECK-NEWLOWERING-NEXT: str xzr, [sp]399; CHECK-NEWLOWERING-NEXT: b .LBB7_1400; CHECK-NEWLOWERING-NEXT: .LBB7_3:401; CHECK-NEWLOWERING-NEXT: mov sp, x19402; CHECK-NEWLOWERING-NEXT: ldr xzr, [sp]403; CHECK-NEWLOWERING-NEXT: bl private_za404; CHECK-NEWLOWERING-NEXT: mov x0, x19405; CHECK-NEWLOWERING-NEXT: bl __arm_sme_restore406; CHECK-NEWLOWERING-NEXT: mov sp, x29407; CHECK-NEWLOWERING-NEXT: ldr x19, [sp, #16] // 8-byte Reload408; CHECK-NEWLOWERING-NEXT: ldp x29, x30, [sp], #32 // 16-byte Folded Reload409; CHECK-NEWLOWERING-NEXT: ret410 call void @private_za()411 ret void412}413