brintos

brintos / llvm-project-archived public Read only

0
0
Text · 67.0 KiB · 98735c9 Raw
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