brintos

brintos / llvm-project-archived public Read only

0
0
Text · 20.2 KiB · 0398bc0 Raw
431 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -aarch64-streaming-hazard-size=0 -mattr=+sve -mattr=+sme -verify-machineinstrs < %s | FileCheck %s3 4; This file tests the following combinations related to streaming-enabled functions:5; [ ] N  ->  S    (Normal -> Streaming)6; [ ] S  ->  N    (Streaming -> Normal)7; [ ] S  ->  S    (Streaming -> Streaming)8; [ ] S  ->  SC   (Streaming -> Streaming-compatible)9;10; The following combination is tested in sme-streaming-compatible-interface.ll11; [ ] SC ->  S    (Streaming-compatible -> Streaming)12 13declare void @normal_callee()14declare void @streaming_callee() "aarch64_pstate_sm_enabled"15declare void @streaming_compatible_callee() "aarch64_pstate_sm_compatible"16 17; [x] N  ->  S18; [ ] S  ->  N19; [ ] S  ->  S20; [ ] S  ->  SC21define void @normal_caller_streaming_callee() nounwind {22; CHECK-LABEL: normal_caller_streaming_callee:23; CHECK:       // %bb.0:24; CHECK-NEXT:    stp d15, d14, [sp, #-80]! // 16-byte Folded Spill25; CHECK-NEXT:    stp d13, d12, [sp, #16] // 16-byte Folded Spill26; CHECK-NEXT:    stp d11, d10, [sp, #32] // 16-byte Folded Spill27; CHECK-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill28; CHECK-NEXT:    str x30, [sp, #64] // 8-byte Spill29; CHECK-NEXT:    smstart sm30; CHECK-NEXT:    bl streaming_callee31; CHECK-NEXT:    smstop sm32; CHECK-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload33; CHECK-NEXT:    ldr x30, [sp, #64] // 8-byte Reload34; CHECK-NEXT:    ldp d11, d10, [sp, #32] // 16-byte Folded Reload35; CHECK-NEXT:    ldp d13, d12, [sp, #16] // 16-byte Folded Reload36; CHECK-NEXT:    ldp d15, d14, [sp], #80 // 16-byte Folded Reload37; CHECK-NEXT:    ret38  call void @streaming_callee()39  ret void;40}41 42; [ ] N  ->  S43; [x] S  ->  N44; [ ] S  ->  S45; [ ] S  ->  SC46define void @streaming_caller_normal_callee() nounwind "aarch64_pstate_sm_enabled" {47; CHECK-LABEL: streaming_caller_normal_callee:48; CHECK:       // %bb.0:49; CHECK-NEXT:    stp d15, d14, [sp, #-80]! // 16-byte Folded Spill50; CHECK-NEXT:    stp d13, d12, [sp, #16] // 16-byte Folded Spill51; CHECK-NEXT:    stp d11, d10, [sp, #32] // 16-byte Folded Spill52; CHECK-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill53; CHECK-NEXT:    str x30, [sp, #64] // 8-byte Spill54; CHECK-NEXT:    smstop sm55; CHECK-NEXT:    bl normal_callee56; CHECK-NEXT:    smstart sm57; CHECK-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload58; CHECK-NEXT:    ldr x30, [sp, #64] // 8-byte Reload59; CHECK-NEXT:    ldp d11, d10, [sp, #32] // 16-byte Folded Reload60; CHECK-NEXT:    ldp d13, d12, [sp, #16] // 16-byte Folded Reload61; CHECK-NEXT:    ldp d15, d14, [sp], #80 // 16-byte Folded Reload62; CHECK-NEXT:    ret63  call void @normal_callee()64  ret void;65}66 67; [ ] N  ->  S68; [ ] S  ->  N69; [x] S  ->  S70; [ ] S  ->  SC71define void @streaming_caller_streaming_callee() nounwind "aarch64_pstate_sm_enabled" {72; CHECK-LABEL: streaming_caller_streaming_callee:73; CHECK:       // %bb.0:74; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill75; CHECK-NEXT:    bl streaming_callee76; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload77; CHECK-NEXT:    ret78  call void @streaming_callee()79  ret void;80}81 82; [ ] N  ->  S83; [ ] S  ->  N84; [ ] S  ->  S85; [x] S  ->  SC86define void @streaming_caller_streaming_compatible_callee() nounwind "aarch64_pstate_sm_enabled" {87; CHECK-LABEL: streaming_caller_streaming_compatible_callee:88; CHECK:       // %bb.0:89; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill90; CHECK-NEXT:    bl streaming_compatible_callee91; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload92; CHECK-NEXT:    ret93  call void @streaming_compatible_callee()94  ret void;95}96 97;98; Handle special cases here.99;100 101; Call to function-pointer (with attribute)102define void @call_to_function_pointer_streaming_enabled(ptr %p) nounwind {103; CHECK-LABEL: call_to_function_pointer_streaming_enabled:104; CHECK:       // %bb.0:105; CHECK-NEXT:    stp d15, d14, [sp, #-80]! // 16-byte Folded Spill106; CHECK-NEXT:    stp d13, d12, [sp, #16] // 16-byte Folded Spill107; CHECK-NEXT:    stp d11, d10, [sp, #32] // 16-byte Folded Spill108; CHECK-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill109; CHECK-NEXT:    str x30, [sp, #64] // 8-byte Spill110; CHECK-NEXT:    smstart sm111; CHECK-NEXT:    blr x0112; CHECK-NEXT:    smstop sm113; CHECK-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload114; CHECK-NEXT:    ldr x30, [sp, #64] // 8-byte Reload115; CHECK-NEXT:    ldp d11, d10, [sp, #32] // 16-byte Folded Reload116; CHECK-NEXT:    ldp d13, d12, [sp, #16] // 16-byte Folded Reload117; CHECK-NEXT:    ldp d15, d14, [sp], #80 // 16-byte Folded Reload118; CHECK-NEXT:    ret119  call void %p() "aarch64_pstate_sm_enabled"120  ret void121}122 123; Ensure NEON registers are preserved correctly.124define <4 x i32> @smstart_clobber_simdfp(<4 x i32> %x) nounwind {125; CHECK-LABEL: smstart_clobber_simdfp:126; CHECK:       // %bb.0:127; CHECK-NEXT:    sub sp, sp, #96128; CHECK-NEXT:    stp d15, d14, [sp, #16] // 16-byte Folded Spill129; CHECK-NEXT:    stp d13, d12, [sp, #32] // 16-byte Folded Spill130; CHECK-NEXT:    stp d11, d10, [sp, #48] // 16-byte Folded Spill131; CHECK-NEXT:    stp d9, d8, [sp, #64] // 16-byte Folded Spill132; CHECK-NEXT:    str x30, [sp, #80] // 8-byte Spill133; CHECK-NEXT:    str q0, [sp] // 16-byte Spill134; CHECK-NEXT:    smstart sm135; CHECK-NEXT:    bl streaming_callee136; CHECK-NEXT:    smstop sm137; CHECK-NEXT:    ldp d9, d8, [sp, #64] // 16-byte Folded Reload138; CHECK-NEXT:    ldr q0, [sp] // 16-byte Reload139; CHECK-NEXT:    ldp d11, d10, [sp, #48] // 16-byte Folded Reload140; CHECK-NEXT:    ldr x30, [sp, #80] // 8-byte Reload141; CHECK-NEXT:    ldp d13, d12, [sp, #32] // 16-byte Folded Reload142; CHECK-NEXT:    ldp d15, d14, [sp, #16] // 16-byte Folded Reload143; CHECK-NEXT:    add sp, sp, #96144; CHECK-NEXT:    ret145  call void @streaming_callee()146  ret <4 x i32> %x;147}148 149; Ensure SVE registers are preserved correctly.150define <vscale x 4 x i32> @smstart_clobber_sve(<vscale x 4 x i32> %x) nounwind {151; CHECK-LABEL: smstart_clobber_sve:152; CHECK:       // %bb.0:153; CHECK-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill154; CHECK-NEXT:    addvl sp, sp, #-18155; CHECK-NEXT:    str p15, [sp, #4, mul vl] // 2-byte Spill156; CHECK-NEXT:    str p14, [sp, #5, mul vl] // 2-byte Spill157; CHECK-NEXT:    str p13, [sp, #6, mul vl] // 2-byte Spill158; CHECK-NEXT:    str p12, [sp, #7, mul vl] // 2-byte Spill159; CHECK-NEXT:    str p11, [sp, #8, mul vl] // 2-byte Spill160; CHECK-NEXT:    str p10, [sp, #9, mul vl] // 2-byte Spill161; CHECK-NEXT:    str p9, [sp, #10, mul vl] // 2-byte Spill162; CHECK-NEXT:    str p8, [sp, #11, mul vl] // 2-byte Spill163; CHECK-NEXT:    str p7, [sp, #12, mul vl] // 2-byte Spill164; CHECK-NEXT:    str p6, [sp, #13, mul vl] // 2-byte Spill165; CHECK-NEXT:    str p5, [sp, #14, mul vl] // 2-byte Spill166; CHECK-NEXT:    str p4, [sp, #15, mul vl] // 2-byte Spill167; CHECK-NEXT:    str z23, [sp, #2, mul vl] // 16-byte Folded Spill168; CHECK-NEXT:    str z22, [sp, #3, mul vl] // 16-byte Folded Spill169; CHECK-NEXT:    str z21, [sp, #4, mul vl] // 16-byte Folded Spill170; CHECK-NEXT:    str z20, [sp, #5, mul vl] // 16-byte Folded Spill171; CHECK-NEXT:    str z19, [sp, #6, mul vl] // 16-byte Folded Spill172; CHECK-NEXT:    str z18, [sp, #7, mul vl] // 16-byte Folded Spill173; CHECK-NEXT:    str z17, [sp, #8, mul vl] // 16-byte Folded Spill174; CHECK-NEXT:    str z16, [sp, #9, mul vl] // 16-byte Folded Spill175; CHECK-NEXT:    str z15, [sp, #10, mul vl] // 16-byte Folded Spill176; CHECK-NEXT:    str z14, [sp, #11, mul vl] // 16-byte Folded Spill177; CHECK-NEXT:    str z13, [sp, #12, mul vl] // 16-byte Folded Spill178; CHECK-NEXT:    str z12, [sp, #13, mul vl] // 16-byte Folded Spill179; CHECK-NEXT:    str z11, [sp, #14, mul vl] // 16-byte Folded Spill180; CHECK-NEXT:    str z10, [sp, #15, mul vl] // 16-byte Folded Spill181; CHECK-NEXT:    str z9, [sp, #16, mul vl] // 16-byte Folded Spill182; CHECK-NEXT:    str z8, [sp, #17, mul vl] // 16-byte Folded Spill183; CHECK-NEXT:    addvl sp, sp, #-1184; CHECK-NEXT:    str z0, [sp] // 16-byte Folded Spill185; CHECK-NEXT:    smstart sm186; CHECK-NEXT:    bl streaming_callee187; CHECK-NEXT:    smstop sm188; CHECK-NEXT:    ldr z0, [sp] // 16-byte Folded Reload189; CHECK-NEXT:    addvl sp, sp, #1190; CHECK-NEXT:    ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload191; CHECK-NEXT:    ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload192; CHECK-NEXT:    ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload193; CHECK-NEXT:    ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload194; CHECK-NEXT:    ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload195; CHECK-NEXT:    ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload196; CHECK-NEXT:    ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload197; CHECK-NEXT:    ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload198; CHECK-NEXT:    ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload199; CHECK-NEXT:    ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload200; CHECK-NEXT:    ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload201; CHECK-NEXT:    ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload202; CHECK-NEXT:    ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload203; CHECK-NEXT:    ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload204; CHECK-NEXT:    ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload205; CHECK-NEXT:    ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload206; CHECK-NEXT:    ldr p15, [sp, #4, mul vl] // 2-byte Reload207; CHECK-NEXT:    ldr p14, [sp, #5, mul vl] // 2-byte Reload208; CHECK-NEXT:    ldr p13, [sp, #6, mul vl] // 2-byte Reload209; CHECK-NEXT:    ldr p12, [sp, #7, mul vl] // 2-byte Reload210; CHECK-NEXT:    ldr p11, [sp, #8, mul vl] // 2-byte Reload211; CHECK-NEXT:    ldr p10, [sp, #9, mul vl] // 2-byte Reload212; CHECK-NEXT:    ldr p9, [sp, #10, mul vl] // 2-byte Reload213; CHECK-NEXT:    ldr p8, [sp, #11, mul vl] // 2-byte Reload214; CHECK-NEXT:    ldr p7, [sp, #12, mul vl] // 2-byte Reload215; CHECK-NEXT:    ldr p6, [sp, #13, mul vl] // 2-byte Reload216; CHECK-NEXT:    ldr p5, [sp, #14, mul vl] // 2-byte Reload217; CHECK-NEXT:    ldr p4, [sp, #15, mul vl] // 2-byte Reload218; CHECK-NEXT:    addvl sp, sp, #18219; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload220; CHECK-NEXT:    ret221  call void @streaming_callee()222  ret <vscale x 4 x i32> %x;223}224 225; Call streaming callee twice; there should be no spills/fills between the two226; calls since the registers should have already been clobbered.227define <vscale x 4 x i32> @smstart_clobber_sve_duplicate(<vscale x 4 x i32> %x) nounwind {228; CHECK-LABEL: smstart_clobber_sve_duplicate:229; CHECK:       // %bb.0:230; CHECK-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill231; CHECK-NEXT:    addvl sp, sp, #-18232; CHECK-NEXT:    str p15, [sp, #4, mul vl] // 2-byte Spill233; CHECK-NEXT:    str p14, [sp, #5, mul vl] // 2-byte Spill234; CHECK-NEXT:    str p13, [sp, #6, mul vl] // 2-byte Spill235; CHECK-NEXT:    str p12, [sp, #7, mul vl] // 2-byte Spill236; CHECK-NEXT:    str p11, [sp, #8, mul vl] // 2-byte Spill237; CHECK-NEXT:    str p10, [sp, #9, mul vl] // 2-byte Spill238; CHECK-NEXT:    str p9, [sp, #10, mul vl] // 2-byte Spill239; CHECK-NEXT:    str p8, [sp, #11, mul vl] // 2-byte Spill240; CHECK-NEXT:    str p7, [sp, #12, mul vl] // 2-byte Spill241; CHECK-NEXT:    str p6, [sp, #13, mul vl] // 2-byte Spill242; CHECK-NEXT:    str p5, [sp, #14, mul vl] // 2-byte Spill243; CHECK-NEXT:    str p4, [sp, #15, mul vl] // 2-byte Spill244; CHECK-NEXT:    str z23, [sp, #2, mul vl] // 16-byte Folded Spill245; CHECK-NEXT:    str z22, [sp, #3, mul vl] // 16-byte Folded Spill246; CHECK-NEXT:    str z21, [sp, #4, mul vl] // 16-byte Folded Spill247; CHECK-NEXT:    str z20, [sp, #5, mul vl] // 16-byte Folded Spill248; CHECK-NEXT:    str z19, [sp, #6, mul vl] // 16-byte Folded Spill249; CHECK-NEXT:    str z18, [sp, #7, mul vl] // 16-byte Folded Spill250; CHECK-NEXT:    str z17, [sp, #8, mul vl] // 16-byte Folded Spill251; CHECK-NEXT:    str z16, [sp, #9, mul vl] // 16-byte Folded Spill252; CHECK-NEXT:    str z15, [sp, #10, mul vl] // 16-byte Folded Spill253; CHECK-NEXT:    str z14, [sp, #11, mul vl] // 16-byte Folded Spill254; CHECK-NEXT:    str z13, [sp, #12, mul vl] // 16-byte Folded Spill255; CHECK-NEXT:    str z12, [sp, #13, mul vl] // 16-byte Folded Spill256; CHECK-NEXT:    str z11, [sp, #14, mul vl] // 16-byte Folded Spill257; CHECK-NEXT:    str z10, [sp, #15, mul vl] // 16-byte Folded Spill258; CHECK-NEXT:    str z9, [sp, #16, mul vl] // 16-byte Folded Spill259; CHECK-NEXT:    str z8, [sp, #17, mul vl] // 16-byte Folded Spill260; CHECK-NEXT:    addvl sp, sp, #-1261; CHECK-NEXT:    str z0, [sp] // 16-byte Folded Spill262; CHECK-NEXT:    smstart sm263; CHECK-NEXT:    bl streaming_callee264; CHECK-NEXT:    bl streaming_callee265; CHECK-NEXT:    smstop sm266; CHECK-NEXT:    ldr z0, [sp] // 16-byte Folded Reload267; CHECK-NEXT:    addvl sp, sp, #1268; CHECK-NEXT:    ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload269; CHECK-NEXT:    ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload270; CHECK-NEXT:    ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload271; CHECK-NEXT:    ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload272; CHECK-NEXT:    ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload273; CHECK-NEXT:    ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload274; CHECK-NEXT:    ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload275; CHECK-NEXT:    ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload276; CHECK-NEXT:    ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload277; CHECK-NEXT:    ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload278; CHECK-NEXT:    ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload279; CHECK-NEXT:    ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload280; CHECK-NEXT:    ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload281; CHECK-NEXT:    ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload282; CHECK-NEXT:    ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload283; CHECK-NEXT:    ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload284; CHECK-NEXT:    ldr p15, [sp, #4, mul vl] // 2-byte Reload285; CHECK-NEXT:    ldr p14, [sp, #5, mul vl] // 2-byte Reload286; CHECK-NEXT:    ldr p13, [sp, #6, mul vl] // 2-byte Reload287; CHECK-NEXT:    ldr p12, [sp, #7, mul vl] // 2-byte Reload288; CHECK-NEXT:    ldr p11, [sp, #8, mul vl] // 2-byte Reload289; CHECK-NEXT:    ldr p10, [sp, #9, mul vl] // 2-byte Reload290; CHECK-NEXT:    ldr p9, [sp, #10, mul vl] // 2-byte Reload291; CHECK-NEXT:    ldr p8, [sp, #11, mul vl] // 2-byte Reload292; CHECK-NEXT:    ldr p7, [sp, #12, mul vl] // 2-byte Reload293; CHECK-NEXT:    ldr p6, [sp, #13, mul vl] // 2-byte Reload294; CHECK-NEXT:    ldr p5, [sp, #14, mul vl] // 2-byte Reload295; CHECK-NEXT:    ldr p4, [sp, #15, mul vl] // 2-byte Reload296; CHECK-NEXT:    addvl sp, sp, #18297; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload298; CHECK-NEXT:    ret299  call void @streaming_callee()300  call void @streaming_callee()301  ret <vscale x 4 x i32> %x;302}303 304; Ensure smstart is not removed, because call to llvm.cos is not part of a chain.305define double @call_to_intrinsic_without_chain(double %x) nounwind "aarch64_pstate_sm_enabled" {306; CHECK-LABEL: call_to_intrinsic_without_chain:307; CHECK:       // %bb.0: // %entry308; CHECK-NEXT:    sub sp, sp, #96309; CHECK-NEXT:    stp d15, d14, [sp, #16] // 16-byte Folded Spill310; CHECK-NEXT:    stp d13, d12, [sp, #32] // 16-byte Folded Spill311; CHECK-NEXT:    stp d11, d10, [sp, #48] // 16-byte Folded Spill312; CHECK-NEXT:    stp d9, d8, [sp, #64] // 16-byte Folded Spill313; CHECK-NEXT:    str x30, [sp, #80] // 8-byte Spill314; CHECK-NEXT:    stp d0, d0, [sp] // 16-byte Folded Spill315; CHECK-NEXT:    smstop sm316; CHECK-NEXT:    ldr d0, [sp] // 8-byte Reload317; CHECK-NEXT:    bl cos318; CHECK-NEXT:    str d0, [sp] // 8-byte Spill319; CHECK-NEXT:    smstart sm320; CHECK-NEXT:    ldp d1, d0, [sp] // 16-byte Folded Reload321; CHECK-NEXT:    ldr x30, [sp, #80] // 8-byte Reload322; CHECK-NEXT:    ldp d9, d8, [sp, #64] // 16-byte Folded Reload323; CHECK-NEXT:    ldp d11, d10, [sp, #48] // 16-byte Folded Reload324; CHECK-NEXT:    ldp d13, d12, [sp, #32] // 16-byte Folded Reload325; CHECK-NEXT:    fadd d0, d1, d0326; CHECK-NEXT:    ldp d15, d14, [sp, #16] // 16-byte Folded Reload327; CHECK-NEXT:    add sp, sp, #96328; CHECK-NEXT:    ret329entry:330  %res = call fast double @llvm.cos.f64(double %x)331  %res.fadd = fadd fast double %res, %x332  ret double %res.fadd333}334 335declare double @llvm.cos.f64(double)336 337; Ensure that tail call optimization is disabled when the streaming mode338; doesn't match.339define void @disable_tailcallopt() nounwind {340; CHECK-LABEL: disable_tailcallopt:341; CHECK:       // %bb.0:342; CHECK-NEXT:    stp d15, d14, [sp, #-80]! // 16-byte Folded Spill343; CHECK-NEXT:    stp d13, d12, [sp, #16] // 16-byte Folded Spill344; CHECK-NEXT:    stp d11, d10, [sp, #32] // 16-byte Folded Spill345; CHECK-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill346; CHECK-NEXT:    str x30, [sp, #64] // 8-byte Spill347; CHECK-NEXT:    smstart sm348; CHECK-NEXT:    bl streaming_callee349; CHECK-NEXT:    smstop sm350; CHECK-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload351; CHECK-NEXT:    ldr x30, [sp, #64] // 8-byte Reload352; CHECK-NEXT:    ldp d11, d10, [sp, #32] // 16-byte Folded Reload353; CHECK-NEXT:    ldp d13, d12, [sp, #16] // 16-byte Folded Reload354; CHECK-NEXT:    ldp d15, d14, [sp], #80 // 16-byte Folded Reload355; CHECK-NEXT:    ret356  tail call void @streaming_callee()357  ret void;358}359 360define i8 @call_to_non_streaming_pass_sve_objects(ptr nocapture noundef readnone %ptr) #0 {361; CHECK-LABEL: call_to_non_streaming_pass_sve_objects:362; CHECK:       // %bb.0: // %entry363; CHECK-NEXT:    stp d15, d14, [sp, #-80]! // 16-byte Folded Spill364; CHECK-NEXT:    stp d13, d12, [sp, #16] // 16-byte Folded Spill365; CHECK-NEXT:    stp d11, d10, [sp, #32] // 16-byte Folded Spill366; CHECK-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill367; CHECK-NEXT:    stp x29, x30, [sp, #64] // 16-byte Folded Spill368; CHECK-NEXT:    addvl sp, sp, #-3369; CHECK-NEXT:    rdsvl x8, #1370; CHECK-NEXT:    addvl x0, sp, #2371; CHECK-NEXT:    addvl x1, sp, #1372; CHECK-NEXT:    lsr x3, x8, #3373; CHECK-NEXT:    mov x2, sp374; CHECK-NEXT:    smstop sm375; CHECK-NEXT:    bl foo376; CHECK-NEXT:    smstart sm377; CHECK-NEXT:    addvl x8, sp, #2378; CHECK-NEXT:    ldrb w0, [x8]379; CHECK-NEXT:    addvl sp, sp, #3380; CHECK-NEXT:    ldp x29, x30, [sp, #64] // 16-byte Folded Reload381; CHECK-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload382; CHECK-NEXT:    ldp d11, d10, [sp, #32] // 16-byte Folded Reload383; CHECK-NEXT:    ldp d13, d12, [sp, #16] // 16-byte Folded Reload384; CHECK-NEXT:    ldp d15, d14, [sp], #80 // 16-byte Folded Reload385; CHECK-NEXT:    ret386entry:387  %Data1 = alloca <vscale x 16 x i8>, align 16388  %Data2 = alloca <vscale x 16 x i8>, align 16389  %Data3 = alloca <vscale x 16 x i8>, align 16390  %0 = tail call i64 @llvm.aarch64.sme.cntsd()391  call void @foo(ptr noundef nonnull %Data1, ptr noundef nonnull %Data2, ptr noundef nonnull %Data3, i64 noundef %0)392  %1 = load <vscale x 16 x i8>, ptr %Data1, align 16393  %vecext = extractelement <vscale x 16 x i8> %1, i64 0394  ret i8 %vecext395}396 397define void @call_to_non_streaming_pass_args(ptr nocapture noundef readnone %ptr, i64 %long1, i64 %long2, i32 %int1, i32 %int2, float %float1, float %float2, double %double1, double %double2) #0 {398; CHECK-LABEL: call_to_non_streaming_pass_args:399; CHECK:       // %bb.0: // %entry400; CHECK-NEXT:    sub sp, sp, #112401; CHECK-NEXT:    stp d15, d14, [sp, #32] // 16-byte Folded Spill402; CHECK-NEXT:    stp d13, d12, [sp, #48] // 16-byte Folded Spill403; CHECK-NEXT:    stp d11, d10, [sp, #64] // 16-byte Folded Spill404; CHECK-NEXT:    stp d9, d8, [sp, #80] // 16-byte Folded Spill405; CHECK-NEXT:    str x30, [sp, #96] // 8-byte Spill406; CHECK-NEXT:    stp d2, d3, [sp, #16] // 16-byte Folded Spill407; CHECK-NEXT:    stp s0, s1, [sp, #8] // 8-byte Folded Spill408; CHECK-NEXT:    smstop sm409; CHECK-NEXT:    ldp s0, s1, [sp, #8] // 8-byte Folded Reload410; CHECK-NEXT:    ldp d2, d3, [sp, #16] // 16-byte Folded Reload411; CHECK-NEXT:    bl bar412; CHECK-NEXT:    smstart sm413; CHECK-NEXT:    ldp d9, d8, [sp, #80] // 16-byte Folded Reload414; CHECK-NEXT:    ldr x30, [sp, #96] // 8-byte Reload415; CHECK-NEXT:    ldp d11, d10, [sp, #64] // 16-byte Folded Reload416; CHECK-NEXT:    ldp d13, d12, [sp, #48] // 16-byte Folded Reload417; CHECK-NEXT:    ldp d15, d14, [sp, #32] // 16-byte Folded Reload418; CHECK-NEXT:    add sp, sp, #112419; CHECK-NEXT:    ret420entry:421  call void @bar(ptr noundef nonnull %ptr, i64 %long1, i64 %long2, i32 %int1, i32 %int2, float %float1, float %float2, double %double1, double %double2)422  ret void423}424 425declare i64 @llvm.aarch64.sme.cntsd()426 427declare void @foo(ptr noundef, ptr noundef, ptr noundef, i64 noundef)428declare void @bar(ptr noundef, i64 noundef, i64 noundef, i32 noundef, i32 noundef, float noundef, float noundef, double noundef, double noundef)429 430attributes #0 = { nounwind vscale_range(1,16) "aarch64_pstate_sm_enabled" }431