1573 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -aarch64-streaming-hazard-size=0 < %s | FileCheck %s3 4target triple = "aarch64-unknown-unknown-eabi-elf"5 6; This test verifies that call arguments and results are not coalesced7; with SVE vector registers by the coalescer, such that no 'mul vl'8; ldr/str pairs are generated in the streaming-mode-changing call9; sequence.10 11;12; Scalar arguments13;14 15define void @dont_coalesce_arg_i8(i8 %arg, ptr %ptr) #0 {16; CHECK-LABEL: dont_coalesce_arg_i8:17; CHECK: // %bb.0:18; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill19; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill20; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill21; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill22; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill23; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill24; CHECK-NEXT: addvl sp, sp, #-125; CHECK-NEXT: fmov s0, w026; CHECK-NEXT: mov x19, x127; CHECK-NEXT: str z0, [sp] // 16-byte Folded Spill28; CHECK-NEXT: smstop sm29; CHECK-NEXT: bl use_i830; CHECK-NEXT: smstart sm31; CHECK-NEXT: ldr z0, [sp] // 16-byte Folded Reload32; CHECK-NEXT: str z0, [x19]33; CHECK-NEXT: addvl sp, sp, #134; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload35; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload36; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload37; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload38; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload39; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload40; CHECK-NEXT: ret41 %vec = insertelement <vscale x 16 x i8> poison, i8 %arg, i32 042 call void @use_i8(i8 %arg)43 store <vscale x 16 x i8> %vec, ptr %ptr44 ret void45}46 47define void @dont_coalesce_arg_i16(i16 %arg, ptr %ptr) #0 {48; CHECK-LABEL: dont_coalesce_arg_i16:49; CHECK: // %bb.0:50; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill51; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill52; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill53; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill54; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill55; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill56; CHECK-NEXT: addvl sp, sp, #-157; CHECK-NEXT: fmov s0, w058; CHECK-NEXT: mov x19, x159; CHECK-NEXT: str z0, [sp] // 16-byte Folded Spill60; CHECK-NEXT: smstop sm61; CHECK-NEXT: bl use_i1662; CHECK-NEXT: smstart sm63; CHECK-NEXT: ldr z0, [sp] // 16-byte Folded Reload64; CHECK-NEXT: str z0, [x19]65; CHECK-NEXT: addvl sp, sp, #166; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload67; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload68; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload69; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload70; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload71; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload72; CHECK-NEXT: ret73 %vec = insertelement <vscale x 8 x i16> poison, i16 %arg, i32 074 call void @use_i16(i16 %arg)75 store <vscale x 8 x i16> %vec, ptr %ptr76 ret void77}78 79define void @dont_coalesce_arg_i32(i32 %arg, ptr %ptr) #0 {80; CHECK-LABEL: dont_coalesce_arg_i32:81; CHECK: // %bb.0:82; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill83; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill84; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill85; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill86; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill87; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill88; CHECK-NEXT: addvl sp, sp, #-189; CHECK-NEXT: fmov s0, w090; CHECK-NEXT: mov x19, x191; CHECK-NEXT: str z0, [sp] // 16-byte Folded Spill92; CHECK-NEXT: smstop sm93; CHECK-NEXT: bl use_i3294; CHECK-NEXT: smstart sm95; CHECK-NEXT: ldr z0, [sp] // 16-byte Folded Reload96; CHECK-NEXT: str z0, [x19]97; CHECK-NEXT: addvl sp, sp, #198; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload99; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload100; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload101; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload102; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload103; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload104; CHECK-NEXT: ret105 %vec = insertelement <vscale x 4 x i32> poison, i32 %arg, i32 0106 call void @use_i32(i32 %arg)107 store <vscale x 4 x i32> %vec, ptr %ptr108 ret void109}110 111define void @dont_coalesce_arg_i64(i64 %arg, ptr %ptr) #0 {112; CHECK-LABEL: dont_coalesce_arg_i64:113; CHECK: // %bb.0:114; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill115; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill116; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill117; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill118; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill119; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill120; CHECK-NEXT: addvl sp, sp, #-1121; CHECK-NEXT: fmov d0, x0122; CHECK-NEXT: mov x19, x1123; CHECK-NEXT: str z0, [sp] // 16-byte Folded Spill124; CHECK-NEXT: smstop sm125; CHECK-NEXT: bl use_i64126; CHECK-NEXT: smstart sm127; CHECK-NEXT: ldr z0, [sp] // 16-byte Folded Reload128; CHECK-NEXT: str z0, [x19]129; CHECK-NEXT: addvl sp, sp, #1130; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload131; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload132; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload133; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload134; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload135; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload136; CHECK-NEXT: ret137 %vec = insertelement <vscale x 2 x i64> poison, i64 %arg, i32 0138 call void @use_i64(i64 %arg)139 store <vscale x 2 x i64> %vec, ptr %ptr140 ret void141}142 143define void @dont_coalesce_arg_f16(half %arg, ptr %ptr) #0 {144; CHECK-LABEL: dont_coalesce_arg_f16:145; CHECK: // %bb.0:146; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill147; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill148; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill149; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill150; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill151; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill152; CHECK-NEXT: sub sp, sp, #16153; CHECK-NEXT: addvl sp, sp, #-1154; CHECK-NEXT: add x8, sp, #16155; CHECK-NEXT: mov x19, x0156; CHECK-NEXT: str h0, [sp, #14] // 2-byte Spill157; CHECK-NEXT: // kill: def $h0 killed $h0 def $z0158; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill159; CHECK-NEXT: smstop sm160; CHECK-NEXT: ldr h0, [sp, #14] // 2-byte Reload161; CHECK-NEXT: bl use_f16162; CHECK-NEXT: smstart sm163; CHECK-NEXT: add x8, sp, #16164; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload165; CHECK-NEXT: str z0, [x19]166; CHECK-NEXT: addvl sp, sp, #1167; CHECK-NEXT: add sp, sp, #16168; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload169; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload170; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload171; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload172; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload173; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload174; CHECK-NEXT: ret175 %vec = insertelement <vscale x 8 x half> poison, half %arg, i32 0176 call void @use_f16(half %arg)177 store <vscale x 8 x half> %vec, ptr %ptr178 ret void179}180 181define void @dont_coalesce_arg_f32(float %arg, ptr %ptr) #0 {182; CHECK-LABEL: dont_coalesce_arg_f32:183; CHECK: // %bb.0:184; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill185; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill186; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill187; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill188; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill189; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill190; CHECK-NEXT: sub sp, sp, #16191; CHECK-NEXT: addvl sp, sp, #-1192; CHECK-NEXT: add x8, sp, #16193; CHECK-NEXT: mov x19, x0194; CHECK-NEXT: str s0, [sp, #12] // 4-byte Spill195; CHECK-NEXT: // kill: def $s0 killed $s0 def $z0196; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill197; CHECK-NEXT: smstop sm198; CHECK-NEXT: ldr s0, [sp, #12] // 4-byte Reload199; CHECK-NEXT: bl use_f32200; CHECK-NEXT: smstart sm201; CHECK-NEXT: add x8, sp, #16202; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload203; CHECK-NEXT: str z0, [x19]204; CHECK-NEXT: addvl sp, sp, #1205; CHECK-NEXT: add sp, sp, #16206; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload207; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload208; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload209; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload210; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload211; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload212; CHECK-NEXT: ret213 %vec = insertelement <vscale x 4 x float> poison, float %arg, i32 0214 call void @use_f32(float %arg)215 store <vscale x 4 x float> %vec, ptr %ptr216 ret void217}218 219define void @dont_coalesce_arg_f64(double %arg, ptr %ptr) #0 {220; CHECK-LABEL: dont_coalesce_arg_f64:221; CHECK: // %bb.0:222; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill223; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill224; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill225; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill226; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill227; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill228; CHECK-NEXT: sub sp, sp, #16229; CHECK-NEXT: addvl sp, sp, #-1230; CHECK-NEXT: add x8, sp, #16231; CHECK-NEXT: mov x19, x0232; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill233; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0234; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill235; CHECK-NEXT: smstop sm236; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload237; CHECK-NEXT: bl use_f64238; CHECK-NEXT: smstart sm239; CHECK-NEXT: add x8, sp, #16240; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload241; CHECK-NEXT: str z0, [x19]242; CHECK-NEXT: addvl sp, sp, #1243; CHECK-NEXT: add sp, sp, #16244; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload245; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload246; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload247; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload248; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload249; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload250; CHECK-NEXT: ret251 %vec = insertelement <vscale x 2 x double> poison, double %arg, i32 0252 call void @use_f64(double %arg)253 store <vscale x 2 x double> %vec, ptr %ptr254 ret void255}256 257 258;259; Single-element vector arguments260;261 262define void @dont_coalesce_arg_v1i8(<1 x i8> %arg, ptr %ptr) #0 {263; CHECK-LABEL: dont_coalesce_arg_v1i8:264; CHECK: // %bb.0:265; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill266; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill267; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill268; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill269; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill270; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill271; CHECK-NEXT: sub sp, sp, #16272; CHECK-NEXT: addvl sp, sp, #-1273; CHECK-NEXT: add x8, sp, #16274; CHECK-NEXT: mov x19, x0275; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill276; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0277; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill278; CHECK-NEXT: smstop sm279; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload280; CHECK-NEXT: bl use_v16i8281; CHECK-NEXT: smstart sm282; CHECK-NEXT: add x8, sp, #16283; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload284; CHECK-NEXT: str z0, [x19]285; CHECK-NEXT: addvl sp, sp, #1286; CHECK-NEXT: add sp, sp, #16287; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload288; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload289; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload290; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload291; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload292; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload293; CHECK-NEXT: ret294 %elt = extractelement <1 x i8> %arg, i32 0295 %vec = insertelement <vscale x 16 x i8> poison, i8 %elt, i32 0296 call void @use_v16i8(<1 x i8> %arg)297 store <vscale x 16 x i8> %vec, ptr %ptr298 ret void299}300 301define void @dont_coalesce_arg_v1i16(<1 x i16> %arg, ptr %ptr) #0 {302; CHECK-LABEL: dont_coalesce_arg_v1i16:303; CHECK: // %bb.0:304; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill305; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill306; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill307; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill308; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill309; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill310; CHECK-NEXT: sub sp, sp, #16311; CHECK-NEXT: addvl sp, sp, #-1312; CHECK-NEXT: add x8, sp, #16313; CHECK-NEXT: mov x19, x0314; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill315; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0316; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill317; CHECK-NEXT: smstop sm318; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload319; CHECK-NEXT: bl use_v8i16320; CHECK-NEXT: smstart sm321; CHECK-NEXT: add x8, sp, #16322; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload323; CHECK-NEXT: str z0, [x19]324; CHECK-NEXT: addvl sp, sp, #1325; CHECK-NEXT: add sp, sp, #16326; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload327; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload328; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload329; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload330; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload331; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload332; CHECK-NEXT: ret333 %elt = extractelement <1 x i16> %arg, i32 0334 %vec = insertelement <vscale x 8 x i16> poison, i16 %elt, i32 0335 call void @use_v8i16(<1 x i16> %arg)336 store <vscale x 8 x i16> %vec, ptr %ptr337 ret void338}339 340define void @dont_coalesce_arg_v1i32(<1 x i32> %arg, ptr %ptr) #0 {341; CHECK-LABEL: dont_coalesce_arg_v1i32:342; CHECK: // %bb.0:343; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill344; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill345; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill346; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill347; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill348; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill349; CHECK-NEXT: sub sp, sp, #16350; CHECK-NEXT: addvl sp, sp, #-1351; CHECK-NEXT: add x8, sp, #16352; CHECK-NEXT: mov x19, x0353; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill354; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0355; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill356; CHECK-NEXT: smstop sm357; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload358; CHECK-NEXT: bl use_v4i32359; CHECK-NEXT: smstart sm360; CHECK-NEXT: add x8, sp, #16361; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload362; CHECK-NEXT: str z0, [x19]363; CHECK-NEXT: addvl sp, sp, #1364; CHECK-NEXT: add sp, sp, #16365; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload366; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload367; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload368; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload369; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload370; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload371; CHECK-NEXT: ret372 %elt = extractelement <1 x i32> %arg, i32 0373 %vec = insertelement <vscale x 4 x i32> poison, i32 %elt, i32 0374 call void @use_v4i32(<1 x i32> %arg)375 store <vscale x 4 x i32> %vec, ptr %ptr376 ret void377}378 379define void @dont_coalesce_arg_v1i64(<1 x i64> %arg, ptr %ptr) #0 {380; CHECK-LABEL: dont_coalesce_arg_v1i64:381; CHECK: // %bb.0:382; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill383; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill384; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill385; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill386; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill387; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill388; CHECK-NEXT: sub sp, sp, #16389; CHECK-NEXT: addvl sp, sp, #-1390; CHECK-NEXT: add x8, sp, #16391; CHECK-NEXT: mov x19, x0392; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill393; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0394; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill395; CHECK-NEXT: smstop sm396; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload397; CHECK-NEXT: bl use_v2i64398; CHECK-NEXT: smstart sm399; CHECK-NEXT: add x8, sp, #16400; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload401; CHECK-NEXT: str z0, [x19]402; CHECK-NEXT: addvl sp, sp, #1403; CHECK-NEXT: add sp, sp, #16404; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload405; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload406; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload407; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload408; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload409; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload410; CHECK-NEXT: ret411 %elt = extractelement <1 x i64> %arg, i32 0412 %vec = insertelement <vscale x 2 x i64> poison, i64 %elt, i32 0413 call void @use_v2i64(<1 x i64> %arg)414 store <vscale x 2 x i64> %vec, ptr %ptr415 ret void416}417 418define void @dont_coalesce_arg_v1f16(<1 x half> %arg, ptr %ptr) #0 {419; CHECK-LABEL: dont_coalesce_arg_v1f16:420; CHECK: // %bb.0:421; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill422; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill423; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill424; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill425; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill426; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill427; CHECK-NEXT: sub sp, sp, #16428; CHECK-NEXT: addvl sp, sp, #-1429; CHECK-NEXT: add x8, sp, #16430; CHECK-NEXT: mov x19, x0431; CHECK-NEXT: str h0, [sp, #14] // 2-byte Spill432; CHECK-NEXT: // kill: def $h0 killed $h0 def $z0433; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill434; CHECK-NEXT: smstop sm435; CHECK-NEXT: ldr h0, [sp, #14] // 2-byte Reload436; CHECK-NEXT: bl use_v8f16437; CHECK-NEXT: smstart sm438; CHECK-NEXT: add x8, sp, #16439; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload440; CHECK-NEXT: str z0, [x19]441; CHECK-NEXT: addvl sp, sp, #1442; CHECK-NEXT: add sp, sp, #16443; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload444; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload445; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload446; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload447; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload448; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload449; CHECK-NEXT: ret450 %elt = extractelement <1 x half> %arg, i32 0451 %vec = insertelement <vscale x 8 x half> poison, half %elt, i32 0452 call void @use_v8f16(<1 x half> %arg)453 store <vscale x 8 x half> %vec, ptr %ptr454 ret void455}456 457define void @dont_coalesce_arg_v1f32(<1 x float> %arg, ptr %ptr) #0 {458; CHECK-LABEL: dont_coalesce_arg_v1f32:459; CHECK: // %bb.0:460; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill461; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill462; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill463; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill464; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill465; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill466; CHECK-NEXT: sub sp, sp, #16467; CHECK-NEXT: addvl sp, sp, #-1468; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0469; CHECK-NEXT: add x8, sp, #16470; CHECK-NEXT: mov x19, x0471; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill472; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0473; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill474; CHECK-NEXT: smstop sm475; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload476; CHECK-NEXT: bl use_v4f32477; CHECK-NEXT: smstart sm478; CHECK-NEXT: add x8, sp, #16479; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload480; CHECK-NEXT: str z0, [x19]481; CHECK-NEXT: addvl sp, sp, #1482; CHECK-NEXT: add sp, sp, #16483; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload484; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload485; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload486; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload487; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload488; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload489; CHECK-NEXT: ret490 %elt = extractelement <1 x float> %arg, i32 0491 %vec = insertelement <vscale x 4 x float> poison, float %elt, i32 0492 call void @use_v4f32(<1 x float> %arg)493 store <vscale x 4 x float> %vec, ptr %ptr494 ret void495}496 497define void @dont_coalesce_arg_v1f64(<1 x double> %arg, ptr %ptr) #0 {498; CHECK-LABEL: dont_coalesce_arg_v1f64:499; CHECK: // %bb.0:500; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill501; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill502; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill503; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill504; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill505; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill506; CHECK-NEXT: sub sp, sp, #16507; CHECK-NEXT: addvl sp, sp, #-1508; CHECK-NEXT: add x8, sp, #16509; CHECK-NEXT: mov x19, x0510; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill511; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0512; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill513; CHECK-NEXT: smstop sm514; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload515; CHECK-NEXT: bl use_v2f64516; CHECK-NEXT: smstart sm517; CHECK-NEXT: add x8, sp, #16518; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload519; CHECK-NEXT: str z0, [x19]520; CHECK-NEXT: addvl sp, sp, #1521; CHECK-NEXT: add sp, sp, #16522; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload523; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload524; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload525; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload526; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload527; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload528; CHECK-NEXT: ret529 %elt = extractelement <1 x double> %arg, i32 0530 %vec = insertelement <vscale x 2 x double> poison, double %elt, i32 0531 call void @use_v2f64(<1 x double> %arg)532 store <vscale x 2 x double> %vec, ptr %ptr533 ret void534}535 536;537; Full vector arguments538;539 540define void @dont_coalesce_arg_v16i8(<16 x i8> %arg, ptr %ptr) #0 {541; CHECK-LABEL: dont_coalesce_arg_v16i8:542; CHECK: // %bb.0:543; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill544; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill545; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill546; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill547; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill548; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill549; CHECK-NEXT: sub sp, sp, #16550; CHECK-NEXT: addvl sp, sp, #-1551; CHECK-NEXT: add x8, sp, #16552; CHECK-NEXT: mov x19, x0553; CHECK-NEXT: str q0, [sp] // 16-byte Spill554; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0555; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill556; CHECK-NEXT: smstop sm557; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload558; CHECK-NEXT: bl use_v16i8559; CHECK-NEXT: smstart sm560; CHECK-NEXT: add x8, sp, #16561; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload562; CHECK-NEXT: str z0, [x19]563; CHECK-NEXT: addvl sp, sp, #1564; CHECK-NEXT: add sp, sp, #16565; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload566; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload567; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload568; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload569; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload570; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload571; CHECK-NEXT: ret572 %vec = call <vscale x 16 x i8> @llvm.vector.insert.nxv16i8.v16i8(<vscale x 16 x i8> poison, <16 x i8> %arg, i64 0)573 call void @use_v16i8(<16 x i8> %arg)574 store <vscale x 16 x i8> %vec, ptr %ptr575 ret void576}577 578define void @dont_coalesce_arg_v8i16(<8 x i16> %arg, ptr %ptr) #0 {579; CHECK-LABEL: dont_coalesce_arg_v8i16:580; CHECK: // %bb.0:581; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill582; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill583; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill584; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill585; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill586; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill587; CHECK-NEXT: sub sp, sp, #16588; CHECK-NEXT: addvl sp, sp, #-1589; CHECK-NEXT: add x8, sp, #16590; CHECK-NEXT: mov x19, x0591; CHECK-NEXT: str q0, [sp] // 16-byte Spill592; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0593; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill594; CHECK-NEXT: smstop sm595; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload596; CHECK-NEXT: bl use_v8i16597; CHECK-NEXT: smstart sm598; CHECK-NEXT: add x8, sp, #16599; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload600; CHECK-NEXT: str z0, [x19]601; CHECK-NEXT: addvl sp, sp, #1602; CHECK-NEXT: add sp, sp, #16603; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload604; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload605; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload606; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload607; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload608; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload609; CHECK-NEXT: ret610 %vec = call <vscale x 8 x i16> @llvm.vector.insert.nxv8i16.v8i16(<vscale x 8 x i16> poison, <8 x i16> %arg, i64 0)611 call void @use_v8i16(<8 x i16> %arg)612 store <vscale x 8 x i16> %vec, ptr %ptr613 ret void614}615 616define void @dont_coalesce_arg_v4i32(<4 x i32> %arg, ptr %ptr) #0 {617; CHECK-LABEL: dont_coalesce_arg_v4i32:618; CHECK: // %bb.0:619; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill620; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill621; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill622; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill623; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill624; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill625; CHECK-NEXT: sub sp, sp, #16626; CHECK-NEXT: addvl sp, sp, #-1627; CHECK-NEXT: add x8, sp, #16628; CHECK-NEXT: mov x19, x0629; CHECK-NEXT: str q0, [sp] // 16-byte Spill630; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0631; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill632; CHECK-NEXT: smstop sm633; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload634; CHECK-NEXT: bl use_v4i32635; CHECK-NEXT: smstart sm636; CHECK-NEXT: add x8, sp, #16637; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload638; CHECK-NEXT: str z0, [x19]639; CHECK-NEXT: addvl sp, sp, #1640; CHECK-NEXT: add sp, sp, #16641; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload642; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload643; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload644; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload645; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload646; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload647; CHECK-NEXT: ret648 %vec = call <vscale x 4 x i32> @llvm.vector.insert.nxv4i32.v4i32(<vscale x 4 x i32> poison, <4 x i32> %arg, i64 0)649 call void @use_v4i32(<4 x i32> %arg)650 store <vscale x 4 x i32> %vec, ptr %ptr651 ret void652}653 654define void @dont_coalesce_arg_v2i64(<2 x i64> %arg, ptr %ptr) #0 {655; CHECK-LABEL: dont_coalesce_arg_v2i64:656; CHECK: // %bb.0:657; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill658; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill659; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill660; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill661; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill662; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill663; CHECK-NEXT: sub sp, sp, #16664; CHECK-NEXT: addvl sp, sp, #-1665; CHECK-NEXT: add x8, sp, #16666; CHECK-NEXT: mov x19, x0667; CHECK-NEXT: str q0, [sp] // 16-byte Spill668; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0669; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill670; CHECK-NEXT: smstop sm671; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload672; CHECK-NEXT: bl use_v2i64673; CHECK-NEXT: smstart sm674; CHECK-NEXT: add x8, sp, #16675; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload676; CHECK-NEXT: str z0, [x19]677; CHECK-NEXT: addvl sp, sp, #1678; CHECK-NEXT: add sp, sp, #16679; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload680; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload681; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload682; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload683; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload684; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload685; CHECK-NEXT: ret686 %vec = call <vscale x 2 x i64> @llvm.vector.insert.nxv2i64.v2i64(<vscale x 2 x i64> poison, <2 x i64> %arg, i64 0)687 call void @use_v2i64(<2 x i64> %arg)688 store <vscale x 2 x i64> %vec, ptr %ptr689 ret void690}691 692define void @dont_coalesce_arg_v8f16(<8 x half> %arg, ptr %ptr) #0 {693; CHECK-LABEL: dont_coalesce_arg_v8f16:694; CHECK: // %bb.0:695; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill696; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill697; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill698; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill699; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill700; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill701; CHECK-NEXT: sub sp, sp, #16702; CHECK-NEXT: addvl sp, sp, #-1703; CHECK-NEXT: add x8, sp, #16704; CHECK-NEXT: mov x19, x0705; CHECK-NEXT: str q0, [sp] // 16-byte Spill706; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0707; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill708; CHECK-NEXT: smstop sm709; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload710; CHECK-NEXT: bl use_v8f16711; CHECK-NEXT: smstart sm712; CHECK-NEXT: add x8, sp, #16713; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload714; CHECK-NEXT: str z0, [x19]715; CHECK-NEXT: addvl sp, sp, #1716; CHECK-NEXT: add sp, sp, #16717; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload718; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload719; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload720; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload721; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload722; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload723; CHECK-NEXT: ret724 %vec = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> %arg, i64 0)725 call void @use_v8f16(<8 x half> %arg)726 store <vscale x 8 x half> %vec, ptr %ptr727 ret void728}729 730define void @dont_coalesce_arg_v8bf16(<8 x bfloat> %arg, ptr %ptr) #0 {731; CHECK-LABEL: dont_coalesce_arg_v8bf16:732; CHECK: // %bb.0:733; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill734; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill735; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill736; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill737; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill738; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill739; CHECK-NEXT: sub sp, sp, #16740; CHECK-NEXT: addvl sp, sp, #-1741; CHECK-NEXT: add x8, sp, #16742; CHECK-NEXT: mov x19, x0743; CHECK-NEXT: str q0, [sp] // 16-byte Spill744; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0745; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill746; CHECK-NEXT: smstop sm747; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload748; CHECK-NEXT: bl use_v8bf16749; CHECK-NEXT: smstart sm750; CHECK-NEXT: add x8, sp, #16751; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload752; CHECK-NEXT: str z0, [x19]753; CHECK-NEXT: addvl sp, sp, #1754; CHECK-NEXT: add sp, sp, #16755; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload756; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload757; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload758; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload759; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload760; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload761; CHECK-NEXT: ret762 %vec = call <vscale x 8 x bfloat> @llvm.vector.insert.nxv8bf16.v8bf16(<vscale x 8 x bfloat> poison, <8 x bfloat> %arg, i64 0)763 call void @use_v8bf16(<8 x bfloat> %arg)764 store <vscale x 8 x bfloat> %vec, ptr %ptr765 ret void766}767 768define void @dont_coalesce_arg_v4f32(<4 x float> %arg, ptr %ptr) #0 {769; CHECK-LABEL: dont_coalesce_arg_v4f32:770; CHECK: // %bb.0:771; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill772; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill773; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill774; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill775; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill776; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill777; CHECK-NEXT: sub sp, sp, #16778; CHECK-NEXT: addvl sp, sp, #-1779; CHECK-NEXT: add x8, sp, #16780; CHECK-NEXT: mov x19, x0781; CHECK-NEXT: str q0, [sp] // 16-byte Spill782; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0783; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill784; CHECK-NEXT: smstop sm785; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload786; CHECK-NEXT: bl use_v4f32787; CHECK-NEXT: smstart sm788; CHECK-NEXT: add x8, sp, #16789; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload790; CHECK-NEXT: str z0, [x19]791; CHECK-NEXT: addvl sp, sp, #1792; CHECK-NEXT: add sp, sp, #16793; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload794; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload795; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload796; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload797; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload798; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload799; CHECK-NEXT: ret800 %vec = call <vscale x 4 x float> @llvm.vector.insert.nxv4f32.v4f32(<vscale x 4 x float> poison, <4 x float> %arg, i64 0)801 call void @use_v4f32(<4 x float> %arg)802 store <vscale x 4 x float> %vec, ptr %ptr803 ret void804}805 806define void @dont_coalesce_arg_v2f64(<2 x double> %arg, ptr %ptr) #0 {807; CHECK-LABEL: dont_coalesce_arg_v2f64:808; CHECK: // %bb.0:809; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill810; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill811; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill812; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill813; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill814; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill815; CHECK-NEXT: sub sp, sp, #16816; CHECK-NEXT: addvl sp, sp, #-1817; CHECK-NEXT: add x8, sp, #16818; CHECK-NEXT: mov x19, x0819; CHECK-NEXT: str q0, [sp] // 16-byte Spill820; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0821; CHECK-NEXT: str z0, [x8] // 16-byte Folded Spill822; CHECK-NEXT: smstop sm823; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload824; CHECK-NEXT: bl use_v2f64825; CHECK-NEXT: smstart sm826; CHECK-NEXT: add x8, sp, #16827; CHECK-NEXT: ldr z0, [x8] // 16-byte Folded Reload828; CHECK-NEXT: str z0, [x19]829; CHECK-NEXT: addvl sp, sp, #1830; CHECK-NEXT: add sp, sp, #16831; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload832; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload833; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload834; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload835; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload836; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload837; CHECK-NEXT: ret838 %vec = call <vscale x 2 x double> @llvm.vector.insert.nxv2f64.v2f64(<vscale x 2 x double> poison, <2 x double> %arg, i64 0)839 call void @use_v2f64(<2 x double> %arg)840 store <vscale x 2 x double> %vec, ptr %ptr841 ret void842}843 844;845; <8 x i1> type will need type promotion.846;847define void @dont_coalesce_arg_v8i1(<8 x i1> %arg, ptr %ptr) #0 {848; CHECK-LABEL: dont_coalesce_arg_v8i1:849; CHECK: // %bb.0:850; CHECK-NEXT: stp d15, d14, [sp, #-96]! // 16-byte Folded Spill851; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill852; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill853; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill854; CHECK-NEXT: str x29, [sp, #64] // 8-byte Spill855; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill856; CHECK-NEXT: sub sp, sp, #16857; CHECK-NEXT: addvl sp, sp, #-1858; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0859; CHECK-NEXT: mov z1.d, z0.d860; CHECK-NEXT: ptrue p0.b861; CHECK-NEXT: add x8, sp, #16862; CHECK-NEXT: mov x19, x0863; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0864; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill865; CHECK-NEXT: and z1.b, z1.b, #0x1866; CHECK-NEXT: cmpne p0.b, p0/z, z1.b, #0867; CHECK-NEXT: str p0, [x8, #7, mul vl] // 2-byte Spill868; CHECK-NEXT: smstop sm869; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload870; CHECK-NEXT: bl use_v8i1871; CHECK-NEXT: smstart sm872; CHECK-NEXT: add x8, sp, #16873; CHECK-NEXT: ldr p0, [x8, #7, mul vl] // 2-byte Reload874; CHECK-NEXT: str p0, [x19]875; CHECK-NEXT: addvl sp, sp, #1876; CHECK-NEXT: add sp, sp, #16877; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload878; CHECK-NEXT: ldr x29, [sp, #64] // 8-byte Reload879; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload880; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload881; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload882; CHECK-NEXT: ldp d15, d14, [sp], #96 // 16-byte Folded Reload883; CHECK-NEXT: ret884 %vec = call <vscale x 16 x i1> @llvm.vector.insert.nxv8i1.v8i1(<vscale x 16 x i1> poison, <8 x i1> %arg, i64 0)885 call void @use_v8i1(<8 x i1> %arg)886 store <vscale x 16 x i1> %vec, ptr %ptr887 ret void888}889 890;891; Scalar return values892;893 894define void @dont_coalesce_res_i8(ptr %ptr) #0 {895; CHECK-LABEL: dont_coalesce_res_i8:896; CHECK: // %bb.0:897; CHECK-NEXT: stp d15, d14, [sp, #-80]! // 16-byte Folded Spill898; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill899; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill900; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill901; CHECK-NEXT: stp x30, x19, [sp, #64] // 16-byte Folded Spill902; CHECK-NEXT: mov x19, x0903; CHECK-NEXT: smstop sm904; CHECK-NEXT: bl get_i8905; CHECK-NEXT: smstart sm906; CHECK-NEXT: fmov s0, w0907; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload908; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload909; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload910; CHECK-NEXT: str z0, [x19]911; CHECK-NEXT: ldp x30, x19, [sp, #64] // 16-byte Folded Reload912; CHECK-NEXT: ldp d15, d14, [sp], #80 // 16-byte Folded Reload913; CHECK-NEXT: ret914 %res = call i8 @get_i8()915 %vec = insertelement <vscale x 16 x i8> poison, i8 %res, i32 0916 store <vscale x 16 x i8> %vec, ptr %ptr917 ret void918}919 920define void @dont_coalesce_res_i16(ptr %ptr) #0 {921; CHECK-LABEL: dont_coalesce_res_i16:922; CHECK: // %bb.0:923; CHECK-NEXT: stp d15, d14, [sp, #-80]! // 16-byte Folded Spill924; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill925; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill926; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill927; CHECK-NEXT: stp x30, x19, [sp, #64] // 16-byte Folded Spill928; CHECK-NEXT: mov x19, x0929; CHECK-NEXT: smstop sm930; CHECK-NEXT: bl get_i16931; CHECK-NEXT: smstart sm932; CHECK-NEXT: fmov s0, w0933; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload934; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload935; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload936; CHECK-NEXT: str z0, [x19]937; CHECK-NEXT: ldp x30, x19, [sp, #64] // 16-byte Folded Reload938; CHECK-NEXT: ldp d15, d14, [sp], #80 // 16-byte Folded Reload939; CHECK-NEXT: ret940 %res = call i16 @get_i16()941 %vec = insertelement <vscale x 8 x i16> poison, i16 %res, i32 0942 store <vscale x 8 x i16> %vec, ptr %ptr943 ret void944}945 946define void @dont_coalesce_res_i32(ptr %ptr) #0 {947; CHECK-LABEL: dont_coalesce_res_i32:948; CHECK: // %bb.0:949; CHECK-NEXT: stp d15, d14, [sp, #-80]! // 16-byte Folded Spill950; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill951; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill952; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill953; CHECK-NEXT: stp x30, x19, [sp, #64] // 16-byte Folded Spill954; CHECK-NEXT: mov x19, x0955; CHECK-NEXT: smstop sm956; CHECK-NEXT: bl get_i32957; CHECK-NEXT: smstart sm958; CHECK-NEXT: fmov s0, w0959; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload960; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload961; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload962; CHECK-NEXT: str z0, [x19]963; CHECK-NEXT: ldp x30, x19, [sp, #64] // 16-byte Folded Reload964; CHECK-NEXT: ldp d15, d14, [sp], #80 // 16-byte Folded Reload965; CHECK-NEXT: ret966 %res = call i32 @get_i32()967 %vec = insertelement <vscale x 4 x i32> poison, i32 %res, i32 0968 store <vscale x 4 x i32> %vec, ptr %ptr969 ret void970}971 972define void @dont_coalesce_res_i64(ptr %ptr) #0 {973; CHECK-LABEL: dont_coalesce_res_i64:974; CHECK: // %bb.0:975; CHECK-NEXT: stp d15, d14, [sp, #-80]! // 16-byte Folded Spill976; CHECK-NEXT: stp d13, d12, [sp, #16] // 16-byte Folded Spill977; CHECK-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill978; CHECK-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill979; CHECK-NEXT: stp x30, x19, [sp, #64] // 16-byte Folded Spill980; CHECK-NEXT: mov x19, x0981; CHECK-NEXT: smstop sm982; CHECK-NEXT: bl get_i64983; CHECK-NEXT: smstart sm984; CHECK-NEXT: fmov d0, x0985; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload986; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload987; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload988; CHECK-NEXT: str z0, [x19]989; CHECK-NEXT: ldp x30, x19, [sp, #64] // 16-byte Folded Reload990; CHECK-NEXT: ldp d15, d14, [sp], #80 // 16-byte Folded Reload991; CHECK-NEXT: ret992 %res = call i64 @get_i64()993 %vec = insertelement <vscale x 2 x i64> poison, i64 %res, i32 0994 store <vscale x 2 x i64> %vec, ptr %ptr995 ret void996}997 998define void @dont_coalesce_res_f16(ptr %ptr) #0 {999; CHECK-LABEL: dont_coalesce_res_f16:1000; CHECK: // %bb.0:1001; CHECK-NEXT: sub sp, sp, #961002; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1003; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1004; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1005; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1006; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1007; CHECK-NEXT: mov x19, x01008; CHECK-NEXT: smstop sm1009; CHECK-NEXT: bl get_f161010; CHECK-NEXT: str h0, [sp, #14] // 2-byte Spill1011; CHECK-NEXT: smstart sm1012; CHECK-NEXT: ldr h0, [sp, #14] // 2-byte Reload1013; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1014; CHECK-NEXT: // kill: def $h0 killed $h0 def $z01015; CHECK-NEXT: str z0, [x19]1016; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1017; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1018; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1019; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1020; CHECK-NEXT: add sp, sp, #961021; CHECK-NEXT: ret1022 %res = call half @get_f16()1023 %vec = insertelement <vscale x 8 x half> poison, half %res, i32 01024 store <vscale x 8 x half> %vec, ptr %ptr1025 ret void1026}1027 1028define void @dont_coalesce_res_f32(ptr %ptr) #0 {1029; CHECK-LABEL: dont_coalesce_res_f32:1030; CHECK: // %bb.0:1031; CHECK-NEXT: sub sp, sp, #961032; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1033; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1034; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1035; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1036; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1037; CHECK-NEXT: mov x19, x01038; CHECK-NEXT: smstop sm1039; CHECK-NEXT: bl get_f321040; CHECK-NEXT: str s0, [sp, #12] // 4-byte Spill1041; CHECK-NEXT: smstart sm1042; CHECK-NEXT: ldr s0, [sp, #12] // 4-byte Reload1043; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1044; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1045; CHECK-NEXT: str z0, [x19]1046; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1047; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1048; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1049; CHECK-NEXT: add sp, sp, #961050; CHECK-NEXT: ret1051 %res = call float @get_f32()1052 %vec = insertelement <vscale x 4 x float> poison, float %res, i32 01053 store <vscale x 4 x float> %vec, ptr %ptr1054 ret void1055}1056 1057define void @dont_coalesce_res_f64(ptr %ptr) #0 {1058; CHECK-LABEL: dont_coalesce_res_f64:1059; CHECK: // %bb.0:1060; CHECK-NEXT: sub sp, sp, #961061; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1062; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1063; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1064; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1065; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1066; CHECK-NEXT: mov x19, x01067; CHECK-NEXT: smstop sm1068; CHECK-NEXT: bl get_f641069; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill1070; CHECK-NEXT: smstart sm1071; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload1072; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1073; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1074; CHECK-NEXT: str z0, [x19]1075; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1076; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1077; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1078; CHECK-NEXT: add sp, sp, #961079; CHECK-NEXT: ret1080 %res = call double @get_f64()1081 %vec = insertelement <vscale x 2 x double> poison, double %res, i32 01082 store <vscale x 2 x double> %vec, ptr %ptr1083 ret void1084}1085 1086;1087; Single-element vector result values1088;1089 1090define void @dont_coalesce_res_v1i8(ptr %ptr) #0 {1091; CHECK-LABEL: dont_coalesce_res_v1i8:1092; CHECK: // %bb.0:1093; CHECK-NEXT: sub sp, sp, #961094; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1095; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1096; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1097; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1098; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1099; CHECK-NEXT: mov x19, x01100; CHECK-NEXT: smstop sm1101; CHECK-NEXT: bl get_v1i81102; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill1103; CHECK-NEXT: smstart sm1104; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload1105; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1106; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1107; CHECK-NEXT: str z0, [x19]1108; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1109; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1110; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1111; CHECK-NEXT: add sp, sp, #961112; CHECK-NEXT: ret1113 %res = call <1 x i8> @get_v1i8()1114 %elt = extractelement <1 x i8> %res, i32 01115 %vec = insertelement <vscale x 16 x i8> poison, i8 %elt, i32 01116 store <vscale x 16 x i8> %vec, ptr %ptr1117 ret void1118}1119 1120define void @dont_coalesce_res_v1i16(ptr %ptr) #0 {1121; CHECK-LABEL: dont_coalesce_res_v1i16:1122; CHECK: // %bb.0:1123; CHECK-NEXT: sub sp, sp, #961124; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1125; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1126; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1127; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1128; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1129; CHECK-NEXT: mov x19, x01130; CHECK-NEXT: smstop sm1131; CHECK-NEXT: bl get_v1i161132; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill1133; CHECK-NEXT: smstart sm1134; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload1135; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1136; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1137; CHECK-NEXT: str z0, [x19]1138; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1139; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1140; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1141; CHECK-NEXT: add sp, sp, #961142; CHECK-NEXT: ret1143 %res = call <1 x i16> @get_v1i16()1144 %elt = extractelement <1 x i16> %res, i32 01145 %vec = insertelement <vscale x 8 x i16> poison, i16 %elt, i32 01146 store <vscale x 8 x i16> %vec, ptr %ptr1147 ret void1148}1149 1150define void @dont_coalesce_res_v1i32(ptr %ptr) #0 {1151; CHECK-LABEL: dont_coalesce_res_v1i32:1152; CHECK: // %bb.0:1153; CHECK-NEXT: sub sp, sp, #961154; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1155; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1156; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1157; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1158; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1159; CHECK-NEXT: mov x19, x01160; CHECK-NEXT: smstop sm1161; CHECK-NEXT: bl get_v1i321162; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill1163; CHECK-NEXT: smstart sm1164; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload1165; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1166; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1167; CHECK-NEXT: str z0, [x19]1168; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1169; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1170; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1171; CHECK-NEXT: add sp, sp, #961172; CHECK-NEXT: ret1173 %res = call <1 x i32> @get_v1i32()1174 %elt = extractelement <1 x i32> %res, i32 01175 %vec = insertelement <vscale x 4 x i32> poison, i32 %elt, i32 01176 store <vscale x 4 x i32> %vec, ptr %ptr1177 ret void1178}1179 1180define void @dont_coalesce_res_v1i64(ptr %ptr) #0 {1181; CHECK-LABEL: dont_coalesce_res_v1i64:1182; CHECK: // %bb.0:1183; CHECK-NEXT: sub sp, sp, #961184; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1185; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1186; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1187; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1188; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1189; CHECK-NEXT: mov x19, x01190; CHECK-NEXT: smstop sm1191; CHECK-NEXT: bl get_v1i641192; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill1193; CHECK-NEXT: smstart sm1194; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload1195; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1196; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1197; CHECK-NEXT: str z0, [x19]1198; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1199; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1200; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1201; CHECK-NEXT: add sp, sp, #961202; CHECK-NEXT: ret1203 %res = call <1 x i64> @get_v1i64()1204 %elt = extractelement <1 x i64> %res, i32 01205 %vec = insertelement <vscale x 2 x i64> poison, i64 %elt, i32 01206 store <vscale x 2 x i64> %vec, ptr %ptr1207 ret void1208}1209 1210define void @dont_coalesce_res_v1f16(ptr %ptr) #0 {1211; CHECK-LABEL: dont_coalesce_res_v1f16:1212; CHECK: // %bb.0:1213; CHECK-NEXT: sub sp, sp, #961214; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1215; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1216; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1217; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1218; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1219; CHECK-NEXT: mov x19, x01220; CHECK-NEXT: smstop sm1221; CHECK-NEXT: bl get_v1f161222; CHECK-NEXT: str h0, [sp, #14] // 2-byte Spill1223; CHECK-NEXT: smstart sm1224; CHECK-NEXT: ldr h0, [sp, #14] // 2-byte Reload1225; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1226; CHECK-NEXT: // kill: def $h0 killed $h0 def $z01227; CHECK-NEXT: str z0, [x19]1228; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1229; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1230; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1231; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1232; CHECK-NEXT: add sp, sp, #961233; CHECK-NEXT: ret1234 %res = call <1 x half> @get_v1f16()1235 %elt = extractelement <1 x half> %res, i32 01236 %vec = insertelement <vscale x 8 x half> poison, half %elt, i32 01237 store <vscale x 8 x half> %vec, ptr %ptr1238 ret void1239}1240 1241define void @dont_coalesce_res_v1f32(ptr %ptr) #0 {1242; CHECK-LABEL: dont_coalesce_res_v1f32:1243; CHECK: // %bb.0:1244; CHECK-NEXT: sub sp, sp, #961245; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1246; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1247; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1248; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1249; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1250; CHECK-NEXT: mov x19, x01251; CHECK-NEXT: smstop sm1252; CHECK-NEXT: bl get_v1f321253; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill1254; CHECK-NEXT: smstart sm1255; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload1256; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1257; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1258; CHECK-NEXT: str z0, [x19]1259; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1260; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1261; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1262; CHECK-NEXT: add sp, sp, #961263; CHECK-NEXT: ret1264 %res = call <1 x float> @get_v1f32()1265 %elt = extractelement <1 x float> %res, i32 01266 %vec = insertelement <vscale x 4 x float> poison, float %elt, i32 01267 store <vscale x 4 x float> %vec, ptr %ptr1268 ret void1269}1270 1271define void @dont_coalesce_res_v1f64(ptr %ptr) #0 {1272; CHECK-LABEL: dont_coalesce_res_v1f64:1273; CHECK: // %bb.0:1274; CHECK-NEXT: sub sp, sp, #961275; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1276; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1277; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1278; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1279; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1280; CHECK-NEXT: mov x19, x01281; CHECK-NEXT: smstop sm1282; CHECK-NEXT: bl get_v1f641283; CHECK-NEXT: str d0, [sp, #8] // 8-byte Spill1284; CHECK-NEXT: smstart sm1285; CHECK-NEXT: ldr d0, [sp, #8] // 8-byte Reload1286; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1287; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1288; CHECK-NEXT: str z0, [x19]1289; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1290; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1291; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1292; CHECK-NEXT: add sp, sp, #961293; CHECK-NEXT: ret1294 %res = call <1 x double> @get_v1f64()1295 %elt = extractelement <1 x double> %res, i32 01296 %vec = insertelement <vscale x 2 x double> poison, double %elt, i32 01297 store <vscale x 2 x double> %vec, ptr %ptr1298 ret void1299}1300 1301;1302; Full vector result values1303;1304 1305define void @dont_coalesce_res_v16i8(ptr %ptr) #0 {1306; CHECK-LABEL: dont_coalesce_res_v16i8:1307; CHECK: // %bb.0:1308; CHECK-NEXT: sub sp, sp, #961309; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1310; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1311; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1312; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1313; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1314; CHECK-NEXT: mov x19, x01315; CHECK-NEXT: smstop sm1316; CHECK-NEXT: bl get_v16i81317; CHECK-NEXT: str q0, [sp] // 16-byte Spill1318; CHECK-NEXT: smstart sm1319; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload1320; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1321; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01322; CHECK-NEXT: str z0, [x19]1323; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1324; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1325; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1326; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1327; CHECK-NEXT: add sp, sp, #961328; CHECK-NEXT: ret1329 %res = call <16 x i8> @get_v16i8()1330 %vec = call <vscale x 16 x i8> @llvm.vector.insert.nxv16i8.v16i8(<vscale x 16 x i8> poison, <16 x i8> %res, i64 0)1331 store <vscale x 16 x i8> %vec, ptr %ptr1332 ret void1333}1334 1335define void @dont_coalesce_res_v8i16(ptr %ptr) #0 {1336; CHECK-LABEL: dont_coalesce_res_v8i16:1337; CHECK: // %bb.0:1338; CHECK-NEXT: sub sp, sp, #961339; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1340; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1341; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1342; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1343; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1344; CHECK-NEXT: mov x19, x01345; CHECK-NEXT: smstop sm1346; CHECK-NEXT: bl get_v8i161347; CHECK-NEXT: str q0, [sp] // 16-byte Spill1348; CHECK-NEXT: smstart sm1349; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload1350; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1351; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01352; CHECK-NEXT: str z0, [x19]1353; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1354; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1355; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1356; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1357; CHECK-NEXT: add sp, sp, #961358; CHECK-NEXT: ret1359 %res = call <8 x i16> @get_v8i16()1360 %vec = call <vscale x 8 x i16> @llvm.vector.insert.nxv8i16.v8i16(<vscale x 8 x i16> poison, <8 x i16> %res, i64 0)1361 store <vscale x 8 x i16> %vec, ptr %ptr1362 ret void1363}1364 1365define void @dont_coalesce_res_v4i32(ptr %ptr) #0 {1366; CHECK-LABEL: dont_coalesce_res_v4i32:1367; CHECK: // %bb.0:1368; CHECK-NEXT: sub sp, sp, #961369; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1370; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1371; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1372; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1373; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1374; CHECK-NEXT: mov x19, x01375; CHECK-NEXT: smstop sm1376; CHECK-NEXT: bl get_v4i321377; CHECK-NEXT: str q0, [sp] // 16-byte Spill1378; CHECK-NEXT: smstart sm1379; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload1380; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1381; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01382; CHECK-NEXT: str z0, [x19]1383; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1384; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1385; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1386; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1387; CHECK-NEXT: add sp, sp, #961388; CHECK-NEXT: ret1389 %res = call <4 x i32> @get_v4i32()1390 %vec = call <vscale x 4 x i32> @llvm.vector.insert.nxv4i32.v4i32(<vscale x 4 x i32> poison, <4 x i32> %res, i64 0)1391 store <vscale x 4 x i32> %vec, ptr %ptr1392 ret void1393}1394 1395define void @dont_coalesce_res_v2i64(ptr %ptr) #0 {1396; CHECK-LABEL: dont_coalesce_res_v2i64:1397; CHECK: // %bb.0:1398; CHECK-NEXT: sub sp, sp, #961399; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1400; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1401; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1402; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1403; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1404; CHECK-NEXT: mov x19, x01405; CHECK-NEXT: smstop sm1406; CHECK-NEXT: bl get_v2i641407; CHECK-NEXT: str q0, [sp] // 16-byte Spill1408; CHECK-NEXT: smstart sm1409; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload1410; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1411; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01412; CHECK-NEXT: str z0, [x19]1413; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1414; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1415; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1416; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1417; CHECK-NEXT: add sp, sp, #961418; CHECK-NEXT: ret1419 %res = call <2 x i64> @get_v2i64()1420 %vec = call <vscale x 2 x i64> @llvm.vector.insert.nxv2i64.v2i64(<vscale x 2 x i64> poison, <2 x i64> %res, i64 0)1421 store <vscale x 2 x i64> %vec, ptr %ptr1422 ret void1423}1424 1425define void @dont_coalesce_res_v8f16(ptr %ptr) #0 {1426; CHECK-LABEL: dont_coalesce_res_v8f16:1427; CHECK: // %bb.0:1428; CHECK-NEXT: sub sp, sp, #961429; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1430; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1431; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1432; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1433; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1434; CHECK-NEXT: mov x19, x01435; CHECK-NEXT: smstop sm1436; CHECK-NEXT: bl get_v8f161437; CHECK-NEXT: str q0, [sp] // 16-byte Spill1438; CHECK-NEXT: smstart sm1439; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload1440; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1441; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01442; CHECK-NEXT: str z0, [x19]1443; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1444; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1445; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1446; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1447; CHECK-NEXT: add sp, sp, #961448; CHECK-NEXT: ret1449 %res = call <8 x half> @get_v8f16()1450 %vec = call <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half> poison, <8 x half> %res, i64 0)1451 store <vscale x 8 x half> %vec, ptr %ptr1452 ret void1453}1454 1455define void @dont_coalesce_res_v4f32(ptr %ptr) #0 {1456; CHECK-LABEL: dont_coalesce_res_v4f32:1457; CHECK: // %bb.0:1458; CHECK-NEXT: sub sp, sp, #961459; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1460; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1461; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1462; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1463; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1464; CHECK-NEXT: mov x19, x01465; CHECK-NEXT: smstop sm1466; CHECK-NEXT: bl get_v4f321467; CHECK-NEXT: str q0, [sp] // 16-byte Spill1468; CHECK-NEXT: smstart sm1469; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload1470; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1471; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01472; CHECK-NEXT: str z0, [x19]1473; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1474; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1475; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1476; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1477; CHECK-NEXT: add sp, sp, #961478; CHECK-NEXT: ret1479 %res = call <4 x float> @get_v4f32()1480 %vec = call <vscale x 4 x float> @llvm.vector.insert.nxv4f32.v4f32(<vscale x 4 x float> poison, <4 x float> %res, i64 0)1481 store <vscale x 4 x float> %vec, ptr %ptr1482 ret void1483}1484 1485define void @dont_coalesce_res_v2f64(ptr %ptr) #0 {1486; CHECK-LABEL: dont_coalesce_res_v2f64:1487; CHECK: // %bb.0:1488; CHECK-NEXT: sub sp, sp, #961489; CHECK-NEXT: stp d15, d14, [sp, #16] // 16-byte Folded Spill1490; CHECK-NEXT: stp d13, d12, [sp, #32] // 16-byte Folded Spill1491; CHECK-NEXT: stp d11, d10, [sp, #48] // 16-byte Folded Spill1492; CHECK-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill1493; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill1494; CHECK-NEXT: mov x19, x01495; CHECK-NEXT: smstop sm1496; CHECK-NEXT: bl get_v2f641497; CHECK-NEXT: str q0, [sp] // 16-byte Spill1498; CHECK-NEXT: smstart sm1499; CHECK-NEXT: ldr q0, [sp] // 16-byte Reload1500; CHECK-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload1501; CHECK-NEXT: // kill: def $q0 killed $q0 def $z01502; CHECK-NEXT: str z0, [x19]1503; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload1504; CHECK-NEXT: ldp d11, d10, [sp, #48] // 16-byte Folded Reload1505; CHECK-NEXT: ldp d13, d12, [sp, #32] // 16-byte Folded Reload1506; CHECK-NEXT: ldp d15, d14, [sp, #16] // 16-byte Folded Reload1507; CHECK-NEXT: add sp, sp, #961508; CHECK-NEXT: ret1509 %res = call <2 x double> @get_v2f64()1510 %vec = call <vscale x 2 x double> @llvm.vector.insert.nxv2f64.v2f64(<vscale x 2 x double> poison, <2 x double> %res, i64 0)1511 store <vscale x 2 x double> %vec, ptr %ptr1512 ret void1513}1514 1515declare half @get_f16()1516declare float @get_f32()1517declare double @get_f64()1518declare <1 x half> @get_v1f16()1519declare <1 x float> @get_v1f32()1520declare <1 x double> @get_v1f64()1521declare <8 x half> @get_v8f16()1522declare <4 x float> @get_v4f32()1523declare <2 x double> @get_v2f64()1524 1525declare i8 @get_i8()1526declare i16 @get_i16()1527declare i32 @get_i32()1528declare i64 @get_i64()1529declare <1 x i8> @get_v1i8()1530declare <1 x i16> @get_v1i16()1531declare <1 x i32> @get_v1i32()1532declare <2 x i64> @get_v1i64()1533declare <16 x i8> @get_v16i8()1534declare <8 x i16> @get_v8i16()1535declare <4 x i32> @get_v4i32()1536declare <2 x i64> @get_v2i64()1537 1538declare void @use_f16(half)1539declare void @use_f32(float)1540declare void @use_f64(double)1541declare void @use_v1f16(<1 x half>)1542declare void @use_v1f32(<1 x float>)1543declare void @use_v1f64(<1 x double>)1544declare void @use_v8f16(<8 x half>)1545declare void @use_v8bf16(<8 x bfloat>)1546declare void @use_v4f32(<4 x float>)1547declare void @use_v2f64(<2 x double>)1548 1549declare void @use_i8(i8)1550declare void @use_i16(i16)1551declare void @use_i32(i32)1552declare void @use_i64(i64)1553declare void @use_v1i8(<1 x i8>)1554declare void @use_v1i16(<1 x i16>)1555declare void @use_v1i32(<1 x i32>)1556declare void @use_v1i64(<1 x i64>)1557declare void @use_v16i8(<16 x i8>)1558declare void @use_v8i16(<8 x i16>)1559declare void @use_v4i32(<4 x i32>)1560declare void @use_v2i64(<2 x i64>)1561declare void @use_v8i1(<8 x i1>)1562 1563declare <vscale x 16 x i1> @llvm.vector.insert.nxv8i1.v8i1(<vscale x 16 x i1>, <8 x i1>, i64)1564declare <vscale x 16 x i8> @llvm.vector.insert.nxv16i8.v16i8(<vscale x 16 x i8>, <16 x i8>, i64)1565declare <vscale x 8 x i16> @llvm.vector.insert.nxv8i16.v8i16(<vscale x 8 x i16>, <8 x i16>, i64)1566declare <vscale x 4 x i32> @llvm.vector.insert.nxv4i32.v4i32(<vscale x 4 x i32>, <4 x i32>, i64)1567declare <vscale x 2 x i64> @llvm.vector.insert.nxv2i64.v2i64(<vscale x 2 x i64>, <2 x i64>, i64)1568declare <vscale x 8 x half> @llvm.vector.insert.nxv8f16.v8f16(<vscale x 8 x half>, <8 x half>, i64)1569declare <vscale x 4 x float> @llvm.vector.insert.nxv4f32.v4f32(<vscale x 4 x float>, <4 x float>, i64)1570declare <vscale x 2 x double> @llvm.vector.insert.nxv2f64.v2f64(<vscale x 2 x double>, <2 x double>, i64)1571 1572attributes #0 = { nounwind "aarch64_pstate_sm_enabled" "target-features"="+sve,+sme" }1573