454 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=+sme2 -mattr=+sve -aarch64-disable-multivector-spill-fill -verify-machineinstrs < %s | FileCheck %s --check-prefixes=NOPAIR3; RUN: llc -mtriple=aarch64-linux-gnu -aarch64-streaming-hazard-size=0 -mattr=+sme -mattr=+sve -verify-machineinstrs < %s | FileCheck %s --check-prefixes=NOPAIR4; RUN: llc -mtriple=aarch64-linux-gnu -aarch64-streaming-hazard-size=0 -mattr=+sme2 -mattr=+sve -verify-machineinstrs < %s | FileCheck %s --check-prefixes=PAIR5 6declare void @my_func()7declare void @my_func2(<vscale x 16 x i8> %v)8 9define void @fbyte(<vscale x 16 x i8> %v) #0{10; NOPAIR-LABEL: fbyte:11; NOPAIR: // %bb.0:12; NOPAIR-NEXT: str x29, [sp, #-32]! // 8-byte Folded Spill13; NOPAIR-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill14; NOPAIR-NEXT: addvl sp, sp, #-1815; NOPAIR-NEXT: str p15, [sp, #4, mul vl] // 2-byte Spill16; NOPAIR-NEXT: str p14, [sp, #5, mul vl] // 2-byte Spill17; NOPAIR-NEXT: str p13, [sp, #6, mul vl] // 2-byte Spill18; NOPAIR-NEXT: str p12, [sp, #7, mul vl] // 2-byte Spill19; NOPAIR-NEXT: str p11, [sp, #8, mul vl] // 2-byte Spill20; NOPAIR-NEXT: str p10, [sp, #9, mul vl] // 2-byte Spill21; NOPAIR-NEXT: str p9, [sp, #10, mul vl] // 2-byte Spill22; NOPAIR-NEXT: str p8, [sp, #11, mul vl] // 2-byte Spill23; NOPAIR-NEXT: str p7, [sp, #12, mul vl] // 2-byte Spill24; NOPAIR-NEXT: str p6, [sp, #13, mul vl] // 2-byte Spill25; NOPAIR-NEXT: str p5, [sp, #14, mul vl] // 2-byte Spill26; NOPAIR-NEXT: str p4, [sp, #15, mul vl] // 2-byte Spill27; NOPAIR-NEXT: str z23, [sp, #2, mul vl] // 16-byte Folded Spill28; NOPAIR-NEXT: str z22, [sp, #3, mul vl] // 16-byte Folded Spill29; NOPAIR-NEXT: str z21, [sp, #4, mul vl] // 16-byte Folded Spill30; NOPAIR-NEXT: str z20, [sp, #5, mul vl] // 16-byte Folded Spill31; NOPAIR-NEXT: str z19, [sp, #6, mul vl] // 16-byte Folded Spill32; NOPAIR-NEXT: str z18, [sp, #7, mul vl] // 16-byte Folded Spill33; NOPAIR-NEXT: str z17, [sp, #8, mul vl] // 16-byte Folded Spill34; NOPAIR-NEXT: str z16, [sp, #9, mul vl] // 16-byte Folded Spill35; NOPAIR-NEXT: str z15, [sp, #10, mul vl] // 16-byte Folded Spill36; NOPAIR-NEXT: str z14, [sp, #11, mul vl] // 16-byte Folded Spill37; NOPAIR-NEXT: str z13, [sp, #12, mul vl] // 16-byte Folded Spill38; NOPAIR-NEXT: str z12, [sp, #13, mul vl] // 16-byte Folded Spill39; NOPAIR-NEXT: str z11, [sp, #14, mul vl] // 16-byte Folded Spill40; NOPAIR-NEXT: str z10, [sp, #15, mul vl] // 16-byte Folded Spill41; NOPAIR-NEXT: str z9, [sp, #16, mul vl] // 16-byte Folded Spill42; NOPAIR-NEXT: str z8, [sp, #17, mul vl] // 16-byte Folded Spill43; NOPAIR-NEXT: addvl sp, sp, #-144; NOPAIR-NEXT: str z0, [sp] // 16-byte Folded Spill45; NOPAIR-NEXT: mrs x19, SVCR46; NOPAIR-NEXT: tbz w19, #0, .LBB0_247; NOPAIR-NEXT: // %bb.1:48; NOPAIR-NEXT: smstop sm49; NOPAIR-NEXT: .LBB0_2:50; NOPAIR-NEXT: rdvl x8, #151; NOPAIR-NEXT: addsvl x8, x8, #-152; NOPAIR-NEXT: cbz x8, .LBB0_453; NOPAIR-NEXT: // %bb.3:54; NOPAIR-NEXT: brk #0x155; NOPAIR-NEXT: .LBB0_4:56; NOPAIR-NEXT: ldr z0, [sp] // 16-byte Folded Reload57; NOPAIR-NEXT: bl my_func258; NOPAIR-NEXT: tbz w19, #0, .LBB0_659; NOPAIR-NEXT: // %bb.5:60; NOPAIR-NEXT: smstart sm61; NOPAIR-NEXT: .LBB0_6:62; NOPAIR-NEXT: addvl sp, sp, #163; NOPAIR-NEXT: ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload64; NOPAIR-NEXT: ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload65; NOPAIR-NEXT: ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload66; NOPAIR-NEXT: ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload67; NOPAIR-NEXT: ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload68; NOPAIR-NEXT: ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload69; NOPAIR-NEXT: ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload70; NOPAIR-NEXT: ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload71; NOPAIR-NEXT: ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload72; NOPAIR-NEXT: ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload73; NOPAIR-NEXT: ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload74; NOPAIR-NEXT: ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload75; NOPAIR-NEXT: ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload76; NOPAIR-NEXT: ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload77; NOPAIR-NEXT: ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload78; NOPAIR-NEXT: ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload79; NOPAIR-NEXT: ldr p15, [sp, #4, mul vl] // 2-byte Reload80; NOPAIR-NEXT: ldr p14, [sp, #5, mul vl] // 2-byte Reload81; NOPAIR-NEXT: ldr p13, [sp, #6, mul vl] // 2-byte Reload82; NOPAIR-NEXT: ldr p12, [sp, #7, mul vl] // 2-byte Reload83; NOPAIR-NEXT: ldr p11, [sp, #8, mul vl] // 2-byte Reload84; NOPAIR-NEXT: ldr p10, [sp, #9, mul vl] // 2-byte Reload85; NOPAIR-NEXT: ldr p9, [sp, #10, mul vl] // 2-byte Reload86; NOPAIR-NEXT: ldr p8, [sp, #11, mul vl] // 2-byte Reload87; NOPAIR-NEXT: ldr p7, [sp, #12, mul vl] // 2-byte Reload88; NOPAIR-NEXT: ldr p6, [sp, #13, mul vl] // 2-byte Reload89; NOPAIR-NEXT: ldr p5, [sp, #14, mul vl] // 2-byte Reload90; NOPAIR-NEXT: ldr p4, [sp, #15, mul vl] // 2-byte Reload91; NOPAIR-NEXT: addvl sp, sp, #1892; NOPAIR-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload93; NOPAIR-NEXT: ldr x29, [sp], #32 // 8-byte Folded Reload94; NOPAIR-NEXT: ret95;96; PAIR-LABEL: fbyte:97; PAIR: // %bb.0:98; PAIR-NEXT: str x29, [sp, #-32]! // 8-byte Folded Spill99; PAIR-NEXT: stp x30, x19, [sp, #16] // 16-byte Folded Spill100; PAIR-NEXT: addvl sp, sp, #-18101; PAIR-NEXT: str p15, [sp, #4, mul vl] // 2-byte Spill102; PAIR-NEXT: str p14, [sp, #5, mul vl] // 2-byte Spill103; PAIR-NEXT: str p13, [sp, #6, mul vl] // 2-byte Spill104; PAIR-NEXT: str p12, [sp, #7, mul vl] // 2-byte Spill105; PAIR-NEXT: str p11, [sp, #8, mul vl] // 2-byte Spill106; PAIR-NEXT: str p10, [sp, #9, mul vl] // 2-byte Spill107; PAIR-NEXT: str p9, [sp, #10, mul vl] // 2-byte Spill108; PAIR-NEXT: str p8, [sp, #11, mul vl] // 2-byte Spill109; PAIR-NEXT: str p7, [sp, #12, mul vl] // 2-byte Spill110; PAIR-NEXT: str p6, [sp, #13, mul vl] // 2-byte Spill111; PAIR-NEXT: str p5, [sp, #14, mul vl] // 2-byte Spill112; PAIR-NEXT: str p4, [sp, #15, mul vl] // 2-byte Spill113; PAIR-NEXT: str z23, [sp, #2, mul vl] // 16-byte Folded Spill114; PAIR-NEXT: str z22, [sp, #3, mul vl] // 16-byte Folded Spill115; PAIR-NEXT: str z21, [sp, #4, mul vl] // 16-byte Folded Spill116; PAIR-NEXT: str z20, [sp, #5, mul vl] // 16-byte Folded Spill117; PAIR-NEXT: str z19, [sp, #6, mul vl] // 16-byte Folded Spill118; PAIR-NEXT: str z18, [sp, #7, mul vl] // 16-byte Folded Spill119; PAIR-NEXT: str z17, [sp, #8, mul vl] // 16-byte Folded Spill120; PAIR-NEXT: str z16, [sp, #9, mul vl] // 16-byte Folded Spill121; PAIR-NEXT: str z15, [sp, #10, mul vl] // 16-byte Folded Spill122; PAIR-NEXT: str z14, [sp, #11, mul vl] // 16-byte Folded Spill123; PAIR-NEXT: str z13, [sp, #12, mul vl] // 16-byte Folded Spill124; PAIR-NEXT: str z12, [sp, #13, mul vl] // 16-byte Folded Spill125; PAIR-NEXT: str z11, [sp, #14, mul vl] // 16-byte Folded Spill126; PAIR-NEXT: str z10, [sp, #15, mul vl] // 16-byte Folded Spill127; PAIR-NEXT: str z9, [sp, #16, mul vl] // 16-byte Folded Spill128; PAIR-NEXT: str z8, [sp, #17, mul vl] // 16-byte Folded Spill129; PAIR-NEXT: addvl sp, sp, #-1130; PAIR-NEXT: str z0, [sp] // 16-byte Folded Spill131; PAIR-NEXT: mrs x19, SVCR132; PAIR-NEXT: tbz w19, #0, .LBB0_2133; PAIR-NEXT: // %bb.1:134; PAIR-NEXT: smstop sm135; PAIR-NEXT: .LBB0_2:136; PAIR-NEXT: rdvl x8, #1137; PAIR-NEXT: addsvl x8, x8, #-1138; PAIR-NEXT: cbz x8, .LBB0_4139; PAIR-NEXT: // %bb.3:140; PAIR-NEXT: brk #0x1141; PAIR-NEXT: .LBB0_4:142; PAIR-NEXT: ldr z0, [sp] // 16-byte Folded Reload143; PAIR-NEXT: bl my_func2144; PAIR-NEXT: tbz w19, #0, .LBB0_6145; PAIR-NEXT: // %bb.5:146; PAIR-NEXT: smstart sm147; PAIR-NEXT: .LBB0_6:148; PAIR-NEXT: addvl sp, sp, #1149; PAIR-NEXT: ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload150; PAIR-NEXT: ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload151; PAIR-NEXT: ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload152; PAIR-NEXT: ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload153; PAIR-NEXT: ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload154; PAIR-NEXT: ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload155; PAIR-NEXT: ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload156; PAIR-NEXT: ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload157; PAIR-NEXT: ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload158; PAIR-NEXT: ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload159; PAIR-NEXT: ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload160; PAIR-NEXT: ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload161; PAIR-NEXT: ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload162; PAIR-NEXT: ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload163; PAIR-NEXT: ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload164; PAIR-NEXT: ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload165; PAIR-NEXT: ldr p15, [sp, #4, mul vl] // 2-byte Reload166; PAIR-NEXT: ldr p14, [sp, #5, mul vl] // 2-byte Reload167; PAIR-NEXT: ldr p13, [sp, #6, mul vl] // 2-byte Reload168; PAIR-NEXT: ldr p12, [sp, #7, mul vl] // 2-byte Reload169; PAIR-NEXT: ldr p11, [sp, #8, mul vl] // 2-byte Reload170; PAIR-NEXT: ldr p10, [sp, #9, mul vl] // 2-byte Reload171; PAIR-NEXT: ldr p9, [sp, #10, mul vl] // 2-byte Reload172; PAIR-NEXT: ldr p8, [sp, #11, mul vl] // 2-byte Reload173; PAIR-NEXT: ldr p7, [sp, #12, mul vl] // 2-byte Reload174; PAIR-NEXT: ldr p6, [sp, #13, mul vl] // 2-byte Reload175; PAIR-NEXT: ldr p5, [sp, #14, mul vl] // 2-byte Reload176; PAIR-NEXT: ldr p4, [sp, #15, mul vl] // 2-byte Reload177; PAIR-NEXT: addvl sp, sp, #18178; PAIR-NEXT: ldp x30, x19, [sp, #16] // 16-byte Folded Reload179; PAIR-NEXT: ldr x29, [sp], #32 // 8-byte Folded Reload180; PAIR-NEXT: ret181 call void @my_func2(<vscale x 16 x i8> %v)182 ret void183}184 185define void @fhalf(<vscale x 8 x half> %v) #1{186; NOPAIR-LABEL: fhalf:187; NOPAIR: // %bb.0:188; NOPAIR-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill189; NOPAIR-NEXT: addvl sp, sp, #-18190; NOPAIR-NEXT: str p15, [sp, #4, mul vl] // 2-byte Spill191; NOPAIR-NEXT: str p14, [sp, #5, mul vl] // 2-byte Spill192; NOPAIR-NEXT: str p13, [sp, #6, mul vl] // 2-byte Spill193; NOPAIR-NEXT: str p12, [sp, #7, mul vl] // 2-byte Spill194; NOPAIR-NEXT: str p11, [sp, #8, mul vl] // 2-byte Spill195; NOPAIR-NEXT: str p10, [sp, #9, mul vl] // 2-byte Spill196; NOPAIR-NEXT: str p9, [sp, #10, mul vl] // 2-byte Spill197; NOPAIR-NEXT: str p8, [sp, #11, mul vl] // 2-byte Spill198; NOPAIR-NEXT: str p7, [sp, #12, mul vl] // 2-byte Spill199; NOPAIR-NEXT: str p6, [sp, #13, mul vl] // 2-byte Spill200; NOPAIR-NEXT: str p5, [sp, #14, mul vl] // 2-byte Spill201; NOPAIR-NEXT: str p4, [sp, #15, mul vl] // 2-byte Spill202; NOPAIR-NEXT: str z23, [sp, #2, mul vl] // 16-byte Folded Spill203; NOPAIR-NEXT: str z22, [sp, #3, mul vl] // 16-byte Folded Spill204; NOPAIR-NEXT: str z21, [sp, #4, mul vl] // 16-byte Folded Spill205; NOPAIR-NEXT: str z20, [sp, #5, mul vl] // 16-byte Folded Spill206; NOPAIR-NEXT: str z19, [sp, #6, mul vl] // 16-byte Folded Spill207; NOPAIR-NEXT: str z18, [sp, #7, mul vl] // 16-byte Folded Spill208; NOPAIR-NEXT: str z17, [sp, #8, mul vl] // 16-byte Folded Spill209; NOPAIR-NEXT: str z16, [sp, #9, mul vl] // 16-byte Folded Spill210; NOPAIR-NEXT: str z15, [sp, #10, mul vl] // 16-byte Folded Spill211; NOPAIR-NEXT: str z14, [sp, #11, mul vl] // 16-byte Folded Spill212; NOPAIR-NEXT: str z13, [sp, #12, mul vl] // 16-byte Folded Spill213; NOPAIR-NEXT: str z12, [sp, #13, mul vl] // 16-byte Folded Spill214; NOPAIR-NEXT: str z11, [sp, #14, mul vl] // 16-byte Folded Spill215; NOPAIR-NEXT: str z10, [sp, #15, mul vl] // 16-byte Folded Spill216; NOPAIR-NEXT: str z9, [sp, #16, mul vl] // 16-byte Folded Spill217; NOPAIR-NEXT: str z8, [sp, #17, mul vl] // 16-byte Folded Spill218; NOPAIR-NEXT: smstop sm219; NOPAIR-NEXT: bl my_func220; NOPAIR-NEXT: smstart sm221; NOPAIR-NEXT: ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload222; NOPAIR-NEXT: ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload223; NOPAIR-NEXT: ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload224; NOPAIR-NEXT: ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload225; NOPAIR-NEXT: ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload226; NOPAIR-NEXT: ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload227; NOPAIR-NEXT: ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload228; NOPAIR-NEXT: ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload229; NOPAIR-NEXT: ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload230; NOPAIR-NEXT: ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload231; NOPAIR-NEXT: ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload232; NOPAIR-NEXT: ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload233; NOPAIR-NEXT: ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload234; NOPAIR-NEXT: ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload235; NOPAIR-NEXT: ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload236; NOPAIR-NEXT: ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload237; NOPAIR-NEXT: ldr p15, [sp, #4, mul vl] // 2-byte Reload238; NOPAIR-NEXT: ldr p14, [sp, #5, mul vl] // 2-byte Reload239; NOPAIR-NEXT: ldr p13, [sp, #6, mul vl] // 2-byte Reload240; NOPAIR-NEXT: ldr p12, [sp, #7, mul vl] // 2-byte Reload241; NOPAIR-NEXT: ldr p11, [sp, #8, mul vl] // 2-byte Reload242; NOPAIR-NEXT: ldr p10, [sp, #9, mul vl] // 2-byte Reload243; NOPAIR-NEXT: ldr p9, [sp, #10, mul vl] // 2-byte Reload244; NOPAIR-NEXT: ldr p8, [sp, #11, mul vl] // 2-byte Reload245; NOPAIR-NEXT: ldr p7, [sp, #12, mul vl] // 2-byte Reload246; NOPAIR-NEXT: ldr p6, [sp, #13, mul vl] // 2-byte Reload247; NOPAIR-NEXT: ldr p5, [sp, #14, mul vl] // 2-byte Reload248; NOPAIR-NEXT: ldr p4, [sp, #15, mul vl] // 2-byte Reload249; NOPAIR-NEXT: addvl sp, sp, #18250; NOPAIR-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload251; NOPAIR-NEXT: ret252;253; PAIR-LABEL: fhalf:254; PAIR: // %bb.0:255; PAIR-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill256; PAIR-NEXT: addvl sp, sp, #-18257; PAIR-NEXT: str p8, [sp, #11, mul vl] // 2-byte Spill258; PAIR-NEXT: ptrue pn8.b259; PAIR-NEXT: str p15, [sp, #4, mul vl] // 2-byte Spill260; PAIR-NEXT: st1b { z22.b, z23.b }, pn8, [sp, #2, mul vl] // 32-byte Folded Spill261; PAIR-NEXT: st1b { z20.b, z21.b }, pn8, [sp, #4, mul vl] // 32-byte Folded Spill262; PAIR-NEXT: str p14, [sp, #5, mul vl] // 2-byte Spill263; PAIR-NEXT: st1b { z18.b, z19.b }, pn8, [sp, #6, mul vl] // 32-byte Folded Spill264; PAIR-NEXT: st1b { z16.b, z17.b }, pn8, [sp, #8, mul vl] // 32-byte Folded Spill265; PAIR-NEXT: str p13, [sp, #6, mul vl] // 2-byte Spill266; PAIR-NEXT: st1b { z14.b, z15.b }, pn8, [sp, #10, mul vl] // 32-byte Folded Spill267; PAIR-NEXT: st1b { z12.b, z13.b }, pn8, [sp, #12, mul vl] // 32-byte Folded Spill268; PAIR-NEXT: str p12, [sp, #7, mul vl] // 2-byte Spill269; PAIR-NEXT: st1b { z10.b, z11.b }, pn8, [sp, #14, mul vl] // 32-byte Folded Spill270; PAIR-NEXT: str p11, [sp, #8, mul vl] // 2-byte Spill271; PAIR-NEXT: str p10, [sp, #9, mul vl] // 2-byte Spill272; PAIR-NEXT: str p9, [sp, #10, mul vl] // 2-byte Spill273; PAIR-NEXT: str p7, [sp, #12, mul vl] // 2-byte Spill274; PAIR-NEXT: str p6, [sp, #13, mul vl] // 2-byte Spill275; PAIR-NEXT: str p5, [sp, #14, mul vl] // 2-byte Spill276; PAIR-NEXT: str p4, [sp, #15, mul vl] // 2-byte Spill277; PAIR-NEXT: str z9, [sp, #16, mul vl] // 16-byte Folded Spill278; PAIR-NEXT: str z8, [sp, #17, mul vl] // 16-byte Folded Spill279; PAIR-NEXT: smstop sm280; PAIR-NEXT: bl my_func281; PAIR-NEXT: smstart sm282; PAIR-NEXT: ptrue pn8.b283; PAIR-NEXT: ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload284; PAIR-NEXT: ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload285; PAIR-NEXT: ld1b { z22.b, z23.b }, pn8/z, [sp, #2, mul vl] // 32-byte Folded Reload286; PAIR-NEXT: ld1b { z20.b, z21.b }, pn8/z, [sp, #4, mul vl] // 32-byte Folded Reload287; PAIR-NEXT: ld1b { z18.b, z19.b }, pn8/z, [sp, #6, mul vl] // 32-byte Folded Reload288; PAIR-NEXT: ld1b { z16.b, z17.b }, pn8/z, [sp, #8, mul vl] // 32-byte Folded Reload289; PAIR-NEXT: ld1b { z14.b, z15.b }, pn8/z, [sp, #10, mul vl] // 32-byte Folded Reload290; PAIR-NEXT: ld1b { z12.b, z13.b }, pn8/z, [sp, #12, mul vl] // 32-byte Folded Reload291; PAIR-NEXT: ld1b { z10.b, z11.b }, pn8/z, [sp, #14, mul vl] // 32-byte Folded Reload292; PAIR-NEXT: ldr p15, [sp, #4, mul vl] // 2-byte Reload293; PAIR-NEXT: ldr p14, [sp, #5, mul vl] // 2-byte Reload294; PAIR-NEXT: ldr p13, [sp, #6, mul vl] // 2-byte Reload295; PAIR-NEXT: ldr p12, [sp, #7, mul vl] // 2-byte Reload296; PAIR-NEXT: ldr p11, [sp, #8, mul vl] // 2-byte Reload297; PAIR-NEXT: ldr p10, [sp, #9, mul vl] // 2-byte Reload298; PAIR-NEXT: ldr p9, [sp, #10, mul vl] // 2-byte Reload299; PAIR-NEXT: ldr p8, [sp, #11, mul vl] // 2-byte Reload300; PAIR-NEXT: ldr p7, [sp, #12, mul vl] // 2-byte Reload301; PAIR-NEXT: ldr p6, [sp, #13, mul vl] // 2-byte Reload302; PAIR-NEXT: ldr p5, [sp, #14, mul vl] // 2-byte Reload303; PAIR-NEXT: ldr p4, [sp, #15, mul vl] // 2-byte Reload304; PAIR-NEXT: addvl sp, sp, #18305; PAIR-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload306; PAIR-NEXT: ret307 call void @my_func()308 ret void309}310 311define void @ffloat(<vscale x 4 x i32> %v) #2 {312; NOPAIR-LABEL: ffloat:313; NOPAIR: // %bb.0:314; NOPAIR-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill315; NOPAIR-NEXT: addsvl sp, sp, #-18316; NOPAIR-NEXT: str p15, [sp, #4, mul vl] // 2-byte Spill317; NOPAIR-NEXT: str p14, [sp, #5, mul vl] // 2-byte Spill318; NOPAIR-NEXT: str p13, [sp, #6, mul vl] // 2-byte Spill319; NOPAIR-NEXT: str p12, [sp, #7, mul vl] // 2-byte Spill320; NOPAIR-NEXT: str p11, [sp, #8, mul vl] // 2-byte Spill321; NOPAIR-NEXT: str p10, [sp, #9, mul vl] // 2-byte Spill322; NOPAIR-NEXT: str p9, [sp, #10, mul vl] // 2-byte Spill323; NOPAIR-NEXT: str p8, [sp, #11, mul vl] // 2-byte Spill324; NOPAIR-NEXT: str p7, [sp, #12, mul vl] // 2-byte Spill325; NOPAIR-NEXT: str p6, [sp, #13, mul vl] // 2-byte Spill326; NOPAIR-NEXT: str p5, [sp, #14, mul vl] // 2-byte Spill327; NOPAIR-NEXT: str p4, [sp, #15, mul vl] // 2-byte Spill328; NOPAIR-NEXT: str z23, [sp, #2, mul vl] // 16-byte Folded Spill329; NOPAIR-NEXT: str z22, [sp, #3, mul vl] // 16-byte Folded Spill330; NOPAIR-NEXT: str z21, [sp, #4, mul vl] // 16-byte Folded Spill331; NOPAIR-NEXT: str z20, [sp, #5, mul vl] // 16-byte Folded Spill332; NOPAIR-NEXT: str z19, [sp, #6, mul vl] // 16-byte Folded Spill333; NOPAIR-NEXT: str z18, [sp, #7, mul vl] // 16-byte Folded Spill334; NOPAIR-NEXT: str z17, [sp, #8, mul vl] // 16-byte Folded Spill335; NOPAIR-NEXT: str z16, [sp, #9, mul vl] // 16-byte Folded Spill336; NOPAIR-NEXT: str z15, [sp, #10, mul vl] // 16-byte Folded Spill337; NOPAIR-NEXT: str z14, [sp, #11, mul vl] // 16-byte Folded Spill338; NOPAIR-NEXT: str z13, [sp, #12, mul vl] // 16-byte Folded Spill339; NOPAIR-NEXT: str z12, [sp, #13, mul vl] // 16-byte Folded Spill340; NOPAIR-NEXT: str z11, [sp, #14, mul vl] // 16-byte Folded Spill341; NOPAIR-NEXT: str z10, [sp, #15, mul vl] // 16-byte Folded Spill342; NOPAIR-NEXT: str z9, [sp, #16, mul vl] // 16-byte Folded Spill343; NOPAIR-NEXT: str z8, [sp, #17, mul vl] // 16-byte Folded Spill344; NOPAIR-NEXT: smstart sm345; NOPAIR-NEXT: smstop sm346; NOPAIR-NEXT: bl my_func347; NOPAIR-NEXT: ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload348; NOPAIR-NEXT: ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload349; NOPAIR-NEXT: ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload350; NOPAIR-NEXT: ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload351; NOPAIR-NEXT: ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload352; NOPAIR-NEXT: ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload353; NOPAIR-NEXT: ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload354; NOPAIR-NEXT: ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload355; NOPAIR-NEXT: ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload356; NOPAIR-NEXT: ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload357; NOPAIR-NEXT: ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload358; NOPAIR-NEXT: ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload359; NOPAIR-NEXT: ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload360; NOPAIR-NEXT: ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload361; NOPAIR-NEXT: ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload362; NOPAIR-NEXT: ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload363; NOPAIR-NEXT: ldr p15, [sp, #4, mul vl] // 2-byte Reload364; NOPAIR-NEXT: ldr p14, [sp, #5, mul vl] // 2-byte Reload365; NOPAIR-NEXT: ldr p13, [sp, #6, mul vl] // 2-byte Reload366; NOPAIR-NEXT: ldr p12, [sp, #7, mul vl] // 2-byte Reload367; NOPAIR-NEXT: ldr p11, [sp, #8, mul vl] // 2-byte Reload368; NOPAIR-NEXT: ldr p10, [sp, #9, mul vl] // 2-byte Reload369; NOPAIR-NEXT: ldr p9, [sp, #10, mul vl] // 2-byte Reload370; NOPAIR-NEXT: ldr p8, [sp, #11, mul vl] // 2-byte Reload371; NOPAIR-NEXT: ldr p7, [sp, #12, mul vl] // 2-byte Reload372; NOPAIR-NEXT: ldr p6, [sp, #13, mul vl] // 2-byte Reload373; NOPAIR-NEXT: ldr p5, [sp, #14, mul vl] // 2-byte Reload374; NOPAIR-NEXT: ldr p4, [sp, #15, mul vl] // 2-byte Reload375; NOPAIR-NEXT: addsvl sp, sp, #18376; NOPAIR-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload377; NOPAIR-NEXT: ret378;379; PAIR-LABEL: ffloat:380; PAIR: // %bb.0:381; PAIR-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill382; PAIR-NEXT: addsvl sp, sp, #-18383; PAIR-NEXT: str p15, [sp, #4, mul vl] // 2-byte Spill384; PAIR-NEXT: str p14, [sp, #5, mul vl] // 2-byte Spill385; PAIR-NEXT: str p13, [sp, #6, mul vl] // 2-byte Spill386; PAIR-NEXT: str p12, [sp, #7, mul vl] // 2-byte Spill387; PAIR-NEXT: str p11, [sp, #8, mul vl] // 2-byte Spill388; PAIR-NEXT: str p10, [sp, #9, mul vl] // 2-byte Spill389; PAIR-NEXT: str p9, [sp, #10, mul vl] // 2-byte Spill390; PAIR-NEXT: str p8, [sp, #11, mul vl] // 2-byte Spill391; PAIR-NEXT: str p7, [sp, #12, mul vl] // 2-byte Spill392; PAIR-NEXT: str p6, [sp, #13, mul vl] // 2-byte Spill393; PAIR-NEXT: str p5, [sp, #14, mul vl] // 2-byte Spill394; PAIR-NEXT: str p4, [sp, #15, mul vl] // 2-byte Spill395; PAIR-NEXT: str z23, [sp, #2, mul vl] // 16-byte Folded Spill396; PAIR-NEXT: str z22, [sp, #3, mul vl] // 16-byte Folded Spill397; PAIR-NEXT: str z21, [sp, #4, mul vl] // 16-byte Folded Spill398; PAIR-NEXT: str z20, [sp, #5, mul vl] // 16-byte Folded Spill399; PAIR-NEXT: str z19, [sp, #6, mul vl] // 16-byte Folded Spill400; PAIR-NEXT: str z18, [sp, #7, mul vl] // 16-byte Folded Spill401; PAIR-NEXT: str z17, [sp, #8, mul vl] // 16-byte Folded Spill402; PAIR-NEXT: str z16, [sp, #9, mul vl] // 16-byte Folded Spill403; PAIR-NEXT: str z15, [sp, #10, mul vl] // 16-byte Folded Spill404; PAIR-NEXT: str z14, [sp, #11, mul vl] // 16-byte Folded Spill405; PAIR-NEXT: str z13, [sp, #12, mul vl] // 16-byte Folded Spill406; PAIR-NEXT: str z12, [sp, #13, mul vl] // 16-byte Folded Spill407; PAIR-NEXT: str z11, [sp, #14, mul vl] // 16-byte Folded Spill408; PAIR-NEXT: str z10, [sp, #15, mul vl] // 16-byte Folded Spill409; PAIR-NEXT: str z9, [sp, #16, mul vl] // 16-byte Folded Spill410; PAIR-NEXT: str z8, [sp, #17, mul vl] // 16-byte Folded Spill411; PAIR-NEXT: smstart sm412; PAIR-NEXT: smstop sm413; PAIR-NEXT: bl my_func414; PAIR-NEXT: ldr z23, [sp, #2, mul vl] // 16-byte Folded Reload415; PAIR-NEXT: ldr z22, [sp, #3, mul vl] // 16-byte Folded Reload416; PAIR-NEXT: ldr z21, [sp, #4, mul vl] // 16-byte Folded Reload417; PAIR-NEXT: ldr z20, [sp, #5, mul vl] // 16-byte Folded Reload418; PAIR-NEXT: ldr z19, [sp, #6, mul vl] // 16-byte Folded Reload419; PAIR-NEXT: ldr z18, [sp, #7, mul vl] // 16-byte Folded Reload420; PAIR-NEXT: ldr z17, [sp, #8, mul vl] // 16-byte Folded Reload421; PAIR-NEXT: ldr z16, [sp, #9, mul vl] // 16-byte Folded Reload422; PAIR-NEXT: ldr z15, [sp, #10, mul vl] // 16-byte Folded Reload423; PAIR-NEXT: ldr z14, [sp, #11, mul vl] // 16-byte Folded Reload424; PAIR-NEXT: ldr z13, [sp, #12, mul vl] // 16-byte Folded Reload425; PAIR-NEXT: ldr z12, [sp, #13, mul vl] // 16-byte Folded Reload426; PAIR-NEXT: ldr z11, [sp, #14, mul vl] // 16-byte Folded Reload427; PAIR-NEXT: ldr z10, [sp, #15, mul vl] // 16-byte Folded Reload428; PAIR-NEXT: ldr z9, [sp, #16, mul vl] // 16-byte Folded Reload429; PAIR-NEXT: ldr z8, [sp, #17, mul vl] // 16-byte Folded Reload430; PAIR-NEXT: ldr p15, [sp, #4, mul vl] // 2-byte Reload431; PAIR-NEXT: ldr p14, [sp, #5, mul vl] // 2-byte Reload432; PAIR-NEXT: ldr p13, [sp, #6, mul vl] // 2-byte Reload433; PAIR-NEXT: ldr p12, [sp, #7, mul vl] // 2-byte Reload434; PAIR-NEXT: ldr p11, [sp, #8, mul vl] // 2-byte Reload435; PAIR-NEXT: ldr p10, [sp, #9, mul vl] // 2-byte Reload436; PAIR-NEXT: ldr p9, [sp, #10, mul vl] // 2-byte Reload437; PAIR-NEXT: ldr p8, [sp, #11, mul vl] // 2-byte Reload438; PAIR-NEXT: ldr p7, [sp, #12, mul vl] // 2-byte Reload439; PAIR-NEXT: ldr p6, [sp, #13, mul vl] // 2-byte Reload440; PAIR-NEXT: ldr p5, [sp, #14, mul vl] // 2-byte Reload441; PAIR-NEXT: ldr p4, [sp, #15, mul vl] // 2-byte Reload442; PAIR-NEXT: addsvl sp, sp, #18443; PAIR-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload444; PAIR-NEXT: ret445 call void @my_func()446 ret void447}448 449 450 451attributes #0 = { nounwind "aarch64_pstate_sm_compatible" }452attributes #1 = { nounwind "aarch64_pstate_sm_enabled" }453attributes #2 = { nounwind "aarch64_pstate_sm_body" }454