brintos

brintos / llvm-project-archived public Read only

0
0
Text · 82.8 KiB · 465ba38 Raw
2110 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=aarch64 -mattr=+sve \3; RUN:   -aarch64-sve-vector-bits-min=256 | FileCheck --check-prefixes=CHECK-i32 %s4; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=aarch64 -mattr=+sve \5; RUN:   -aarch64-sve-vector-bits-min=256 | FileCheck --check-prefixes=CHECK-i64 %s6 7define <1 x iXLen> @lrint_v1f16(<1 x half> %x) nounwind {8; CHECK-i32-LABEL: lrint_v1f16:9; CHECK-i32:       // %bb.0:10; CHECK-i32-NEXT:    frintx h0, h011; CHECK-i32-NEXT:    fcvtzs w8, h012; CHECK-i32-NEXT:    fmov s0, w813; CHECK-i32-NEXT:    ret14;15; CHECK-i64-LABEL: lrint_v1f16:16; CHECK-i64:       // %bb.0:17; CHECK-i64-NEXT:    frintx h0, h018; CHECK-i64-NEXT:    fcvtzs x8, h019; CHECK-i64-NEXT:    fmov d0, x820; CHECK-i64-NEXT:    ret21  %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f16(<1 x half> %x)22  ret <1 x iXLen> %a23}24declare <1 x iXLen> @llvm.lrint.v1iXLen.v1f16(<1 x half>)25 26define <2 x iXLen> @lrint_v2f16(<2 x half> %x) nounwind {27; CHECK-i32-LABEL: lrint_v2f16:28; CHECK-i32:       // %bb.0:29; CHECK-i32-NEXT:    // kill: def $d0 killed $d0 def $q030; CHECK-i32-NEXT:    mov h1, v0.h[1]31; CHECK-i32-NEXT:    frintx h0, h032; CHECK-i32-NEXT:    frintx h1, h133; CHECK-i32-NEXT:    fcvtzs w8, h034; CHECK-i32-NEXT:    fcvtzs w9, h135; CHECK-i32-NEXT:    fmov s0, w836; CHECK-i32-NEXT:    mov v0.s[1], w937; CHECK-i32-NEXT:    // kill: def $d0 killed $d0 killed $q038; CHECK-i32-NEXT:    ret39;40; CHECK-i64-LABEL: lrint_v2f16:41; CHECK-i64:       // %bb.0:42; CHECK-i64-NEXT:    // kill: def $d0 killed $d0 def $q043; CHECK-i64-NEXT:    mov h1, v0.h[1]44; CHECK-i64-NEXT:    frintx h0, h045; CHECK-i64-NEXT:    frintx h1, h146; CHECK-i64-NEXT:    fcvtzs x8, h047; CHECK-i64-NEXT:    fcvtzs x9, h148; CHECK-i64-NEXT:    fmov d0, x849; CHECK-i64-NEXT:    mov v0.d[1], x950; CHECK-i64-NEXT:    ret51  %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f16(<2 x half> %x)52  ret <2 x iXLen> %a53}54declare <2 x iXLen> @llvm.lrint.v2iXLen.v2f16(<2 x half>)55 56define <4 x iXLen> @lrint_v4f16(<4 x half> %x) nounwind {57; CHECK-i32-LABEL: lrint_v4f16:58; CHECK-i32:       // %bb.0:59; CHECK-i32-NEXT:    frintx v0.4h, v0.4h60; CHECK-i32-NEXT:    fcvtl v0.4s, v0.4h61; CHECK-i32-NEXT:    fcvtzs v0.4s, v0.4s62; CHECK-i32-NEXT:    ret63;64; CHECK-i64-LABEL: lrint_v4f16:65; CHECK-i64:       // %bb.0:66; CHECK-i64-NEXT:    frintx v0.4h, v0.4h67; CHECK-i64-NEXT:    mov h1, v0.h[2]68; CHECK-i64-NEXT:    mov h2, v0.h[3]69; CHECK-i64-NEXT:    mov h3, v0.h[1]70; CHECK-i64-NEXT:    fcvtzs x9, h071; CHECK-i64-NEXT:    fcvtzs x8, h172; CHECK-i64-NEXT:    fcvtzs x10, h273; CHECK-i64-NEXT:    fcvtzs x11, h374; CHECK-i64-NEXT:    fmov d0, x975; CHECK-i64-NEXT:    fmov d1, x876; CHECK-i64-NEXT:    mov v0.d[1], x1177; CHECK-i64-NEXT:    mov v1.d[1], x1078; CHECK-i64-NEXT:    ret79  %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f16(<4 x half> %x)80  ret <4 x iXLen> %a81}82declare <4 x iXLen> @llvm.lrint.v4iXLen.v4f16(<4 x half>)83 84define <8 x iXLen> @lrint_v8f16(<8 x half> %x) nounwind {85; CHECK-i32-LABEL: lrint_v8f16:86; CHECK-i32:       // %bb.0:87; CHECK-i32-NEXT:    frintx v2.8h, v0.8h88; CHECK-i32-NEXT:    mov h0, v2.h[4]89; CHECK-i32-NEXT:    mov h1, v2.h[5]90; CHECK-i32-NEXT:    mov h3, v2.h[1]91; CHECK-i32-NEXT:    fcvtzs w9, h292; CHECK-i32-NEXT:    mov h4, v2.h[6]93; CHECK-i32-NEXT:    fcvtzs w8, h094; CHECK-i32-NEXT:    mov h0, v2.h[2]95; CHECK-i32-NEXT:    fcvtzs w10, h196; CHECK-i32-NEXT:    fcvtzs w11, h397; CHECK-i32-NEXT:    mov h3, v2.h[7]98; CHECK-i32-NEXT:    fcvtzs w12, h499; CHECK-i32-NEXT:    mov h2, v2.h[3]100; CHECK-i32-NEXT:    fcvtzs w13, h0101; CHECK-i32-NEXT:    fmov s0, w9102; CHECK-i32-NEXT:    fmov s1, w8103; CHECK-i32-NEXT:    fcvtzs w8, h3104; CHECK-i32-NEXT:    fcvtzs w9, h2105; CHECK-i32-NEXT:    mov v0.s[1], w11106; CHECK-i32-NEXT:    mov v1.s[1], w10107; CHECK-i32-NEXT:    mov v0.s[2], w13108; CHECK-i32-NEXT:    mov v1.s[2], w12109; CHECK-i32-NEXT:    mov v0.s[3], w9110; CHECK-i32-NEXT:    mov v1.s[3], w8111; CHECK-i32-NEXT:    ret112;113; CHECK-i64-LABEL: lrint_v8f16:114; CHECK-i64:       // %bb.0:115; CHECK-i64-NEXT:    ext v1.16b, v0.16b, v0.16b, #8116; CHECK-i64-NEXT:    frintx v0.4h, v0.4h117; CHECK-i64-NEXT:    frintx v1.4h, v1.4h118; CHECK-i64-NEXT:    mov h4, v0.h[2]119; CHECK-i64-NEXT:    mov h2, v0.h[1]120; CHECK-i64-NEXT:    mov h7, v0.h[3]121; CHECK-i64-NEXT:    fcvtzs x8, h0122; CHECK-i64-NEXT:    mov h3, v1.h[2]123; CHECK-i64-NEXT:    mov h5, v1.h[3]124; CHECK-i64-NEXT:    mov h6, v1.h[1]125; CHECK-i64-NEXT:    fcvtzs x11, h1126; CHECK-i64-NEXT:    fcvtzs x12, h4127; CHECK-i64-NEXT:    fcvtzs x9, h2128; CHECK-i64-NEXT:    fcvtzs x15, h7129; CHECK-i64-NEXT:    fmov d0, x8130; CHECK-i64-NEXT:    fcvtzs x10, h3131; CHECK-i64-NEXT:    fcvtzs x13, h5132; CHECK-i64-NEXT:    fcvtzs x14, h6133; CHECK-i64-NEXT:    fmov d1, x12134; CHECK-i64-NEXT:    fmov d2, x11135; CHECK-i64-NEXT:    mov v0.d[1], x9136; CHECK-i64-NEXT:    fmov d3, x10137; CHECK-i64-NEXT:    mov v1.d[1], x15138; CHECK-i64-NEXT:    mov v2.d[1], x14139; CHECK-i64-NEXT:    mov v3.d[1], x13140; CHECK-i64-NEXT:    ret141  %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f16(<8 x half> %x)142  ret <8 x iXLen> %a143}144declare <8 x iXLen> @llvm.lrint.v8iXLen.v8f16(<8 x half>)145 146define <16 x iXLen> @lrint_v16f16(<16 x half> %x) nounwind {147; CHECK-i32-LABEL: lrint_v16f16:148; CHECK-i32:       // %bb.0:149; CHECK-i32-NEXT:    frintx v1.8h, v1.8h150; CHECK-i32-NEXT:    frintx v0.8h, v0.8h151; CHECK-i32-NEXT:    mov h3, v1.h[4]152; CHECK-i32-NEXT:    mov h2, v1.h[5]153; CHECK-i32-NEXT:    mov h5, v0.h[4]154; CHECK-i32-NEXT:    mov h4, v1.h[1]155; CHECK-i32-NEXT:    mov h6, v0.h[1]156; CHECK-i32-NEXT:    fcvtzs w11, h0157; CHECK-i32-NEXT:    fcvtzs w14, h1158; CHECK-i32-NEXT:    mov h7, v1.h[6]159; CHECK-i32-NEXT:    mov h16, v1.h[3]160; CHECK-i32-NEXT:    mov h17, v0.h[7]161; CHECK-i32-NEXT:    mov h18, v0.h[3]162; CHECK-i32-NEXT:    fcvtzs w9, h3163; CHECK-i32-NEXT:    mov h3, v0.h[5]164; CHECK-i32-NEXT:    fcvtzs w8, h2165; CHECK-i32-NEXT:    mov h2, v1.h[2]166; CHECK-i32-NEXT:    fcvtzs w12, h5167; CHECK-i32-NEXT:    fcvtzs w10, h4168; CHECK-i32-NEXT:    mov h4, v0.h[6]169; CHECK-i32-NEXT:    mov h5, v0.h[2]170; CHECK-i32-NEXT:    fcvtzs w13, h6171; CHECK-i32-NEXT:    mov h6, v1.h[7]172; CHECK-i32-NEXT:    fmov s0, w11173; CHECK-i32-NEXT:    fcvtzs w16, h7174; CHECK-i32-NEXT:    fcvtzs w15, h3175; CHECK-i32-NEXT:    fmov s3, w9176; CHECK-i32-NEXT:    fcvtzs w9, h16177; CHECK-i32-NEXT:    fcvtzs w17, h2178; CHECK-i32-NEXT:    fmov s1, w12179; CHECK-i32-NEXT:    fmov s2, w14180; CHECK-i32-NEXT:    fcvtzs w11, h4181; CHECK-i32-NEXT:    fcvtzs w18, h5182; CHECK-i32-NEXT:    mov v0.s[1], w13183; CHECK-i32-NEXT:    mov v3.s[1], w8184; CHECK-i32-NEXT:    fcvtzs w8, h6185; CHECK-i32-NEXT:    fcvtzs w12, h18186; CHECK-i32-NEXT:    mov v1.s[1], w15187; CHECK-i32-NEXT:    mov v2.s[1], w10188; CHECK-i32-NEXT:    fcvtzs w10, h17189; CHECK-i32-NEXT:    mov v0.s[2], w18190; CHECK-i32-NEXT:    mov v3.s[2], w16191; CHECK-i32-NEXT:    mov v1.s[2], w11192; CHECK-i32-NEXT:    mov v2.s[2], w17193; CHECK-i32-NEXT:    mov v0.s[3], w12194; CHECK-i32-NEXT:    mov v3.s[3], w8195; CHECK-i32-NEXT:    mov v1.s[3], w10196; CHECK-i32-NEXT:    mov v2.s[3], w9197; CHECK-i32-NEXT:    ret198;199; CHECK-i64-LABEL: lrint_v16f16:200; CHECK-i64:       // %bb.0:201; CHECK-i64-NEXT:    ext v2.16b, v1.16b, v1.16b, #8202; CHECK-i64-NEXT:    frintx v1.4h, v1.4h203; CHECK-i64-NEXT:    frintx v3.4h, v0.4h204; CHECK-i64-NEXT:    ext v0.16b, v0.16b, v0.16b, #8205; CHECK-i64-NEXT:    frintx v2.4h, v2.4h206; CHECK-i64-NEXT:    mov h4, v1.h[2]207; CHECK-i64-NEXT:    mov h5, v3.h[2]208; CHECK-i64-NEXT:    frintx v0.4h, v0.4h209; CHECK-i64-NEXT:    mov h6, v3.h[1]210; CHECK-i64-NEXT:    fcvtzs x9, h3211; CHECK-i64-NEXT:    mov h16, v1.h[1]212; CHECK-i64-NEXT:    fcvtzs x12, h1213; CHECK-i64-NEXT:    mov h3, v3.h[3]214; CHECK-i64-NEXT:    mov h17, v1.h[3]215; CHECK-i64-NEXT:    mov h7, v2.h[3]216; CHECK-i64-NEXT:    fcvtzs x8, h4217; CHECK-i64-NEXT:    fcvtzs x10, h5218; CHECK-i64-NEXT:    mov h4, v2.h[2]219; CHECK-i64-NEXT:    mov h5, v0.h[2]220; CHECK-i64-NEXT:    fcvtzs x11, h6221; CHECK-i64-NEXT:    mov h6, v0.h[3]222; CHECK-i64-NEXT:    fcvtzs x15, h2223; CHECK-i64-NEXT:    mov h2, v2.h[1]224; CHECK-i64-NEXT:    fcvtzs x14, h0225; CHECK-i64-NEXT:    fcvtzs x17, h3226; CHECK-i64-NEXT:    fcvtzs x0, h17227; CHECK-i64-NEXT:    fcvtzs x13, h7228; CHECK-i64-NEXT:    mov h7, v0.h[1]229; CHECK-i64-NEXT:    fmov d0, x9230; CHECK-i64-NEXT:    fcvtzs x16, h4231; CHECK-i64-NEXT:    fcvtzs x9, h5232; CHECK-i64-NEXT:    fmov d4, x12233; CHECK-i64-NEXT:    fcvtzs x12, h16234; CHECK-i64-NEXT:    fmov d1, x10235; CHECK-i64-NEXT:    fcvtzs x10, h6236; CHECK-i64-NEXT:    fmov d5, x8237; CHECK-i64-NEXT:    fcvtzs x8, h2238; CHECK-i64-NEXT:    fmov d2, x14239; CHECK-i64-NEXT:    fcvtzs x18, h7240; CHECK-i64-NEXT:    fmov d6, x15241; CHECK-i64-NEXT:    mov v0.d[1], x11242; CHECK-i64-NEXT:    fmov d3, x9243; CHECK-i64-NEXT:    fmov d7, x16244; CHECK-i64-NEXT:    mov v1.d[1], x17245; CHECK-i64-NEXT:    mov v4.d[1], x12246; CHECK-i64-NEXT:    mov v5.d[1], x0247; CHECK-i64-NEXT:    mov v6.d[1], x8248; CHECK-i64-NEXT:    mov v2.d[1], x18249; CHECK-i64-NEXT:    mov v3.d[1], x10250; CHECK-i64-NEXT:    mov v7.d[1], x13251; CHECK-i64-NEXT:    ret252  %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16f16(<16 x half> %x)253  ret <16 x iXLen> %a254}255declare <16 x iXLen> @llvm.lrint.v16iXLen.v16f16(<16 x half>)256 257define <32 x iXLen> @lrint_v32f16(<32 x half> %x) nounwind {258; CHECK-i32-LABEL: lrint_v32f16:259; CHECK-i32:       // %bb.0:260; CHECK-i32-NEXT:    stp x26, x25, [sp, #-64]! // 16-byte Folded Spill261; CHECK-i32-NEXT:    frintx v3.8h, v3.8h262; CHECK-i32-NEXT:    frintx v2.8h, v2.8h263; CHECK-i32-NEXT:    stp x20, x19, [sp, #48] // 16-byte Folded Spill264; CHECK-i32-NEXT:    frintx v1.8h, v1.8h265; CHECK-i32-NEXT:    frintx v0.8h, v0.8h266; CHECK-i32-NEXT:    stp x24, x23, [sp, #16] // 16-byte Folded Spill267; CHECK-i32-NEXT:    stp x22, x21, [sp, #32] // 16-byte Folded Spill268; CHECK-i32-NEXT:    mov h4, v3.h[7]269; CHECK-i32-NEXT:    mov h5, v3.h[6]270; CHECK-i32-NEXT:    mov h6, v3.h[5]271; CHECK-i32-NEXT:    mov h7, v3.h[4]272; CHECK-i32-NEXT:    mov h16, v3.h[3]273; CHECK-i32-NEXT:    mov h17, v3.h[2]274; CHECK-i32-NEXT:    mov h18, v3.h[1]275; CHECK-i32-NEXT:    mov h19, v2.h[7]276; CHECK-i32-NEXT:    fcvtzs w1, h3277; CHECK-i32-NEXT:    mov h3, v1.h[6]278; CHECK-i32-NEXT:    fcvtzs w7, h2279; CHECK-i32-NEXT:    fcvtzs w22, h0280; CHECK-i32-NEXT:    fcvtzs w8, h4281; CHECK-i32-NEXT:    mov h4, v2.h[6]282; CHECK-i32-NEXT:    fcvtzs w10, h5283; CHECK-i32-NEXT:    mov h5, v2.h[5]284; CHECK-i32-NEXT:    fcvtzs w12, h6285; CHECK-i32-NEXT:    mov h6, v2.h[4]286; CHECK-i32-NEXT:    fcvtzs w13, h7287; CHECK-i32-NEXT:    mov h7, v2.h[3]288; CHECK-i32-NEXT:    fcvtzs w9, h16289; CHECK-i32-NEXT:    fcvtzs w11, h17290; CHECK-i32-NEXT:    mov h16, v2.h[2]291; CHECK-i32-NEXT:    mov h17, v2.h[1]292; CHECK-i32-NEXT:    fcvtzs w17, h4293; CHECK-i32-NEXT:    mov h4, v1.h[5]294; CHECK-i32-NEXT:    mov h2, v0.h[5]295; CHECK-i32-NEXT:    fcvtzs w0, h5296; CHECK-i32-NEXT:    fcvtzs w3, h6297; CHECK-i32-NEXT:    mov h5, v1.h[4]298; CHECK-i32-NEXT:    mov h6, v0.h[4]299; CHECK-i32-NEXT:    fcvtzs w16, h7300; CHECK-i32-NEXT:    mov h7, v0.h[1]301; CHECK-i32-NEXT:    fcvtzs w15, h18302; CHECK-i32-NEXT:    fcvtzs w2, h3303; CHECK-i32-NEXT:    mov h3, v1.h[2]304; CHECK-i32-NEXT:    fcvtzs w19, h4305; CHECK-i32-NEXT:    mov h4, v1.h[1]306; CHECK-i32-NEXT:    mov h18, v0.h[6]307; CHECK-i32-NEXT:    fcvtzs w20, h5308; CHECK-i32-NEXT:    fcvtzs w23, h2309; CHECK-i32-NEXT:    mov h2, v0.h[2]310; CHECK-i32-NEXT:    fcvtzs w21, h6311; CHECK-i32-NEXT:    fcvtzs w25, h1312; CHECK-i32-NEXT:    fcvtzs w4, h17313; CHECK-i32-NEXT:    fcvtzs w24, h7314; CHECK-i32-NEXT:    fcvtzs w14, h19315; CHECK-i32-NEXT:    fcvtzs w18, h16316; CHECK-i32-NEXT:    fcvtzs w26, h4317; CHECK-i32-NEXT:    mov h16, v1.h[7]318; CHECK-i32-NEXT:    mov h17, v1.h[3]319; CHECK-i32-NEXT:    fcvtzs w5, h3320; CHECK-i32-NEXT:    mov h19, v0.h[7]321; CHECK-i32-NEXT:    fcvtzs w6, h18322; CHECK-i32-NEXT:    mov h18, v0.h[3]323; CHECK-i32-NEXT:    fmov s0, w22324; CHECK-i32-NEXT:    fmov s1, w21325; CHECK-i32-NEXT:    fcvtzs w21, h2326; CHECK-i32-NEXT:    fmov s2, w25327; CHECK-i32-NEXT:    fmov s3, w20328; CHECK-i32-NEXT:    fmov s4, w7329; CHECK-i32-NEXT:    fmov s5, w3330; CHECK-i32-NEXT:    fmov s6, w1331; CHECK-i32-NEXT:    fmov s7, w13332; CHECK-i32-NEXT:    mov v0.s[1], w24333; CHECK-i32-NEXT:    mov v1.s[1], w23334; CHECK-i32-NEXT:    ldp x24, x23, [sp, #16] // 16-byte Folded Reload335; CHECK-i32-NEXT:    mov v2.s[1], w26336; CHECK-i32-NEXT:    mov v3.s[1], w19337; CHECK-i32-NEXT:    ldp x20, x19, [sp, #48] // 16-byte Folded Reload338; CHECK-i32-NEXT:    mov v4.s[1], w4339; CHECK-i32-NEXT:    mov v5.s[1], w0340; CHECK-i32-NEXT:    mov v6.s[1], w15341; CHECK-i32-NEXT:    mov v7.s[1], w12342; CHECK-i32-NEXT:    fcvtzs w12, h16343; CHECK-i32-NEXT:    fcvtzs w13, h17344; CHECK-i32-NEXT:    fcvtzs w15, h19345; CHECK-i32-NEXT:    fcvtzs w0, h18346; CHECK-i32-NEXT:    mov v0.s[2], w21347; CHECK-i32-NEXT:    ldp x22, x21, [sp, #32] // 16-byte Folded Reload348; CHECK-i32-NEXT:    mov v1.s[2], w6349; CHECK-i32-NEXT:    mov v2.s[2], w5350; CHECK-i32-NEXT:    mov v3.s[2], w2351; CHECK-i32-NEXT:    mov v4.s[2], w18352; CHECK-i32-NEXT:    mov v5.s[2], w17353; CHECK-i32-NEXT:    mov v6.s[2], w11354; CHECK-i32-NEXT:    mov v7.s[2], w10355; CHECK-i32-NEXT:    mov v0.s[3], w0356; CHECK-i32-NEXT:    mov v1.s[3], w15357; CHECK-i32-NEXT:    mov v2.s[3], w13358; CHECK-i32-NEXT:    mov v3.s[3], w12359; CHECK-i32-NEXT:    mov v4.s[3], w16360; CHECK-i32-NEXT:    mov v5.s[3], w14361; CHECK-i32-NEXT:    mov v6.s[3], w9362; CHECK-i32-NEXT:    mov v7.s[3], w8363; CHECK-i32-NEXT:    ldp x26, x25, [sp], #64 // 16-byte Folded Reload364; CHECK-i32-NEXT:    ret365;366; CHECK-i64-LABEL: lrint_v32f16:367; CHECK-i64:       // %bb.0:368; CHECK-i64-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill369; CHECK-i64-NEXT:    sub x9, sp, #272370; CHECK-i64-NEXT:    mov x29, sp371; CHECK-i64-NEXT:    and sp, x9, #0xffffffffffffffe0372; CHECK-i64-NEXT:    frintx v5.4h, v0.4h373; CHECK-i64-NEXT:    ext v0.16b, v0.16b, v0.16b, #8374; CHECK-i64-NEXT:    ext v4.16b, v1.16b, v1.16b, #8375; CHECK-i64-NEXT:    ext v17.16b, v2.16b, v2.16b, #8376; CHECK-i64-NEXT:    frintx v1.4h, v1.4h377; CHECK-i64-NEXT:    frintx v2.4h, v2.4h378; CHECK-i64-NEXT:    ptrue p0.d, vl4379; CHECK-i64-NEXT:    mov h6, v5.h[3]380; CHECK-i64-NEXT:    frintx v0.4h, v0.4h381; CHECK-i64-NEXT:    mov h7, v5.h[2]382; CHECK-i64-NEXT:    mov h16, v5.h[1]383; CHECK-i64-NEXT:    frintx v4.4h, v4.4h384; CHECK-i64-NEXT:    fcvtzs x12, h5385; CHECK-i64-NEXT:    ext v5.16b, v3.16b, v3.16b, #8386; CHECK-i64-NEXT:    frintx v17.4h, v17.4h387; CHECK-i64-NEXT:    frintx v3.4h, v3.4h388; CHECK-i64-NEXT:    fcvtzs x9, h6389; CHECK-i64-NEXT:    mov h6, v0.h[3]390; CHECK-i64-NEXT:    fcvtzs x10, h7391; CHECK-i64-NEXT:    mov h7, v0.h[2]392; CHECK-i64-NEXT:    fcvtzs x11, h16393; CHECK-i64-NEXT:    mov h16, v0.h[1]394; CHECK-i64-NEXT:    fcvtzs x13, h6395; CHECK-i64-NEXT:    mov h6, v4.h[3]396; CHECK-i64-NEXT:    stp x10, x9, [sp, #48]397; CHECK-i64-NEXT:    fcvtzs x9, h7398; CHECK-i64-NEXT:    mov h7, v4.h[2]399; CHECK-i64-NEXT:    fcvtzs x10, h16400; CHECK-i64-NEXT:    mov h16, v4.h[1]401; CHECK-i64-NEXT:    stp x12, x11, [sp, #32]402; CHECK-i64-NEXT:    fcvtzs x11, h0403; CHECK-i64-NEXT:    frintx v0.4h, v5.4h404; CHECK-i64-NEXT:    mov h5, v17.h[3]405; CHECK-i64-NEXT:    fcvtzs x12, h6406; CHECK-i64-NEXT:    mov h6, v17.h[2]407; CHECK-i64-NEXT:    stp x9, x13, [sp, #16]408; CHECK-i64-NEXT:    fcvtzs x13, h7409; CHECK-i64-NEXT:    mov h7, v17.h[1]410; CHECK-i64-NEXT:    fcvtzs x9, h16411; CHECK-i64-NEXT:    stp x11, x10, [sp]412; CHECK-i64-NEXT:    fcvtzs x10, h4413; CHECK-i64-NEXT:    fcvtzs x11, h5414; CHECK-i64-NEXT:    mov h4, v0.h[3]415; CHECK-i64-NEXT:    mov h5, v0.h[2]416; CHECK-i64-NEXT:    stp x13, x12, [sp, #80]417; CHECK-i64-NEXT:    fcvtzs x12, h6418; CHECK-i64-NEXT:    fcvtzs x13, h7419; CHECK-i64-NEXT:    mov h6, v0.h[1]420; CHECK-i64-NEXT:    stp x10, x9, [sp, #64]421; CHECK-i64-NEXT:    fcvtzs x9, h17422; CHECK-i64-NEXT:    mov h7, v1.h[3]423; CHECK-i64-NEXT:    fcvtzs x10, h4424; CHECK-i64-NEXT:    mov h4, v1.h[2]425; CHECK-i64-NEXT:    stp x12, x11, [sp, #144]426; CHECK-i64-NEXT:    fcvtzs x11, h5427; CHECK-i64-NEXT:    mov h5, v1.h[1]428; CHECK-i64-NEXT:    fcvtzs x12, h6429; CHECK-i64-NEXT:    stp x9, x13, [sp, #128]430; CHECK-i64-NEXT:    fcvtzs x9, h0431; CHECK-i64-NEXT:    fcvtzs x13, h7432; CHECK-i64-NEXT:    mov h0, v2.h[3]433; CHECK-i64-NEXT:    stp x11, x10, [sp, #208]434; CHECK-i64-NEXT:    fcvtzs x10, h4435; CHECK-i64-NEXT:    mov h4, v2.h[2]436; CHECK-i64-NEXT:    fcvtzs x11, h5437; CHECK-i64-NEXT:    mov h5, v2.h[1]438; CHECK-i64-NEXT:    stp x9, x12, [sp, #192]439; CHECK-i64-NEXT:    fcvtzs x9, h1440; CHECK-i64-NEXT:    fcvtzs x12, h0441; CHECK-i64-NEXT:    mov h0, v3.h[3]442; CHECK-i64-NEXT:    mov h1, v3.h[2]443; CHECK-i64-NEXT:    stp x10, x13, [sp, #112]444; CHECK-i64-NEXT:    fcvtzs x10, h4445; CHECK-i64-NEXT:    mov h4, v3.h[1]446; CHECK-i64-NEXT:    fcvtzs x13, h5447; CHECK-i64-NEXT:    stp x9, x11, [sp, #96]448; CHECK-i64-NEXT:    fcvtzs x9, h2449; CHECK-i64-NEXT:    fcvtzs x11, h0450; CHECK-i64-NEXT:    stp x10, x12, [sp, #176]451; CHECK-i64-NEXT:    fcvtzs x10, h1452; CHECK-i64-NEXT:    fcvtzs x12, h4453; CHECK-i64-NEXT:    stp x9, x13, [sp, #160]454; CHECK-i64-NEXT:    fcvtzs x9, h3455; CHECK-i64-NEXT:    stp x10, x11, [sp, #240]456; CHECK-i64-NEXT:    add x10, sp, #64457; CHECK-i64-NEXT:    stp x9, x12, [sp, #224]458; CHECK-i64-NEXT:    add x9, sp, #32459; CHECK-i64-NEXT:    ld1d { z0.d }, p0/z, [x9]460; CHECK-i64-NEXT:    mov x9, sp461; CHECK-i64-NEXT:    ld1d { z2.d }, p0/z, [x10]462; CHECK-i64-NEXT:    ld1d { z1.d }, p0/z, [x9]463; CHECK-i64-NEXT:    add x9, sp, #224464; CHECK-i64-NEXT:    add x10, sp, #128465; CHECK-i64-NEXT:    ld1d { z3.d }, p0/z, [x9]466; CHECK-i64-NEXT:    add x9, sp, #160467; CHECK-i64-NEXT:    ld1d { z4.d }, p0/z, [x10]468; CHECK-i64-NEXT:    add x10, sp, #96469; CHECK-i64-NEXT:    ld1d { z5.d }, p0/z, [x9]470; CHECK-i64-NEXT:    add x9, sp, #192471; CHECK-i64-NEXT:    ld1d { z6.d }, p0/z, [x10]472; CHECK-i64-NEXT:    mov x10, #24 // =0x18473; CHECK-i64-NEXT:    ld1d { z7.d }, p0/z, [x9]474; CHECK-i64-NEXT:    mov x9, #16 // =0x10475; CHECK-i64-NEXT:    st1d { z3.d }, p0, [x8, x10, lsl #3]476; CHECK-i64-NEXT:    st1d { z5.d }, p0, [x8, x9, lsl #3]477; CHECK-i64-NEXT:    mov x9, #8 // =0x8478; CHECK-i64-NEXT:    st1d { z6.d }, p0, [x8, x9, lsl #3]479; CHECK-i64-NEXT:    mov x9, #28 // =0x1c480; CHECK-i64-NEXT:    st1d { z7.d }, p0, [x8, x9, lsl #3]481; CHECK-i64-NEXT:    mov x9, #20 // =0x14482; CHECK-i64-NEXT:    st1d { z4.d }, p0, [x8, x9, lsl #3]483; CHECK-i64-NEXT:    mov x9, #12 // =0xc484; CHECK-i64-NEXT:    st1d { z2.d }, p0, [x8, x9, lsl #3]485; CHECK-i64-NEXT:    mov x9, #4 // =0x4486; CHECK-i64-NEXT:    st1d { z1.d }, p0, [x8, x9, lsl #3]487; CHECK-i64-NEXT:    st1d { z0.d }, p0, [x8]488; CHECK-i64-NEXT:    mov sp, x29489; CHECK-i64-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload490; CHECK-i64-NEXT:    ret491  %a = call <32 x iXLen> @llvm.lrint.v32iXLen.v32f16(<32 x half> %x)492  ret <32 x iXLen> %a493}494declare <32 x iXLen> @llvm.lrint.v32iXLen.v32f16(<32 x half>)495 496define <1 x iXLen> @lrint_v1f32(<1 x float> %x) nounwind {497; CHECK-i32-LABEL: lrint_v1f32:498; CHECK-i32:       // %bb.0:499; CHECK-i32-NEXT:    frintx v0.2s, v0.2s500; CHECK-i32-NEXT:    fcvtzs v0.2s, v0.2s501; CHECK-i32-NEXT:    ret502;503; CHECK-i64-LABEL: lrint_v1f32:504; CHECK-i64:       // %bb.0:505; CHECK-i64-NEXT:    // kill: def $d0 killed $d0 def $q0506; CHECK-i64-NEXT:    frintx s0, s0507; CHECK-i64-NEXT:    fcvtzs x8, s0508; CHECK-i64-NEXT:    fmov d0, x8509; CHECK-i64-NEXT:    ret510  %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f32(<1 x float> %x)511  ret <1 x iXLen> %a512}513declare <1 x iXLen> @llvm.lrint.v1iXLen.v1f32(<1 x float>)514 515define <2 x iXLen> @lrint_v2f32(<2 x float> %x) nounwind {516; CHECK-i32-LABEL: lrint_v2f32:517; CHECK-i32:       // %bb.0:518; CHECK-i32-NEXT:    frintx v0.2s, v0.2s519; CHECK-i32-NEXT:    fcvtzs v0.2s, v0.2s520; CHECK-i32-NEXT:    ret521;522; CHECK-i64-LABEL: lrint_v2f32:523; CHECK-i64:       // %bb.0:524; CHECK-i64-NEXT:    frintx v0.2s, v0.2s525; CHECK-i64-NEXT:    fcvtl v0.2d, v0.2s526; CHECK-i64-NEXT:    fcvtzs v0.2d, v0.2d527; CHECK-i64-NEXT:    ret528  %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f32(<2 x float> %x)529  ret <2 x iXLen> %a530}531declare <2 x iXLen> @llvm.lrint.v2iXLen.v2f32(<2 x float>)532 533define <4 x iXLen> @lrint_v4f32(<4 x float> %x) nounwind {534; CHECK-i32-LABEL: lrint_v4f32:535; CHECK-i32:       // %bb.0:536; CHECK-i32-NEXT:    frintx v0.4s, v0.4s537; CHECK-i32-NEXT:    fcvtzs v0.4s, v0.4s538; CHECK-i32-NEXT:    ret539;540; CHECK-i64-LABEL: lrint_v4f32:541; CHECK-i64:       // %bb.0:542; CHECK-i64-NEXT:    frintx v0.4s, v0.4s543; CHECK-i64-NEXT:    mov s1, v0.s[2]544; CHECK-i64-NEXT:    mov s2, v0.s[3]545; CHECK-i64-NEXT:    mov s3, v0.s[1]546; CHECK-i64-NEXT:    fcvtzs x9, s0547; CHECK-i64-NEXT:    fcvtzs x8, s1548; CHECK-i64-NEXT:    fcvtzs x10, s2549; CHECK-i64-NEXT:    fcvtzs x11, s3550; CHECK-i64-NEXT:    fmov d0, x9551; CHECK-i64-NEXT:    fmov d1, x8552; CHECK-i64-NEXT:    mov v0.d[1], x11553; CHECK-i64-NEXT:    mov v1.d[1], x10554; CHECK-i64-NEXT:    ret555  %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f32(<4 x float> %x)556  ret <4 x iXLen> %a557}558declare <4 x iXLen> @llvm.lrint.v4iXLen.v4f32(<4 x float>)559 560define <8 x iXLen> @lrint_v8f32(<8 x float> %x) nounwind {561; CHECK-i32-LABEL: lrint_v8f32:562; CHECK-i32:       // %bb.0:563; CHECK-i32-NEXT:    ptrue p0.d, vl2564; CHECK-i32-NEXT:    // kill: def $q0 killed $q0 def $z0565; CHECK-i32-NEXT:    // kill: def $q1 killed $q1 def $z1566; CHECK-i32-NEXT:    splice z0.d, p0, z0.d, z1.d567; CHECK-i32-NEXT:    ptrue p0.s, vl8568; CHECK-i32-NEXT:    movprfx z2, z0569; CHECK-i32-NEXT:    frintx z2.s, p0/m, z0.s570; CHECK-i32-NEXT:    mov z0.s, z2.s[4]571; CHECK-i32-NEXT:    mov z1.s, z2.s[5]572; CHECK-i32-NEXT:    mov z3.s, z2.s[1]573; CHECK-i32-NEXT:    fcvtzs w9, s2574; CHECK-i32-NEXT:    fcvtzs w8, s0575; CHECK-i32-NEXT:    mov z0.s, z2.s[6]576; CHECK-i32-NEXT:    fcvtzs w10, s1577; CHECK-i32-NEXT:    mov z1.s, z2.s[2]578; CHECK-i32-NEXT:    fcvtzs w11, s3579; CHECK-i32-NEXT:    mov z3.s, z2.s[7]580; CHECK-i32-NEXT:    mov z2.s, z2.s[3]581; CHECK-i32-NEXT:    fcvtzs w12, s0582; CHECK-i32-NEXT:    fmov s0, w9583; CHECK-i32-NEXT:    fcvtzs w13, s1584; CHECK-i32-NEXT:    fmov s1, w8585; CHECK-i32-NEXT:    fcvtzs w8, s3586; CHECK-i32-NEXT:    fcvtzs w9, s2587; CHECK-i32-NEXT:    mov v0.s[1], w11588; CHECK-i32-NEXT:    mov v1.s[1], w10589; CHECK-i32-NEXT:    mov v0.s[2], w13590; CHECK-i32-NEXT:    mov v1.s[2], w12591; CHECK-i32-NEXT:    mov v0.s[3], w9592; CHECK-i32-NEXT:    mov v1.s[3], w8593; CHECK-i32-NEXT:    ret594;595; CHECK-i64-LABEL: lrint_v8f32:596; CHECK-i64:       // %bb.0:597; CHECK-i64-NEXT:    frintx v0.4s, v0.4s598; CHECK-i64-NEXT:    frintx v1.4s, v1.4s599; CHECK-i64-NEXT:    mov s3, v1.s[2]600; CHECK-i64-NEXT:    mov s4, v0.s[2]601; CHECK-i64-NEXT:    mov s2, v0.s[1]602; CHECK-i64-NEXT:    mov s5, v1.s[3]603; CHECK-i64-NEXT:    mov s6, v1.s[1]604; CHECK-i64-NEXT:    mov s7, v0.s[3]605; CHECK-i64-NEXT:    fcvtzs x8, s0606; CHECK-i64-NEXT:    fcvtzs x10, s1607; CHECK-i64-NEXT:    fcvtzs x11, s3608; CHECK-i64-NEXT:    fcvtzs x12, s4609; CHECK-i64-NEXT:    fcvtzs x9, s2610; CHECK-i64-NEXT:    fcvtzs x13, s5611; CHECK-i64-NEXT:    fcvtzs x14, s6612; CHECK-i64-NEXT:    fcvtzs x15, s7613; CHECK-i64-NEXT:    fmov d0, x8614; CHECK-i64-NEXT:    fmov d2, x10615; CHECK-i64-NEXT:    fmov d1, x12616; CHECK-i64-NEXT:    fmov d3, x11617; CHECK-i64-NEXT:    mov v0.d[1], x9618; CHECK-i64-NEXT:    mov v2.d[1], x14619; CHECK-i64-NEXT:    mov v1.d[1], x15620; CHECK-i64-NEXT:    mov v3.d[1], x13621; CHECK-i64-NEXT:    ret622  %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f32(<8 x float> %x)623  ret <8 x iXLen> %a624}625declare <8 x iXLen> @llvm.lrint.v8iXLen.v8f32(<8 x float>)626 627define <16 x iXLen> @lrint_v16f32(<16 x float> %x) nounwind {628; CHECK-i32-LABEL: lrint_v16f32:629; CHECK-i32:       // %bb.0:630; CHECK-i32-NEXT:    ptrue p0.d, vl2631; CHECK-i32-NEXT:    // kill: def $q2 killed $q2 def $z2632; CHECK-i32-NEXT:    // kill: def $q3 killed $q3 def $z3633; CHECK-i32-NEXT:    // kill: def $q0 killed $q0 def $z0634; CHECK-i32-NEXT:    // kill: def $q1 killed $q1 def $z1635; CHECK-i32-NEXT:    splice z2.d, p0, z2.d, z3.d636; CHECK-i32-NEXT:    splice z0.d, p0, z0.d, z1.d637; CHECK-i32-NEXT:    ptrue p0.s, vl8638; CHECK-i32-NEXT:    movprfx z1, z2639; CHECK-i32-NEXT:    frintx z1.s, p0/m, z2.s640; CHECK-i32-NEXT:    frintx z0.s, p0/m, z0.s641; CHECK-i32-NEXT:    mov z2.s, z1.s[5]642; CHECK-i32-NEXT:    mov z3.s, z1.s[4]643; CHECK-i32-NEXT:    mov z5.s, z0.s[5]644; CHECK-i32-NEXT:    mov z7.s, z0.s[1]645; CHECK-i32-NEXT:    fcvtzs w11, s0646; CHECK-i32-NEXT:    fcvtzs w13, s1647; CHECK-i32-NEXT:    mov z4.s, z1.s[7]648; CHECK-i32-NEXT:    mov z6.s, z1.s[6]649; CHECK-i32-NEXT:    mov z16.s, z0.s[7]650; CHECK-i32-NEXT:    fcvtzs w8, s2651; CHECK-i32-NEXT:    mov z2.s, z0.s[4]652; CHECK-i32-NEXT:    fcvtzs w9, s3653; CHECK-i32-NEXT:    mov z3.s, z1.s[1]654; CHECK-i32-NEXT:    fcvtzs w10, s5655; CHECK-i32-NEXT:    fcvtzs w12, s7656; CHECK-i32-NEXT:    mov z5.s, z0.s[6]657; CHECK-i32-NEXT:    mov z7.s, z1.s[2]658; CHECK-i32-NEXT:    mov z17.s, z1.s[3]659; CHECK-i32-NEXT:    fcvtzs w14, s2660; CHECK-i32-NEXT:    mov z2.s, z0.s[2]661; CHECK-i32-NEXT:    mov z18.s, z0.s[3]662; CHECK-i32-NEXT:    fcvtzs w15, s3663; CHECK-i32-NEXT:    fmov s0, w11664; CHECK-i32-NEXT:    fmov s3, w9665; CHECK-i32-NEXT:    fcvtzs w16, s6666; CHECK-i32-NEXT:    fcvtzs w17, s5667; CHECK-i32-NEXT:    fcvtzs w11, s7668; CHECK-i32-NEXT:    fcvtzs w18, s2669; CHECK-i32-NEXT:    fmov s2, w13670; CHECK-i32-NEXT:    fcvtzs w9, s16671; CHECK-i32-NEXT:    fmov s1, w14672; CHECK-i32-NEXT:    mov v0.s[1], w12673; CHECK-i32-NEXT:    mov v3.s[1], w8674; CHECK-i32-NEXT:    fcvtzs w8, s4675; CHECK-i32-NEXT:    fcvtzs w12, s18676; CHECK-i32-NEXT:    mov v2.s[1], w15677; CHECK-i32-NEXT:    mov v1.s[1], w10678; CHECK-i32-NEXT:    fcvtzs w10, s17679; CHECK-i32-NEXT:    mov v0.s[2], w18680; CHECK-i32-NEXT:    mov v3.s[2], w16681; CHECK-i32-NEXT:    mov v2.s[2], w11682; CHECK-i32-NEXT:    mov v1.s[2], w17683; CHECK-i32-NEXT:    mov v0.s[3], w12684; CHECK-i32-NEXT:    mov v3.s[3], w8685; CHECK-i32-NEXT:    mov v2.s[3], w10686; CHECK-i32-NEXT:    mov v1.s[3], w9687; CHECK-i32-NEXT:    ret688;689; CHECK-i64-LABEL: lrint_v16f32:690; CHECK-i64:       // %bb.0:691; CHECK-i64-NEXT:    frintx v3.4s, v3.4s692; CHECK-i64-NEXT:    frintx v2.4s, v2.4s693; CHECK-i64-NEXT:    frintx v1.4s, v1.4s694; CHECK-i64-NEXT:    frintx v0.4s, v0.4s695; CHECK-i64-NEXT:    mov s4, v3.s[2]696; CHECK-i64-NEXT:    mov s5, v2.s[2]697; CHECK-i64-NEXT:    mov s6, v1.s[2]698; CHECK-i64-NEXT:    mov s7, v0.s[2]699; CHECK-i64-NEXT:    fcvtzs x10, s1700; CHECK-i64-NEXT:    fcvtzs x11, s0701; CHECK-i64-NEXT:    mov s16, v0.s[1]702; CHECK-i64-NEXT:    mov s17, v1.s[1]703; CHECK-i64-NEXT:    mov s18, v3.s[1]704; CHECK-i64-NEXT:    fcvtzs x14, s3705; CHECK-i64-NEXT:    fcvtzs x16, s2706; CHECK-i64-NEXT:    fcvtzs x8, s4707; CHECK-i64-NEXT:    mov s4, v2.s[1]708; CHECK-i64-NEXT:    fcvtzs x9, s5709; CHECK-i64-NEXT:    mov s5, v1.s[3]710; CHECK-i64-NEXT:    fcvtzs x12, s6711; CHECK-i64-NEXT:    mov s6, v0.s[3]712; CHECK-i64-NEXT:    fcvtzs x13, s7713; CHECK-i64-NEXT:    mov s7, v3.s[3]714; CHECK-i64-NEXT:    fmov d0, x11715; CHECK-i64-NEXT:    fcvtzs x17, s16716; CHECK-i64-NEXT:    fcvtzs x18, s18717; CHECK-i64-NEXT:    fcvtzs x15, s4718; CHECK-i64-NEXT:    mov s4, v2.s[3]719; CHECK-i64-NEXT:    fmov d2, x10720; CHECK-i64-NEXT:    fcvtzs x11, s5721; CHECK-i64-NEXT:    fcvtzs x10, s6722; CHECK-i64-NEXT:    fmov d3, x12723; CHECK-i64-NEXT:    fmov d1, x13724; CHECK-i64-NEXT:    fcvtzs x12, s17725; CHECK-i64-NEXT:    fcvtzs x13, s7726; CHECK-i64-NEXT:    fmov d5, x9727; CHECK-i64-NEXT:    fmov d6, x14728; CHECK-i64-NEXT:    fmov d7, x8729; CHECK-i64-NEXT:    fcvtzs x0, s4730; CHECK-i64-NEXT:    fmov d4, x16731; CHECK-i64-NEXT:    mov v0.d[1], x17732; CHECK-i64-NEXT:    mov v1.d[1], x10733; CHECK-i64-NEXT:    mov v3.d[1], x11734; CHECK-i64-NEXT:    mov v2.d[1], x12735; CHECK-i64-NEXT:    mov v6.d[1], x18736; CHECK-i64-NEXT:    mov v7.d[1], x13737; CHECK-i64-NEXT:    mov v4.d[1], x15738; CHECK-i64-NEXT:    mov v5.d[1], x0739; CHECK-i64-NEXT:    ret740  %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16f32(<16 x float> %x)741  ret <16 x iXLen> %a742}743declare <16 x iXLen> @llvm.lrint.v16iXLen.v16f32(<16 x float>)744 745define <32 x iXLen> @lrint_v32f32(<32 x float> %x) nounwind {746; CHECK-i32-LABEL: lrint_v32f32:747; CHECK-i32:       // %bb.0:748; CHECK-i32-NEXT:    str x27, [sp, #-80]! // 8-byte Folded Spill749; CHECK-i32-NEXT:    ptrue p1.d, vl2750; CHECK-i32-NEXT:    // kill: def $q6 killed $q6 def $z6751; CHECK-i32-NEXT:    // kill: def $q7 killed $q7 def $z7752; CHECK-i32-NEXT:    // kill: def $q2 killed $q2 def $z2753; CHECK-i32-NEXT:    // kill: def $q4 killed $q4 def $z4754; CHECK-i32-NEXT:    // kill: def $q3 killed $q3 def $z3755; CHECK-i32-NEXT:    // kill: def $q5 killed $q5 def $z5756; CHECK-i32-NEXT:    // kill: def $q1 killed $q1 def $z1757; CHECK-i32-NEXT:    // kill: def $q0 killed $q0 def $z0758; CHECK-i32-NEXT:    stp x24, x23, [sp, #32] // 16-byte Folded Spill759; CHECK-i32-NEXT:    ptrue p0.s, vl8760; CHECK-i32-NEXT:    stp x22, x21, [sp, #48] // 16-byte Folded Spill761; CHECK-i32-NEXT:    splice z6.d, p1, z6.d, z7.d762; CHECK-i32-NEXT:    splice z2.d, p1, z2.d, z3.d763; CHECK-i32-NEXT:    splice z4.d, p1, z4.d, z5.d764; CHECK-i32-NEXT:    splice z0.d, p1, z0.d, z1.d765; CHECK-i32-NEXT:    stp x26, x25, [sp, #16] // 16-byte Folded Spill766; CHECK-i32-NEXT:    stp x20, x19, [sp, #64] // 16-byte Folded Spill767; CHECK-i32-NEXT:    movprfx z3, z6768; CHECK-i32-NEXT:    frintx z3.s, p0/m, z6.s769; CHECK-i32-NEXT:    frintx z2.s, p0/m, z2.s770; CHECK-i32-NEXT:    movprfx z1, z4771; CHECK-i32-NEXT:    frintx z1.s, p0/m, z4.s772; CHECK-i32-NEXT:    frintx z0.s, p0/m, z0.s773; CHECK-i32-NEXT:    mov z4.s, z3.s[7]774; CHECK-i32-NEXT:    mov z5.s, z3.s[6]775; CHECK-i32-NEXT:    mov z6.s, z3.s[5]776; CHECK-i32-NEXT:    mov z16.s, z1.s[7]777; CHECK-i32-NEXT:    mov z7.s, z3.s[4]778; CHECK-i32-NEXT:    mov z17.s, z1.s[6]779; CHECK-i32-NEXT:    mov z18.s, z1.s[5]780; CHECK-i32-NEXT:    mov z19.s, z1.s[4]781; CHECK-i32-NEXT:    fcvtzs w7, s3782; CHECK-i32-NEXT:    fcvtzs w8, s4783; CHECK-i32-NEXT:    mov z4.s, z2.s[7]784; CHECK-i32-NEXT:    fcvtzs w10, s5785; CHECK-i32-NEXT:    mov z5.s, z2.s[6]786; CHECK-i32-NEXT:    fcvtzs w13, s6787; CHECK-i32-NEXT:    fcvtzs w9, s16788; CHECK-i32-NEXT:    mov z6.s, z2.s[4]789; CHECK-i32-NEXT:    mov z16.s, z0.s[6]790; CHECK-i32-NEXT:    fcvtzs w14, s7791; CHECK-i32-NEXT:    fcvtzs w11, s4792; CHECK-i32-NEXT:    mov z4.s, z2.s[5]793; CHECK-i32-NEXT:    mov z7.s, z0.s[7]794; CHECK-i32-NEXT:    fcvtzs w16, s5795; CHECK-i32-NEXT:    mov z5.s, z0.s[4]796; CHECK-i32-NEXT:    fcvtzs w12, s17797; CHECK-i32-NEXT:    fcvtzs w15, s18798; CHECK-i32-NEXT:    fcvtzs w17, s19799; CHECK-i32-NEXT:    mov z17.s, z0.s[5]800; CHECK-i32-NEXT:    fcvtzs w3, s4801; CHECK-i32-NEXT:    mov z4.s, z3.s[1]802; CHECK-i32-NEXT:    mov z18.s, z3.s[2]803; CHECK-i32-NEXT:    fcvtzs w4, s6804; CHECK-i32-NEXT:    fcvtzs w0, s16805; CHECK-i32-NEXT:    fcvtzs w6, s5806; CHECK-i32-NEXT:    mov z16.s, z3.s[3]807; CHECK-i32-NEXT:    mov z3.s, z0.s[1]808; CHECK-i32-NEXT:    mov z5.s, z1.s[1]809; CHECK-i32-NEXT:    mov z6.s, z2.s[1]810; CHECK-i32-NEXT:    fcvtzs w21, s1811; CHECK-i32-NEXT:    fcvtzs w22, s0812; CHECK-i32-NEXT:    fcvtzs w23, s2813; CHECK-i32-NEXT:    fcvtzs w18, s7814; CHECK-i32-NEXT:    fcvtzs w2, s4815; CHECK-i32-NEXT:    mov z4.s, z1.s[2]816; CHECK-i32-NEXT:    mov z7.s, z2.s[2]817; CHECK-i32-NEXT:    fcvtzs w5, s17818; CHECK-i32-NEXT:    fcvtzs w24, s3819; CHECK-i32-NEXT:    fcvtzs w25, s5820; CHECK-i32-NEXT:    fcvtzs w26, s6821; CHECK-i32-NEXT:    fcvtzs w1, s18822; CHECK-i32-NEXT:    mov z18.s, z0.s[2]823; CHECK-i32-NEXT:    mov z17.s, z1.s[3]824; CHECK-i32-NEXT:    fcvtzs w19, s4825; CHECK-i32-NEXT:    mov z19.s, z2.s[3]826; CHECK-i32-NEXT:    fcvtzs w20, s7827; CHECK-i32-NEXT:    mov z20.s, z0.s[3]828; CHECK-i32-NEXT:    fmov s0, w22829; CHECK-i32-NEXT:    fmov s2, w23830; CHECK-i32-NEXT:    fmov s4, w21831; CHECK-i32-NEXT:    ldp x22, x21, [sp, #48] // 16-byte Folded Reload832; CHECK-i32-NEXT:    fmov s1, w6833; CHECK-i32-NEXT:    fmov s6, w7834; CHECK-i32-NEXT:    fmov s3, w4835; CHECK-i32-NEXT:    fmov s5, w17836; CHECK-i32-NEXT:    fmov s7, w14837; CHECK-i32-NEXT:    fcvtzs w27, s18838; CHECK-i32-NEXT:    mov v0.s[1], w24839; CHECK-i32-NEXT:    ldp x24, x23, [sp, #32] // 16-byte Folded Reload840; CHECK-i32-NEXT:    mov v2.s[1], w26841; CHECK-i32-NEXT:    mov v4.s[1], w25842; CHECK-i32-NEXT:    mov v1.s[1], w5843; CHECK-i32-NEXT:    ldp x26, x25, [sp, #16] // 16-byte Folded Reload844; CHECK-i32-NEXT:    mov v3.s[1], w3845; CHECK-i32-NEXT:    mov v6.s[1], w2846; CHECK-i32-NEXT:    mov v5.s[1], w15847; CHECK-i32-NEXT:    mov v7.s[1], w13848; CHECK-i32-NEXT:    fcvtzs w13, s16849; CHECK-i32-NEXT:    fcvtzs w14, s17850; CHECK-i32-NEXT:    fcvtzs w15, s19851; CHECK-i32-NEXT:    fcvtzs w17, s20852; CHECK-i32-NEXT:    mov v0.s[2], w27853; CHECK-i32-NEXT:    mov v1.s[2], w0854; CHECK-i32-NEXT:    mov v2.s[2], w20855; CHECK-i32-NEXT:    mov v4.s[2], w19856; CHECK-i32-NEXT:    mov v3.s[2], w16857; CHECK-i32-NEXT:    ldp x20, x19, [sp, #64] // 16-byte Folded Reload858; CHECK-i32-NEXT:    mov v6.s[2], w1859; CHECK-i32-NEXT:    mov v5.s[2], w12860; CHECK-i32-NEXT:    mov v7.s[2], w10861; CHECK-i32-NEXT:    mov v0.s[3], w17862; CHECK-i32-NEXT:    mov v1.s[3], w18863; CHECK-i32-NEXT:    mov v2.s[3], w15864; CHECK-i32-NEXT:    mov v4.s[3], w14865; CHECK-i32-NEXT:    mov v3.s[3], w11866; CHECK-i32-NEXT:    mov v6.s[3], w13867; CHECK-i32-NEXT:    mov v5.s[3], w9868; CHECK-i32-NEXT:    mov v7.s[3], w8869; CHECK-i32-NEXT:    ldr x27, [sp], #80 // 8-byte Folded Reload870; CHECK-i32-NEXT:    ret871;872; CHECK-i64-LABEL: lrint_v32f32:873; CHECK-i64:       // %bb.0:874; CHECK-i64-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill875; CHECK-i64-NEXT:    sub x9, sp, #272876; CHECK-i64-NEXT:    mov x29, sp877; CHECK-i64-NEXT:    and sp, x9, #0xffffffffffffffe0878; CHECK-i64-NEXT:    frintx v0.4s, v0.4s879; CHECK-i64-NEXT:    frintx v1.4s, v1.4s880; CHECK-i64-NEXT:    frintx v2.4s, v2.4s881; CHECK-i64-NEXT:    ptrue p0.d, vl4882; CHECK-i64-NEXT:    mov s16, v0.s[3]883; CHECK-i64-NEXT:    mov s17, v0.s[2]884; CHECK-i64-NEXT:    mov s18, v0.s[1]885; CHECK-i64-NEXT:    fcvtzs x12, s0886; CHECK-i64-NEXT:    frintx v0.4s, v3.4s887; CHECK-i64-NEXT:    mov s3, v2.s[3]888; CHECK-i64-NEXT:    fcvtzs x9, s16889; CHECK-i64-NEXT:    mov s16, v1.s[3]890; CHECK-i64-NEXT:    fcvtzs x10, s17891; CHECK-i64-NEXT:    mov s17, v1.s[2]892; CHECK-i64-NEXT:    fcvtzs x11, s18893; CHECK-i64-NEXT:    mov s18, v1.s[1]894; CHECK-i64-NEXT:    fcvtzs x13, s16895; CHECK-i64-NEXT:    stp x10, x9, [sp, #16]896; CHECK-i64-NEXT:    mov s16, v2.s[2]897; CHECK-i64-NEXT:    fcvtzs x9, s17898; CHECK-i64-NEXT:    fcvtzs x10, s18899; CHECK-i64-NEXT:    mov s17, v2.s[1]900; CHECK-i64-NEXT:    stp x12, x11, [sp]901; CHECK-i64-NEXT:    fcvtzs x11, s1902; CHECK-i64-NEXT:    frintx v1.4s, v4.4s903; CHECK-i64-NEXT:    fcvtzs x12, s3904; CHECK-i64-NEXT:    mov s3, v0.s[3]905; CHECK-i64-NEXT:    mov s4, v0.s[2]906; CHECK-i64-NEXT:    stp x9, x13, [sp, #48]907; CHECK-i64-NEXT:    fcvtzs x13, s16908; CHECK-i64-NEXT:    fcvtzs x9, s17909; CHECK-i64-NEXT:    mov s16, v0.s[1]910; CHECK-i64-NEXT:    stp x11, x10, [sp, #32]911; CHECK-i64-NEXT:    fcvtzs x10, s2912; CHECK-i64-NEXT:    frintx v2.4s, v5.4s913; CHECK-i64-NEXT:    fcvtzs x11, s3914; CHECK-i64-NEXT:    mov s3, v1.s[3]915; CHECK-i64-NEXT:    mov s5, v1.s[1]916; CHECK-i64-NEXT:    stp x13, x12, [sp, #80]917; CHECK-i64-NEXT:    fcvtzs x12, s4918; CHECK-i64-NEXT:    mov s4, v1.s[2]919; CHECK-i64-NEXT:    fcvtzs x13, s16920; CHECK-i64-NEXT:    stp x10, x9, [sp, #64]921; CHECK-i64-NEXT:    fcvtzs x9, s0922; CHECK-i64-NEXT:    mov s0, v2.s[3]923; CHECK-i64-NEXT:    fcvtzs x10, s3924; CHECK-i64-NEXT:    frintx v3.4s, v6.4s925; CHECK-i64-NEXT:    stp x12, x11, [sp, #112]926; CHECK-i64-NEXT:    fcvtzs x11, s4927; CHECK-i64-NEXT:    mov s4, v2.s[2]928; CHECK-i64-NEXT:    fcvtzs x12, s5929; CHECK-i64-NEXT:    mov s5, v2.s[1]930; CHECK-i64-NEXT:    stp x9, x13, [sp, #96]931; CHECK-i64-NEXT:    fcvtzs x9, s1932; CHECK-i64-NEXT:    fcvtzs x13, s0933; CHECK-i64-NEXT:    mov s0, v3.s[3]934; CHECK-i64-NEXT:    frintx v1.4s, v7.4s935; CHECK-i64-NEXT:    stp x11, x10, [sp, #144]936; CHECK-i64-NEXT:    fcvtzs x10, s4937; CHECK-i64-NEXT:    mov s4, v3.s[2]938; CHECK-i64-NEXT:    fcvtzs x11, s5939; CHECK-i64-NEXT:    mov s5, v3.s[1]940; CHECK-i64-NEXT:    stp x9, x12, [sp, #128]941; CHECK-i64-NEXT:    fcvtzs x9, s2942; CHECK-i64-NEXT:    fcvtzs x12, s0943; CHECK-i64-NEXT:    mov s0, v1.s[3]944; CHECK-i64-NEXT:    mov s2, v1.s[2]945; CHECK-i64-NEXT:    stp x10, x13, [sp, #176]946; CHECK-i64-NEXT:    fcvtzs x10, s4947; CHECK-i64-NEXT:    mov s4, v1.s[1]948; CHECK-i64-NEXT:    fcvtzs x13, s5949; CHECK-i64-NEXT:    stp x9, x11, [sp, #160]950; CHECK-i64-NEXT:    fcvtzs x9, s3951; CHECK-i64-NEXT:    fcvtzs x11, s0952; CHECK-i64-NEXT:    stp x10, x12, [sp, #208]953; CHECK-i64-NEXT:    fcvtzs x10, s2954; CHECK-i64-NEXT:    fcvtzs x12, s4955; CHECK-i64-NEXT:    stp x9, x13, [sp, #192]956; CHECK-i64-NEXT:    fcvtzs x9, s1957; CHECK-i64-NEXT:    stp x10, x11, [sp, #240]958; CHECK-i64-NEXT:    add x10, sp, #64959; CHECK-i64-NEXT:    stp x9, x12, [sp, #224]960; CHECK-i64-NEXT:    mov x9, sp961; CHECK-i64-NEXT:    ld1d { z0.d }, p0/z, [x9]962; CHECK-i64-NEXT:    add x9, sp, #32963; CHECK-i64-NEXT:    ld1d { z2.d }, p0/z, [x10]964; CHECK-i64-NEXT:    ld1d { z1.d }, p0/z, [x9]965; CHECK-i64-NEXT:    add x9, sp, #224966; CHECK-i64-NEXT:    add x10, sp, #96967; CHECK-i64-NEXT:    ld1d { z3.d }, p0/z, [x9]968; CHECK-i64-NEXT:    add x9, sp, #192969; CHECK-i64-NEXT:    ld1d { z4.d }, p0/z, [x10]970; CHECK-i64-NEXT:    add x10, sp, #160971; CHECK-i64-NEXT:    ld1d { z5.d }, p0/z, [x9]972; CHECK-i64-NEXT:    add x9, sp, #128973; CHECK-i64-NEXT:    ld1d { z6.d }, p0/z, [x10]974; CHECK-i64-NEXT:    mov x10, #28 // =0x1c975; CHECK-i64-NEXT:    ld1d { z7.d }, p0/z, [x9]976; CHECK-i64-NEXT:    mov x9, #24 // =0x18977; CHECK-i64-NEXT:    st1d { z3.d }, p0, [x8, x10, lsl #3]978; CHECK-i64-NEXT:    st1d { z5.d }, p0, [x8, x9, lsl #3]979; CHECK-i64-NEXT:    mov x9, #20 // =0x14980; CHECK-i64-NEXT:    st1d { z6.d }, p0, [x8, x9, lsl #3]981; CHECK-i64-NEXT:    mov x9, #16 // =0x10982; CHECK-i64-NEXT:    st1d { z7.d }, p0, [x8, x9, lsl #3]983; CHECK-i64-NEXT:    mov x9, #12 // =0xc984; CHECK-i64-NEXT:    st1d { z4.d }, p0, [x8, x9, lsl #3]985; CHECK-i64-NEXT:    mov x9, #8 // =0x8986; CHECK-i64-NEXT:    st1d { z2.d }, p0, [x8, x9, lsl #3]987; CHECK-i64-NEXT:    mov x9, #4 // =0x4988; CHECK-i64-NEXT:    st1d { z1.d }, p0, [x8, x9, lsl #3]989; CHECK-i64-NEXT:    st1d { z0.d }, p0, [x8]990; CHECK-i64-NEXT:    mov sp, x29991; CHECK-i64-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload992; CHECK-i64-NEXT:    ret993  %a = call <32 x iXLen> @llvm.lrint.v32iXLen.v32f32(<32 x float> %x)994  ret <32 x iXLen> %a995}996declare <32 x iXLen> @llvm.lrint.v32iXLen.v32f32(<32 x float>)997 998define <1 x iXLen> @lrint_v1f64(<1 x double> %x) nounwind {999; CHECK-i32-LABEL: lrint_v1f64:1000; CHECK-i32:       // %bb.0:1001; CHECK-i32-NEXT:    frintx d0, d01002; CHECK-i32-NEXT:    fcvtzs w8, d01003; CHECK-i32-NEXT:    fmov s0, w81004; CHECK-i32-NEXT:    ret1005;1006; CHECK-i64-LABEL: lrint_v1f64:1007; CHECK-i64:       // %bb.0:1008; CHECK-i64-NEXT:    frintx d0, d01009; CHECK-i64-NEXT:    fcvtzs x8, d01010; CHECK-i64-NEXT:    fmov d0, x81011; CHECK-i64-NEXT:    ret1012  %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f64(<1 x double> %x)1013  ret <1 x iXLen> %a1014}1015declare <1 x iXLen> @llvm.lrint.v1iXLen.v1f64(<1 x double>)1016 1017define <2 x iXLen> @lrint_v2f64(<2 x double> %x) nounwind {1018; CHECK-i32-LABEL: lrint_v2f64:1019; CHECK-i32:       // %bb.0:1020; CHECK-i32-NEXT:    frintx v0.2d, v0.2d1021; CHECK-i32-NEXT:    mov d1, v0.d[1]1022; CHECK-i32-NEXT:    fcvtzs w8, d01023; CHECK-i32-NEXT:    fcvtzs w9, d11024; CHECK-i32-NEXT:    fmov s0, w81025; CHECK-i32-NEXT:    mov v0.s[1], w91026; CHECK-i32-NEXT:    // kill: def $d0 killed $d0 killed $q01027; CHECK-i32-NEXT:    ret1028;1029; CHECK-i64-LABEL: lrint_v2f64:1030; CHECK-i64:       // %bb.0:1031; CHECK-i64-NEXT:    frintx v0.2d, v0.2d1032; CHECK-i64-NEXT:    fcvtzs v0.2d, v0.2d1033; CHECK-i64-NEXT:    ret1034  %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f64(<2 x double> %x)1035  ret <2 x iXLen> %a1036}1037declare <2 x iXLen> @llvm.lrint.v2iXLen.v2f64(<2 x double>)1038 1039define <4 x iXLen> @lrint_v4f64(<4 x double> %x) nounwind {1040; CHECK-i32-LABEL: lrint_v4f64:1041; CHECK-i32:       // %bb.0:1042; CHECK-i32-NEXT:    ptrue p0.d, vl21043; CHECK-i32-NEXT:    // kill: def $q0 killed $q0 def $z01044; CHECK-i32-NEXT:    // kill: def $q1 killed $q1 def $z11045; CHECK-i32-NEXT:    splice z0.d, p0, z0.d, z1.d1046; CHECK-i32-NEXT:    ptrue p0.d, vl41047; CHECK-i32-NEXT:    movprfx z1, z01048; CHECK-i32-NEXT:    frintx z1.d, p0/m, z0.d1049; CHECK-i32-NEXT:    mov z0.d, z1.d[1]1050; CHECK-i32-NEXT:    fcvtzs w8, d11051; CHECK-i32-NEXT:    mov z2.d, z1.d[2]1052; CHECK-i32-NEXT:    mov z1.d, z1.d[3]1053; CHECK-i32-NEXT:    fcvtzs w9, d01054; CHECK-i32-NEXT:    fmov s0, w81055; CHECK-i32-NEXT:    fcvtzs w8, d21056; CHECK-i32-NEXT:    mov v0.s[1], w91057; CHECK-i32-NEXT:    mov v0.s[2], w81058; CHECK-i32-NEXT:    fcvtzs w8, d11059; CHECK-i32-NEXT:    mov v0.s[3], w81060; CHECK-i32-NEXT:    ret1061;1062; CHECK-i64-LABEL: lrint_v4f64:1063; CHECK-i64:       // %bb.0:1064; CHECK-i64-NEXT:    ptrue p0.d, vl21065; CHECK-i64-NEXT:    // kill: def $q0 killed $q0 def $z01066; CHECK-i64-NEXT:    // kill: def $q1 killed $q1 def $z11067; CHECK-i64-NEXT:    splice z0.d, p0, z0.d, z1.d1068; CHECK-i64-NEXT:    ptrue p0.d, vl41069; CHECK-i64-NEXT:    frintx z0.d, p0/m, z0.d1070; CHECK-i64-NEXT:    mov z1.d, z0.d[2]1071; CHECK-i64-NEXT:    mov z2.d, z0.d[3]1072; CHECK-i64-NEXT:    mov z3.d, z0.d[1]1073; CHECK-i64-NEXT:    fcvtzs x9, d01074; CHECK-i64-NEXT:    fcvtzs x8, d11075; CHECK-i64-NEXT:    fcvtzs x10, d21076; CHECK-i64-NEXT:    fcvtzs x11, d31077; CHECK-i64-NEXT:    fmov d0, x91078; CHECK-i64-NEXT:    fmov d1, x81079; CHECK-i64-NEXT:    mov v0.d[1], x111080; CHECK-i64-NEXT:    mov v1.d[1], x101081; CHECK-i64-NEXT:    ret1082  %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f64(<4 x double> %x)1083  ret <4 x iXLen> %a1084}1085declare <4 x iXLen> @llvm.lrint.v4iXLen.v4f64(<4 x double>)1086 1087define <8 x iXLen> @lrint_v8f64(<8 x double> %x) nounwind {1088; CHECK-i32-LABEL: lrint_v8f64:1089; CHECK-i32:       // %bb.0:1090; CHECK-i32-NEXT:    ptrue p0.d, vl21091; CHECK-i32-NEXT:    // kill: def $q2 killed $q2 def $z21092; CHECK-i32-NEXT:    // kill: def $q0 killed $q0 def $z01093; CHECK-i32-NEXT:    // kill: def $q3 killed $q3 def $z31094; CHECK-i32-NEXT:    // kill: def $q1 killed $q1 def $z11095; CHECK-i32-NEXT:    splice z0.d, p0, z0.d, z1.d1096; CHECK-i32-NEXT:    splice z2.d, p0, z2.d, z3.d1097; CHECK-i32-NEXT:    ptrue p0.d, vl41098; CHECK-i32-NEXT:    movprfx z3, z01099; CHECK-i32-NEXT:    frintx z3.d, p0/m, z0.d1100; CHECK-i32-NEXT:    frintx z2.d, p0/m, z2.d1101; CHECK-i32-NEXT:    mov z0.d, z3.d[1]1102; CHECK-i32-NEXT:    mov z1.d, z2.d[1]1103; CHECK-i32-NEXT:    fcvtzs w8, d31104; CHECK-i32-NEXT:    fcvtzs w9, d21105; CHECK-i32-NEXT:    mov z4.d, z3.d[2]1106; CHECK-i32-NEXT:    mov z5.d, z2.d[2]1107; CHECK-i32-NEXT:    mov z3.d, z3.d[3]1108; CHECK-i32-NEXT:    mov z2.d, z2.d[3]1109; CHECK-i32-NEXT:    fcvtzs w10, d01110; CHECK-i32-NEXT:    fcvtzs w11, d11111; CHECK-i32-NEXT:    fmov s0, w81112; CHECK-i32-NEXT:    fcvtzs w8, d41113; CHECK-i32-NEXT:    fmov s1, w91114; CHECK-i32-NEXT:    fcvtzs w9, d51115; CHECK-i32-NEXT:    mov v0.s[1], w101116; CHECK-i32-NEXT:    mov v1.s[1], w111117; CHECK-i32-NEXT:    mov v0.s[2], w81118; CHECK-i32-NEXT:    fcvtzs w8, d31119; CHECK-i32-NEXT:    mov v1.s[2], w91120; CHECK-i32-NEXT:    fcvtzs w9, d21121; CHECK-i32-NEXT:    mov v0.s[3], w81122; CHECK-i32-NEXT:    mov v1.s[3], w91123; CHECK-i32-NEXT:    ret1124;1125; CHECK-i64-LABEL: lrint_v8f64:1126; CHECK-i64:       // %bb.0:1127; CHECK-i64-NEXT:    ptrue p0.d, vl21128; CHECK-i64-NEXT:    // kill: def $q2 killed $q2 def $z21129; CHECK-i64-NEXT:    // kill: def $q0 killed $q0 def $z01130; CHECK-i64-NEXT:    // kill: def $q3 killed $q3 def $z31131; CHECK-i64-NEXT:    // kill: def $q1 killed $q1 def $z11132; CHECK-i64-NEXT:    splice z0.d, p0, z0.d, z1.d1133; CHECK-i64-NEXT:    splice z2.d, p0, z2.d, z3.d1134; CHECK-i64-NEXT:    ptrue p0.d, vl41135; CHECK-i64-NEXT:    frintx z0.d, p0/m, z0.d1136; CHECK-i64-NEXT:    movprfx z1, z21137; CHECK-i64-NEXT:    frintx z1.d, p0/m, z2.d1138; CHECK-i64-NEXT:    mov z4.d, z1.d[2]1139; CHECK-i64-NEXT:    mov z5.d, z0.d[2]1140; CHECK-i64-NEXT:    mov z2.d, z0.d[1]1141; CHECK-i64-NEXT:    mov z3.d, z1.d[3]1142; CHECK-i64-NEXT:    mov z6.d, z0.d[3]1143; CHECK-i64-NEXT:    fcvtzs x8, d01144; CHECK-i64-NEXT:    mov z0.d, z1.d[1]1145; CHECK-i64-NEXT:    fcvtzs x10, d11146; CHECK-i64-NEXT:    fcvtzs x11, d41147; CHECK-i64-NEXT:    fcvtzs x12, d51148; CHECK-i64-NEXT:    fcvtzs x9, d21149; CHECK-i64-NEXT:    fcvtzs x13, d31150; CHECK-i64-NEXT:    fcvtzs x14, d61151; CHECK-i64-NEXT:    fcvtzs x15, d01152; CHECK-i64-NEXT:    fmov d0, x81153; CHECK-i64-NEXT:    fmov d2, x101154; CHECK-i64-NEXT:    fmov d1, x121155; CHECK-i64-NEXT:    fmov d3, x111156; CHECK-i64-NEXT:    mov v0.d[1], x91157; CHECK-i64-NEXT:    mov v2.d[1], x151158; CHECK-i64-NEXT:    mov v1.d[1], x141159; CHECK-i64-NEXT:    mov v3.d[1], x131160; CHECK-i64-NEXT:    ret1161  %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f64(<8 x double> %x)1162  ret <8 x iXLen> %a1163}1164declare <8 x iXLen> @llvm.lrint.v8iXLen.v8f64(<8 x double>)1165 1166define <16 x iXLen> @lrint_v16f64(<16 x double> %x) nounwind {1167; CHECK-i32-LABEL: lrint_v16f64:1168; CHECK-i32:       // %bb.0:1169; CHECK-i32-NEXT:    ptrue p1.d, vl21170; CHECK-i32-NEXT:    // kill: def $q0 killed $q0 def $z01171; CHECK-i32-NEXT:    // kill: def $q6 killed $q6 def $z61172; CHECK-i32-NEXT:    // kill: def $q4 killed $q4 def $z41173; CHECK-i32-NEXT:    // kill: def $q2 killed $q2 def $z21174; CHECK-i32-NEXT:    // kill: def $q1 killed $q1 def $z11175; CHECK-i32-NEXT:    // kill: def $q7 killed $q7 def $z71176; CHECK-i32-NEXT:    // kill: def $q5 killed $q5 def $z51177; CHECK-i32-NEXT:    // kill: def $q3 killed $q3 def $z31178; CHECK-i32-NEXT:    ptrue p0.d, vl41179; CHECK-i32-NEXT:    splice z0.d, p1, z0.d, z1.d1180; CHECK-i32-NEXT:    splice z2.d, p1, z2.d, z3.d1181; CHECK-i32-NEXT:    splice z4.d, p1, z4.d, z5.d1182; CHECK-i32-NEXT:    splice z6.d, p1, z6.d, z7.d1183; CHECK-i32-NEXT:    movprfx z5, z01184; CHECK-i32-NEXT:    frintx z5.d, p0/m, z0.d1185; CHECK-i32-NEXT:    movprfx z7, z21186; CHECK-i32-NEXT:    frintx z7.d, p0/m, z2.d1187; CHECK-i32-NEXT:    frintx z4.d, p0/m, z4.d1188; CHECK-i32-NEXT:    frintx z6.d, p0/m, z6.d1189; CHECK-i32-NEXT:    fcvtzs w8, d51190; CHECK-i32-NEXT:    mov z0.d, z5.d[1]1191; CHECK-i32-NEXT:    mov z1.d, z7.d[1]1192; CHECK-i32-NEXT:    fcvtzs w9, d71193; CHECK-i32-NEXT:    mov z3.d, z4.d[1]1194; CHECK-i32-NEXT:    fcvtzs w10, d41195; CHECK-i32-NEXT:    mov z16.d, z6.d[1]1196; CHECK-i32-NEXT:    fcvtzs w12, d61197; CHECK-i32-NEXT:    mov z2.d, z5.d[2]1198; CHECK-i32-NEXT:    fcvtzs w11, d01199; CHECK-i32-NEXT:    fcvtzs w13, d11200; CHECK-i32-NEXT:    mov z17.d, z7.d[2]1201; CHECK-i32-NEXT:    fcvtzs w14, d31202; CHECK-i32-NEXT:    fmov s0, w81203; CHECK-i32-NEXT:    mov z18.d, z4.d[2]1204; CHECK-i32-NEXT:    fcvtzs w8, d161205; CHECK-i32-NEXT:    mov z19.d, z6.d[2]1206; CHECK-i32-NEXT:    fcvtzs w15, d21207; CHECK-i32-NEXT:    fmov s1, w91208; CHECK-i32-NEXT:    fmov s2, w101209; CHECK-i32-NEXT:    fmov s3, w121210; CHECK-i32-NEXT:    fcvtzs w9, d171211; CHECK-i32-NEXT:    fcvtzs w10, d181212; CHECK-i32-NEXT:    mov v0.s[1], w111213; CHECK-i32-NEXT:    fcvtzs w11, d191214; CHECK-i32-NEXT:    mov z5.d, z5.d[3]1215; CHECK-i32-NEXT:    mov z7.d, z7.d[3]1216; CHECK-i32-NEXT:    mov v1.s[1], w131217; CHECK-i32-NEXT:    mov v2.s[1], w141218; CHECK-i32-NEXT:    mov v3.s[1], w81219; CHECK-i32-NEXT:    mov z4.d, z4.d[3]1220; CHECK-i32-NEXT:    mov z6.d, z6.d[3]1221; CHECK-i32-NEXT:    mov v0.s[2], w151222; CHECK-i32-NEXT:    fcvtzs w8, d51223; CHECK-i32-NEXT:    mov v1.s[2], w91224; CHECK-i32-NEXT:    fcvtzs w9, d71225; CHECK-i32-NEXT:    mov v2.s[2], w101226; CHECK-i32-NEXT:    fcvtzs w10, d41227; CHECK-i32-NEXT:    mov v3.s[2], w111228; CHECK-i32-NEXT:    fcvtzs w11, d61229; CHECK-i32-NEXT:    mov v0.s[3], w81230; CHECK-i32-NEXT:    mov v1.s[3], w91231; CHECK-i32-NEXT:    mov v2.s[3], w101232; CHECK-i32-NEXT:    mov v3.s[3], w111233; CHECK-i32-NEXT:    ret1234;1235; CHECK-i64-LABEL: lrint_v16f64:1236; CHECK-i64:       // %bb.0:1237; CHECK-i64-NEXT:    ptrue p1.d, vl21238; CHECK-i64-NEXT:    // kill: def $q6 killed $q6 def $z61239; CHECK-i64-NEXT:    // kill: def $q4 killed $q4 def $z41240; CHECK-i64-NEXT:    // kill: def $q7 killed $q7 def $z71241; CHECK-i64-NEXT:    // kill: def $q5 killed $q5 def $z51242; CHECK-i64-NEXT:    // kill: def $q2 killed $q2 def $z21243; CHECK-i64-NEXT:    // kill: def $q0 killed $q0 def $z01244; CHECK-i64-NEXT:    // kill: def $q3 killed $q3 def $z31245; CHECK-i64-NEXT:    // kill: def $q1 killed $q1 def $z11246; CHECK-i64-NEXT:    ptrue p0.d, vl41247; CHECK-i64-NEXT:    splice z6.d, p1, z6.d, z7.d1248; CHECK-i64-NEXT:    splice z4.d, p1, z4.d, z5.d1249; CHECK-i64-NEXT:    splice z2.d, p1, z2.d, z3.d1250; CHECK-i64-NEXT:    splice z0.d, p1, z0.d, z1.d1251; CHECK-i64-NEXT:    movprfx z3, z61252; CHECK-i64-NEXT:    frintx z3.d, p0/m, z6.d1253; CHECK-i64-NEXT:    movprfx z1, z41254; CHECK-i64-NEXT:    frintx z1.d, p0/m, z4.d1255; CHECK-i64-NEXT:    frintx z2.d, p0/m, z2.d1256; CHECK-i64-NEXT:    frintx z0.d, p0/m, z0.d1257; CHECK-i64-NEXT:    mov z4.d, z3.d[2]1258; CHECK-i64-NEXT:    mov z5.d, z1.d[2]1259; CHECK-i64-NEXT:    mov z6.d, z2.d[3]1260; CHECK-i64-NEXT:    fcvtzs x11, d01261; CHECK-i64-NEXT:    fcvtzs x12, d11262; CHECK-i64-NEXT:    fcvtzs x13, d21263; CHECK-i64-NEXT:    fcvtzs x14, d31264; CHECK-i64-NEXT:    mov z7.d, z3.d[3]1265; CHECK-i64-NEXT:    mov z16.d, z1.d[3]1266; CHECK-i64-NEXT:    fcvtzs x9, d41267; CHECK-i64-NEXT:    fcvtzs x10, d51268; CHECK-i64-NEXT:    mov z4.d, z2.d[2]1269; CHECK-i64-NEXT:    mov z5.d, z0.d[2]1270; CHECK-i64-NEXT:    fcvtzs x8, d61271; CHECK-i64-NEXT:    mov z2.d, z2.d[1]1272; CHECK-i64-NEXT:    mov z6.d, z0.d[3]1273; CHECK-i64-NEXT:    mov z1.d, z1.d[1]1274; CHECK-i64-NEXT:    mov z3.d, z3.d[1]1275; CHECK-i64-NEXT:    fcvtzs x15, d41276; CHECK-i64-NEXT:    mov z4.d, z0.d[1]1277; CHECK-i64-NEXT:    fmov d0, x111278; CHECK-i64-NEXT:    fcvtzs x16, d51279; CHECK-i64-NEXT:    fcvtzs x11, d21280; CHECK-i64-NEXT:    fmov d2, x131281; CHECK-i64-NEXT:    fcvtzs x17, d71282; CHECK-i64-NEXT:    fcvtzs x18, d161283; CHECK-i64-NEXT:    fcvtzs x0, d31284; CHECK-i64-NEXT:    fcvtzs x13, d41285; CHECK-i64-NEXT:    fmov d4, x121286; CHECK-i64-NEXT:    fcvtzs x12, d61287; CHECK-i64-NEXT:    fmov d6, x141288; CHECK-i64-NEXT:    fcvtzs x14, d11289; CHECK-i64-NEXT:    fmov d3, x151290; CHECK-i64-NEXT:    fmov d1, x161291; CHECK-i64-NEXT:    fmov d5, x101292; CHECK-i64-NEXT:    fmov d7, x91293; CHECK-i64-NEXT:    mov v2.d[1], x111294; CHECK-i64-NEXT:    mov v0.d[1], x131295; CHECK-i64-NEXT:    mov v3.d[1], x81296; CHECK-i64-NEXT:    mov v6.d[1], x01297; CHECK-i64-NEXT:    mov v4.d[1], x141298; CHECK-i64-NEXT:    mov v1.d[1], x121299; CHECK-i64-NEXT:    mov v5.d[1], x181300; CHECK-i64-NEXT:    mov v7.d[1], x171301; CHECK-i64-NEXT:    ret1302  %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16f64(<16 x double> %x)1303  ret <16 x iXLen> %a1304}1305declare <16 x iXLen> @llvm.lrint.v16iXLen.v16f64(<16 x double>)1306 1307define <32 x iXLen> @lrint_v32f64(<32 x double> %x) nounwind {1308; CHECK-i32-LABEL: lrint_v32f64:1309; CHECK-i32:       // %bb.0:1310; CHECK-i32-NEXT:    ptrue p1.d, vl21311; CHECK-i32-NEXT:    // kill: def $q0 killed $q0 def $z01312; CHECK-i32-NEXT:    // kill: def $q1 killed $q1 def $z11313; CHECK-i32-NEXT:    // kill: def $q3 killed $q3 def $z31314; CHECK-i32-NEXT:    // kill: def $q2 killed $q2 def $z21315; CHECK-i32-NEXT:    // kill: def $q4 killed $q4 def $z41316; CHECK-i32-NEXT:    // kill: def $q5 killed $q5 def $z51317; CHECK-i32-NEXT:    // kill: def $q7 killed $q7 def $z71318; CHECK-i32-NEXT:    // kill: def $q6 killed $q6 def $z61319; CHECK-i32-NEXT:    ptrue p0.d, vl41320; CHECK-i32-NEXT:    splice z0.d, p1, z0.d, z1.d1321; CHECK-i32-NEXT:    splice z2.d, p1, z2.d, z3.d1322; CHECK-i32-NEXT:    splice z4.d, p1, z4.d, z5.d1323; CHECK-i32-NEXT:    ldp q1, q3, [sp]1324; CHECK-i32-NEXT:    splice z6.d, p1, z6.d, z7.d1325; CHECK-i32-NEXT:    frintx z0.d, p0/m, z0.d1326; CHECK-i32-NEXT:    splice z1.d, p1, z1.d, z3.d1327; CHECK-i32-NEXT:    movprfx z18, z21328; CHECK-i32-NEXT:    frintx z18.d, p0/m, z2.d1329; CHECK-i32-NEXT:    ldp q5, q3, [sp, #96]1330; CHECK-i32-NEXT:    ldp q2, q7, [sp, #64]1331; CHECK-i32-NEXT:    splice z5.d, p1, z5.d, z3.d1332; CHECK-i32-NEXT:    movprfx z3, z41333; CHECK-i32-NEXT:    frintx z3.d, p0/m, z4.d1334; CHECK-i32-NEXT:    mov z4.d, z0.d[1]1335; CHECK-i32-NEXT:    fcvtzs w8, d01336; CHECK-i32-NEXT:    splice z2.d, p1, z2.d, z7.d1337; CHECK-i32-NEXT:    mov z19.d, z18.d[1]1338; CHECK-i32-NEXT:    ldp q7, q16, [sp, #32]1339; CHECK-i32-NEXT:    movprfx z17, z11340; CHECK-i32-NEXT:    frintx z17.d, p0/m, z1.d1341; CHECK-i32-NEXT:    fcvtzs w10, d41342; CHECK-i32-NEXT:    mov z1.d, z0.d[2]1343; CHECK-i32-NEXT:    fcvtzs w9, d181344; CHECK-i32-NEXT:    mov z4.d, z0.d[3]1345; CHECK-i32-NEXT:    fcvtzs w11, d191346; CHECK-i32-NEXT:    mov z20.d, z18.d[3]1347; CHECK-i32-NEXT:    fmov s0, w81348; CHECK-i32-NEXT:    splice z7.d, p1, z7.d, z16.d1349; CHECK-i32-NEXT:    movprfx z16, z61350; CHECK-i32-NEXT:    frintx z16.d, p0/m, z6.d1351; CHECK-i32-NEXT:    mov z6.d, z18.d[2]1352; CHECK-i32-NEXT:    mov z18.d, z3.d[1]1353; CHECK-i32-NEXT:    fcvtzs w12, d31354; CHECK-i32-NEXT:    fcvtzs w13, d11355; CHECK-i32-NEXT:    fmov s1, w91356; CHECK-i32-NEXT:    movprfx z19, z21357; CHECK-i32-NEXT:    frintx z19.d, p0/m, z2.d1358; CHECK-i32-NEXT:    mov v0.s[1], w101359; CHECK-i32-NEXT:    mov z21.d, z3.d[2]1360; CHECK-i32-NEXT:    fcvtzs w8, d41361; CHECK-i32-NEXT:    fcvtzs w14, d61362; CHECK-i32-NEXT:    mov z6.d, z16.d[1]1363; CHECK-i32-NEXT:    fcvtzs w15, d181364; CHECK-i32-NEXT:    movprfx z18, z71365; CHECK-i32-NEXT:    frintx z18.d, p0/m, z7.d1366; CHECK-i32-NEXT:    mov v1.s[1], w111367; CHECK-i32-NEXT:    fmov s2, w121368; CHECK-i32-NEXT:    mov z7.d, z17.d[1]1369; CHECK-i32-NEXT:    mov z4.d, z16.d[2]1370; CHECK-i32-NEXT:    fcvtzs w16, d161371; CHECK-i32-NEXT:    mov v0.s[2], w131372; CHECK-i32-NEXT:    fcvtzs w13, d171373; CHECK-i32-NEXT:    fcvtzs w12, d61374; CHECK-i32-NEXT:    mov z6.d, z19.d[1]1375; CHECK-i32-NEXT:    fcvtzs w11, d211376; CHECK-i32-NEXT:    movprfx z21, z51377; CHECK-i32-NEXT:    frintx z21.d, p0/m, z5.d1378; CHECK-i32-NEXT:    mov z3.d, z3.d[3]1379; CHECK-i32-NEXT:    mov v2.s[1], w151380; CHECK-i32-NEXT:    mov z5.d, z18.d[1]1381; CHECK-i32-NEXT:    fcvtzs w15, d71382; CHECK-i32-NEXT:    fcvtzs w0, d191383; CHECK-i32-NEXT:    mov v1.s[2], w141384; CHECK-i32-NEXT:    fcvtzs w14, d41385; CHECK-i32-NEXT:    mov z7.d, z18.d[2]1386; CHECK-i32-NEXT:    fmov s4, w131387; CHECK-i32-NEXT:    fcvtzs w13, d61388; CHECK-i32-NEXT:    mov z6.d, z19.d[2]1389; CHECK-i32-NEXT:    fcvtzs w10, d31390; CHECK-i32-NEXT:    fmov s3, w161391; CHECK-i32-NEXT:    fcvtzs w17, d181392; CHECK-i32-NEXT:    fcvtzs w18, d51393; CHECK-i32-NEXT:    mov z5.d, z21.d[1]1394; CHECK-i32-NEXT:    fcvtzs w2, d211395; CHECK-i32-NEXT:    fcvtzs w1, d71396; CHECK-i32-NEXT:    mov z7.d, z21.d[2]1397; CHECK-i32-NEXT:    mov v4.s[1], w151398; CHECK-i32-NEXT:    fcvtzs w15, d61399; CHECK-i32-NEXT:    fmov s6, w01400; CHECK-i32-NEXT:    mov v3.s[1], w121401; CHECK-i32-NEXT:    fcvtzs w9, d201402; CHECK-i32-NEXT:    fcvtzs w12, d51403; CHECK-i32-NEXT:    mov z20.d, z17.d[2]1404; CHECK-i32-NEXT:    fmov s5, w171405; CHECK-i32-NEXT:    mov z16.d, z16.d[3]1406; CHECK-i32-NEXT:    mov z17.d, z17.d[3]1407; CHECK-i32-NEXT:    mov z18.d, z18.d[3]1408; CHECK-i32-NEXT:    mov v6.s[1], w131409; CHECK-i32-NEXT:    fcvtzs w13, d71410; CHECK-i32-NEXT:    fmov s7, w21411; CHECK-i32-NEXT:    fcvtzs w16, d201412; CHECK-i32-NEXT:    mov v5.s[1], w181413; CHECK-i32-NEXT:    mov z19.d, z19.d[3]1414; CHECK-i32-NEXT:    mov z20.d, z21.d[3]1415; CHECK-i32-NEXT:    mov v2.s[2], w111416; CHECK-i32-NEXT:    mov v3.s[2], w141417; CHECK-i32-NEXT:    mov v7.s[1], w121418; CHECK-i32-NEXT:    fcvtzs w11, d161419; CHECK-i32-NEXT:    fcvtzs w12, d171420; CHECK-i32-NEXT:    fcvtzs w14, d181421; CHECK-i32-NEXT:    mov v6.s[2], w151422; CHECK-i32-NEXT:    fcvtzs w15, d191423; CHECK-i32-NEXT:    mov v4.s[2], w161424; CHECK-i32-NEXT:    mov v5.s[2], w11425; CHECK-i32-NEXT:    mov v0.s[3], w81426; CHECK-i32-NEXT:    mov v1.s[3], w91427; CHECK-i32-NEXT:    mov v2.s[3], w101428; CHECK-i32-NEXT:    mov v7.s[2], w131429; CHECK-i32-NEXT:    fcvtzs w13, d201430; CHECK-i32-NEXT:    mov v3.s[3], w111431; CHECK-i32-NEXT:    mov v6.s[3], w151432; CHECK-i32-NEXT:    mov v4.s[3], w121433; CHECK-i32-NEXT:    mov v5.s[3], w141434; CHECK-i32-NEXT:    mov v7.s[3], w131435; CHECK-i32-NEXT:    ret1436;1437; CHECK-i64-LABEL: lrint_v32f64:1438; CHECK-i64:       // %bb.0:1439; CHECK-i64-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill1440; CHECK-i64-NEXT:    sub x9, sp, #2721441; CHECK-i64-NEXT:    mov x29, sp1442; CHECK-i64-NEXT:    and sp, x9, #0xffffffffffffffe01443; CHECK-i64-NEXT:    ptrue p1.d, vl21444; CHECK-i64-NEXT:    // kill: def $q0 killed $q0 def $z01445; CHECK-i64-NEXT:    // kill: def $q1 killed $q1 def $z11446; CHECK-i64-NEXT:    // kill: def $q3 killed $q3 def $z31447; CHECK-i64-NEXT:    // kill: def $q2 killed $q2 def $z21448; CHECK-i64-NEXT:    // kill: def $q7 killed $q7 def $z71449; CHECK-i64-NEXT:    // kill: def $q6 killed $q6 def $z61450; CHECK-i64-NEXT:    // kill: def $q4 killed $q4 def $z41451; CHECK-i64-NEXT:    // kill: def $q5 killed $q5 def $z51452; CHECK-i64-NEXT:    ptrue p0.d, vl41453; CHECK-i64-NEXT:    splice z0.d, p1, z0.d, z1.d1454; CHECK-i64-NEXT:    splice z2.d, p1, z2.d, z3.d1455; CHECK-i64-NEXT:    splice z4.d, p1, z4.d, z5.d1456; CHECK-i64-NEXT:    splice z6.d, p1, z6.d, z7.d1457; CHECK-i64-NEXT:    ldp q5, q19, [x29, #16]1458; CHECK-i64-NEXT:    movprfx z3, z01459; CHECK-i64-NEXT:    frintx z3.d, p0/m, z0.d1460; CHECK-i64-NEXT:    movprfx z16, z21461; CHECK-i64-NEXT:    frintx z16.d, p0/m, z2.d1462; CHECK-i64-NEXT:    frintx z4.d, p0/m, z4.d1463; CHECK-i64-NEXT:    splice z5.d, p1, z5.d, z19.d1464; CHECK-i64-NEXT:    frintx z6.d, p0/m, z6.d1465; CHECK-i64-NEXT:    ldp q2, q17, [x29, #48]1466; CHECK-i64-NEXT:    ldp q0, q1, [x29, #112]1467; CHECK-i64-NEXT:    mov z18.d, z3.d[3]1468; CHECK-i64-NEXT:    mov z7.d, z3.d[2]1469; CHECK-i64-NEXT:    fcvtzs x9, d31470; CHECK-i64-NEXT:    mov z3.d, z3.d[1]1471; CHECK-i64-NEXT:    mov z20.d, z16.d[3]1472; CHECK-i64-NEXT:    fcvtzs x12, d161473; CHECK-i64-NEXT:    splice z2.d, p1, z2.d, z17.d1474; CHECK-i64-NEXT:    frintx z5.d, p0/m, z5.d1475; CHECK-i64-NEXT:    splice z0.d, p1, z0.d, z1.d1476; CHECK-i64-NEXT:    fcvtzs x10, d181477; CHECK-i64-NEXT:    fcvtzs x11, d71478; CHECK-i64-NEXT:    mov z18.d, z16.d[2]1479; CHECK-i64-NEXT:    mov z7.d, z16.d[1]1480; CHECK-i64-NEXT:    fcvtzs x13, d31481; CHECK-i64-NEXT:    str x9, [sp, #128]1482; CHECK-i64-NEXT:    fcvtzs x9, d201483; CHECK-i64-NEXT:    mov z16.d, z4.d[3]1484; CHECK-i64-NEXT:    ldp q3, q19, [x29, #80]1485; CHECK-i64-NEXT:    frintx z2.d, p0/m, z2.d1486; CHECK-i64-NEXT:    stp x11, x10, [sp, #144]1487; CHECK-i64-NEXT:    fcvtzs x10, d181488; CHECK-i64-NEXT:    fcvtzs x11, d71489; CHECK-i64-NEXT:    mov z18.d, z4.d[2]1490; CHECK-i64-NEXT:    mov z7.d, z4.d[1]1491; CHECK-i64-NEXT:    str x13, [sp, #136]1492; CHECK-i64-NEXT:    fcvtzs x13, d161493; CHECK-i64-NEXT:    mov z16.d, z6.d[3]1494; CHECK-i64-NEXT:    splice z3.d, p1, z3.d, z19.d1495; CHECK-i64-NEXT:    mov z1.d, z5.d[1]1496; CHECK-i64-NEXT:    frintx z0.d, p0/m, z0.d1497; CHECK-i64-NEXT:    stp x10, x9, [sp, #176]1498; CHECK-i64-NEXT:    fcvtzs x9, d181499; CHECK-i64-NEXT:    fcvtzs x10, d41500; CHECK-i64-NEXT:    stp x12, x11, [sp, #160]1501; CHECK-i64-NEXT:    fcvtzs x11, d71502; CHECK-i64-NEXT:    mov z4.d, z6.d[2]1503; CHECK-i64-NEXT:    mov z7.d, z6.d[1]1504; CHECK-i64-NEXT:    fcvtzs x12, d61505; CHECK-i64-NEXT:    mov z6.d, z5.d[2]1506; CHECK-i64-NEXT:    frintx z3.d, p0/m, z3.d1507; CHECK-i64-NEXT:    stp x9, x13, [sp, #208]1508; CHECK-i64-NEXT:    fcvtzs x9, d161509; CHECK-i64-NEXT:    fcvtzs x13, d41510; CHECK-i64-NEXT:    stp x10, x11, [sp, #192]1511; CHECK-i64-NEXT:    fcvtzs x10, d71512; CHECK-i64-NEXT:    mov z4.d, z5.d[3]1513; CHECK-i64-NEXT:    fcvtzs x11, d41514; CHECK-i64-NEXT:    stp x13, x9, [sp, #240]1515; CHECK-i64-NEXT:    fcvtzs x9, d61516; CHECK-i64-NEXT:    stp x12, x10, [sp, #224]1517; CHECK-i64-NEXT:    fcvtzs x10, d51518; CHECK-i64-NEXT:    fcvtzs x12, d11519; CHECK-i64-NEXT:    mov z4.d, z2.d[3]1520; CHECK-i64-NEXT:    mov z5.d, z2.d[2]1521; CHECK-i64-NEXT:    mov z1.d, z2.d[1]1522; CHECK-i64-NEXT:    fcvtzs x13, d21523; CHECK-i64-NEXT:    mov z2.d, z3.d[2]1524; CHECK-i64-NEXT:    stp x9, x11, [sp, #16]1525; CHECK-i64-NEXT:    fcvtzs x9, d41526; CHECK-i64-NEXT:    fcvtzs x11, d51527; CHECK-i64-NEXT:    stp x10, x12, [sp]1528; CHECK-i64-NEXT:    fcvtzs x10, d11529; CHECK-i64-NEXT:    mov z4.d, z3.d[3]1530; CHECK-i64-NEXT:    mov z1.d, z3.d[1]1531; CHECK-i64-NEXT:    fcvtzs x12, d41532; CHECK-i64-NEXT:    stp x11, x9, [sp, #48]1533; CHECK-i64-NEXT:    fcvtzs x9, d21534; CHECK-i64-NEXT:    fcvtzs x11, d31535; CHECK-i64-NEXT:    stp x13, x10, [sp, #32]1536; CHECK-i64-NEXT:    fcvtzs x10, d11537; CHECK-i64-NEXT:    mov z2.d, z0.d[3]1538; CHECK-i64-NEXT:    mov z3.d, z0.d[2]1539; CHECK-i64-NEXT:    mov z1.d, z0.d[1]1540; CHECK-i64-NEXT:    stp x9, x12, [sp, #80]1541; CHECK-i64-NEXT:    fcvtzs x12, d01542; CHECK-i64-NEXT:    fcvtzs x13, d21543; CHECK-i64-NEXT:    fcvtzs x9, d31544; CHECK-i64-NEXT:    stp x11, x10, [sp, #64]1545; CHECK-i64-NEXT:    fcvtzs x10, d11546; CHECK-i64-NEXT:    stp x9, x13, [sp, #112]1547; CHECK-i64-NEXT:    add x9, sp, #1281548; CHECK-i64-NEXT:    stp x12, x10, [sp, #96]1549; CHECK-i64-NEXT:    add x10, sp, #1921550; CHECK-i64-NEXT:    ld1d { z0.d }, p0/z, [x9]1551; CHECK-i64-NEXT:    add x9, sp, #1601552; CHECK-i64-NEXT:    ld1d { z2.d }, p0/z, [x10]1553; CHECK-i64-NEXT:    ld1d { z1.d }, p0/z, [x9]1554; CHECK-i64-NEXT:    add x9, sp, #961555; CHECK-i64-NEXT:    add x10, sp, #2241556; CHECK-i64-NEXT:    ld1d { z3.d }, p0/z, [x9]1557; CHECK-i64-NEXT:    add x9, sp, #641558; CHECK-i64-NEXT:    ld1d { z4.d }, p0/z, [x10]1559; CHECK-i64-NEXT:    add x10, sp, #321560; CHECK-i64-NEXT:    ld1d { z5.d }, p0/z, [x9]1561; CHECK-i64-NEXT:    mov x9, sp1562; CHECK-i64-NEXT:    ld1d { z6.d }, p0/z, [x10]1563; CHECK-i64-NEXT:    mov x10, #28 // =0x1c1564; CHECK-i64-NEXT:    ld1d { z7.d }, p0/z, [x9]1565; CHECK-i64-NEXT:    mov x9, #24 // =0x181566; CHECK-i64-NEXT:    st1d { z3.d }, p0, [x8, x10, lsl #3]1567; CHECK-i64-NEXT:    st1d { z5.d }, p0, [x8, x9, lsl #3]1568; CHECK-i64-NEXT:    mov x9, #20 // =0x141569; CHECK-i64-NEXT:    st1d { z6.d }, p0, [x8, x9, lsl #3]1570; CHECK-i64-NEXT:    mov x9, #16 // =0x101571; CHECK-i64-NEXT:    st1d { z7.d }, p0, [x8, x9, lsl #3]1572; CHECK-i64-NEXT:    mov x9, #12 // =0xc1573; CHECK-i64-NEXT:    st1d { z4.d }, p0, [x8, x9, lsl #3]1574; CHECK-i64-NEXT:    mov x9, #8 // =0x81575; CHECK-i64-NEXT:    st1d { z2.d }, p0, [x8, x9, lsl #3]1576; CHECK-i64-NEXT:    mov x9, #4 // =0x41577; CHECK-i64-NEXT:    st1d { z1.d }, p0, [x8, x9, lsl #3]1578; CHECK-i64-NEXT:    st1d { z0.d }, p0, [x8]1579; CHECK-i64-NEXT:    mov sp, x291580; CHECK-i64-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload1581; CHECK-i64-NEXT:    ret1582  %a = call <32 x iXLen> @llvm.lrint.v32iXLen.v16f64(<32 x double> %x)1583  ret <32 x iXLen> %a1584}1585declare <32 x iXLen> @llvm.lrint.v32iXLen.v32f64(<32 x double>)1586 1587define <1 x iXLen> @lrint_v1fp128(<1 x fp128> %x) nounwind {1588; CHECK-i32-LABEL: lrint_v1fp128:1589; CHECK-i32:       // %bb.0:1590; CHECK-i32-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill1591; CHECK-i32-NEXT:    bl lrintl1592; CHECK-i32-NEXT:    fmov s0, w01593; CHECK-i32-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload1594; CHECK-i32-NEXT:    ret1595;1596; CHECK-i64-LABEL: lrint_v1fp128:1597; CHECK-i64:       // %bb.0:1598; CHECK-i64-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill1599; CHECK-i64-NEXT:    bl lrintl1600; CHECK-i64-NEXT:    fmov d0, x01601; CHECK-i64-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload1602; CHECK-i64-NEXT:    ret1603  %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1fp128(<1 x fp128> %x)1604  ret <1 x iXLen> %a1605}1606declare <1 x iXLen> @llvm.lrint.v1iXLen.v1fp128(<1 x fp128>)1607 1608define <2 x iXLen> @lrint_v2fp128(<2 x fp128> %x) nounwind {1609; CHECK-i32-LABEL: lrint_v2fp128:1610; CHECK-i32:       // %bb.0:1611; CHECK-i32-NEXT:    sub sp, sp, #481612; CHECK-i32-NEXT:    str x30, [sp, #32] // 8-byte Spill1613; CHECK-i32-NEXT:    str q1, [sp, #16] // 16-byte Spill1614; CHECK-i32-NEXT:    bl lrintl1615; CHECK-i32-NEXT:    fmov s0, w01616; CHECK-i32-NEXT:    str q0, [sp] // 16-byte Spill1617; CHECK-i32-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1618; CHECK-i32-NEXT:    bl lrintl1619; CHECK-i32-NEXT:    ldr q0, [sp] // 16-byte Reload1620; CHECK-i32-NEXT:    ldr x30, [sp, #32] // 8-byte Reload1621; CHECK-i32-NEXT:    mov v0.s[1], w01622; CHECK-i32-NEXT:    // kill: def $d0 killed $d0 killed $q01623; CHECK-i32-NEXT:    add sp, sp, #481624; CHECK-i32-NEXT:    ret1625;1626; CHECK-i64-LABEL: lrint_v2fp128:1627; CHECK-i64:       // %bb.0:1628; CHECK-i64-NEXT:    sub sp, sp, #481629; CHECK-i64-NEXT:    str q0, [sp] // 16-byte Spill1630; CHECK-i64-NEXT:    mov v0.16b, v1.16b1631; CHECK-i64-NEXT:    str x30, [sp, #32] // 8-byte Spill1632; CHECK-i64-NEXT:    bl lrintl1633; CHECK-i64-NEXT:    fmov d0, x01634; CHECK-i64-NEXT:    str q0, [sp, #16] // 16-byte Spill1635; CHECK-i64-NEXT:    ldr q0, [sp] // 16-byte Reload1636; CHECK-i64-NEXT:    bl lrintl1637; CHECK-i64-NEXT:    fmov d0, x01638; CHECK-i64-NEXT:    ldr q1, [sp, #16] // 16-byte Reload1639; CHECK-i64-NEXT:    ldr x30, [sp, #32] // 8-byte Reload1640; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]1641; CHECK-i64-NEXT:    add sp, sp, #481642; CHECK-i64-NEXT:    ret1643  %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2fp128(<2 x fp128> %x)1644  ret <2 x iXLen> %a1645}1646declare <2 x iXLen> @llvm.lrint.v2iXLen.v2fp128(<2 x fp128>)1647 1648define <4 x iXLen> @lrint_v4fp128(<4 x fp128> %x) nounwind {1649; CHECK-i32-LABEL: lrint_v4fp128:1650; CHECK-i32:       // %bb.0:1651; CHECK-i32-NEXT:    sub sp, sp, #801652; CHECK-i32-NEXT:    str x30, [sp, #64] // 8-byte Spill1653; CHECK-i32-NEXT:    stp q2, q3, [sp, #16] // 32-byte Folded Spill1654; CHECK-i32-NEXT:    str q1, [sp] // 16-byte Spill1655; CHECK-i32-NEXT:    bl lrintl1656; CHECK-i32-NEXT:    fmov s0, w01657; CHECK-i32-NEXT:    str q0, [sp, #48] // 16-byte Spill1658; CHECK-i32-NEXT:    ldr q0, [sp] // 16-byte Reload1659; CHECK-i32-NEXT:    bl lrintl1660; CHECK-i32-NEXT:    ldr q0, [sp, #48] // 16-byte Reload1661; CHECK-i32-NEXT:    mov v0.s[1], w01662; CHECK-i32-NEXT:    str q0, [sp, #48] // 16-byte Spill1663; CHECK-i32-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1664; CHECK-i32-NEXT:    bl lrintl1665; CHECK-i32-NEXT:    ldr q0, [sp, #48] // 16-byte Reload1666; CHECK-i32-NEXT:    mov v0.s[2], w01667; CHECK-i32-NEXT:    str q0, [sp, #48] // 16-byte Spill1668; CHECK-i32-NEXT:    ldr q0, [sp, #32] // 16-byte Reload1669; CHECK-i32-NEXT:    bl lrintl1670; CHECK-i32-NEXT:    ldr q0, [sp, #48] // 16-byte Reload1671; CHECK-i32-NEXT:    ldr x30, [sp, #64] // 8-byte Reload1672; CHECK-i32-NEXT:    mov v0.s[3], w01673; CHECK-i32-NEXT:    add sp, sp, #801674; CHECK-i32-NEXT:    ret1675;1676; CHECK-i64-LABEL: lrint_v4fp128:1677; CHECK-i64:       // %bb.0:1678; CHECK-i64-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill1679; CHECK-i64-NEXT:    sub sp, sp, #641680; CHECK-i64-NEXT:    addvl sp, sp, #-11681; CHECK-i64-NEXT:    str q0, [sp, #48] // 16-byte Spill1682; CHECK-i64-NEXT:    mov v0.16b, v3.16b1683; CHECK-i64-NEXT:    stp q2, q1, [sp, #16] // 32-byte Folded Spill1684; CHECK-i64-NEXT:    bl lrintl1685; CHECK-i64-NEXT:    fmov d0, x01686; CHECK-i64-NEXT:    str q0, [sp] // 16-byte Spill1687; CHECK-i64-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1688; CHECK-i64-NEXT:    bl lrintl1689; CHECK-i64-NEXT:    fmov d0, x01690; CHECK-i64-NEXT:    ldr q1, [sp] // 16-byte Reload1691; CHECK-i64-NEXT:    add x8, sp, #641692; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]1693; CHECK-i64-NEXT:    str z0, [x8] // 16-byte Folded Spill1694; CHECK-i64-NEXT:    ldr q0, [sp, #32] // 16-byte Reload1695; CHECK-i64-NEXT:    bl lrintl1696; CHECK-i64-NEXT:    fmov d0, x01697; CHECK-i64-NEXT:    str q0, [sp, #32] // 16-byte Spill1698; CHECK-i64-NEXT:    ldr q0, [sp, #48] // 16-byte Reload1699; CHECK-i64-NEXT:    bl lrintl1700; CHECK-i64-NEXT:    fmov d0, x01701; CHECK-i64-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1702; CHECK-i64-NEXT:    add x8, sp, #641703; CHECK-i64-NEXT:    ptrue p0.d, vl21704; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]1705; CHECK-i64-NEXT:    ldr z1, [x8] // 16-byte Folded Reload1706; CHECK-i64-NEXT:    splice z0.d, p0, z0.d, z1.d1707; CHECK-i64-NEXT:    movprfx z1, z01708; CHECK-i64-NEXT:    ext z1.b, z1.b, z0.b, #161709; CHECK-i64-NEXT:    // kill: def $q0 killed $q0 killed $z01710; CHECK-i64-NEXT:    // kill: def $q1 killed $q1 killed $z11711; CHECK-i64-NEXT:    addvl sp, sp, #11712; CHECK-i64-NEXT:    add sp, sp, #641713; CHECK-i64-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload1714; CHECK-i64-NEXT:    ret1715  %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4fp128(<4 x fp128> %x)1716  ret <4 x iXLen> %a1717}1718declare <4 x iXLen> @llvm.lrint.v4iXLen.v4fp128(<4 x fp128>)1719 1720define <8 x iXLen> @lrint_v8fp128(<8 x fp128> %x) nounwind {1721; CHECK-i32-LABEL: lrint_v8fp128:1722; CHECK-i32:       // %bb.0:1723; CHECK-i32-NEXT:    sub sp, sp, #1761724; CHECK-i32-NEXT:    str q0, [sp, #96] // 16-byte Spill1725; CHECK-i32-NEXT:    mov v0.16b, v7.16b1726; CHECK-i32-NEXT:    stp x30, x25, [sp, #112] // 16-byte Folded Spill1727; CHECK-i32-NEXT:    stp x24, x23, [sp, #128] // 16-byte Folded Spill1728; CHECK-i32-NEXT:    stp x22, x21, [sp, #144] // 16-byte Folded Spill1729; CHECK-i32-NEXT:    stp x20, x19, [sp, #160] // 16-byte Folded Spill1730; CHECK-i32-NEXT:    stp q6, q5, [sp] // 32-byte Folded Spill1731; CHECK-i32-NEXT:    stp q4, q3, [sp, #32] // 32-byte Folded Spill1732; CHECK-i32-NEXT:    stp q2, q1, [sp, #64] // 32-byte Folded Spill1733; CHECK-i32-NEXT:    bl lrintl1734; CHECK-i32-NEXT:    ldr q0, [sp] // 16-byte Reload1735; CHECK-i32-NEXT:    mov w19, w01736; CHECK-i32-NEXT:    bl lrintl1737; CHECK-i32-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1738; CHECK-i32-NEXT:    mov w20, w01739; CHECK-i32-NEXT:    bl lrintl1740; CHECK-i32-NEXT:    ldr q0, [sp, #32] // 16-byte Reload1741; CHECK-i32-NEXT:    mov w21, w01742; CHECK-i32-NEXT:    bl lrintl1743; CHECK-i32-NEXT:    ldr q0, [sp, #48] // 16-byte Reload1744; CHECK-i32-NEXT:    mov w22, w01745; CHECK-i32-NEXT:    bl lrintl1746; CHECK-i32-NEXT:    ldr q0, [sp, #64] // 16-byte Reload1747; CHECK-i32-NEXT:    mov w23, w01748; CHECK-i32-NEXT:    bl lrintl1749; CHECK-i32-NEXT:    ldr q0, [sp, #80] // 16-byte Reload1750; CHECK-i32-NEXT:    mov w24, w01751; CHECK-i32-NEXT:    bl lrintl1752; CHECK-i32-NEXT:    ldr q0, [sp, #96] // 16-byte Reload1753; CHECK-i32-NEXT:    mov w25, w01754; CHECK-i32-NEXT:    bl lrintl1755; CHECK-i32-NEXT:    fmov s1, w221756; CHECK-i32-NEXT:    fmov s0, w01757; CHECK-i32-NEXT:    mov v0.s[1], w251758; CHECK-i32-NEXT:    mov v1.s[1], w211759; CHECK-i32-NEXT:    ldp x22, x21, [sp, #144] // 16-byte Folded Reload1760; CHECK-i32-NEXT:    ldp x30, x25, [sp, #112] // 16-byte Folded Reload1761; CHECK-i32-NEXT:    mov v0.s[2], w241762; CHECK-i32-NEXT:    mov v1.s[2], w201763; CHECK-i32-NEXT:    mov v0.s[3], w231764; CHECK-i32-NEXT:    mov v1.s[3], w191765; CHECK-i32-NEXT:    ldp x20, x19, [sp, #160] // 16-byte Folded Reload1766; CHECK-i32-NEXT:    ldp x24, x23, [sp, #128] // 16-byte Folded Reload1767; CHECK-i32-NEXT:    add sp, sp, #1761768; CHECK-i32-NEXT:    ret1769;1770; CHECK-i64-LABEL: lrint_v8fp128:1771; CHECK-i64:       // %bb.0:1772; CHECK-i64-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill1773; CHECK-i64-NEXT:    sub sp, sp, #1281774; CHECK-i64-NEXT:    addvl sp, sp, #-21775; CHECK-i64-NEXT:    str q0, [sp, #112] // 16-byte Spill1776; CHECK-i64-NEXT:    mov v0.16b, v7.16b1777; CHECK-i64-NEXT:    stp q6, q5, [sp, #16] // 32-byte Folded Spill1778; CHECK-i64-NEXT:    stp q4, q3, [sp, #48] // 32-byte Folded Spill1779; CHECK-i64-NEXT:    stp q2, q1, [sp, #80] // 32-byte Folded Spill1780; CHECK-i64-NEXT:    bl lrintl1781; CHECK-i64-NEXT:    fmov d0, x01782; CHECK-i64-NEXT:    str q0, [sp] // 16-byte Spill1783; CHECK-i64-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1784; CHECK-i64-NEXT:    bl lrintl1785; CHECK-i64-NEXT:    fmov d0, x01786; CHECK-i64-NEXT:    ldr q1, [sp] // 16-byte Reload1787; CHECK-i64-NEXT:    add x8, sp, #1281788; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]1789; CHECK-i64-NEXT:    str z0, [x8, #1, mul vl] // 16-byte Folded Spill1790; CHECK-i64-NEXT:    ldr q0, [sp, #32] // 16-byte Reload1791; CHECK-i64-NEXT:    bl lrintl1792; CHECK-i64-NEXT:    fmov d0, x01793; CHECK-i64-NEXT:    str q0, [sp, #32] // 16-byte Spill1794; CHECK-i64-NEXT:    ldr q0, [sp, #48] // 16-byte Reload1795; CHECK-i64-NEXT:    bl lrintl1796; CHECK-i64-NEXT:    fmov d0, x01797; CHECK-i64-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1798; CHECK-i64-NEXT:    add x8, sp, #1281799; CHECK-i64-NEXT:    ptrue p0.d, vl21800; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]1801; CHECK-i64-NEXT:    ldr z1, [x8, #1, mul vl] // 16-byte Folded Reload1802; CHECK-i64-NEXT:    splice z0.d, p0, z0.d, z1.d1803; CHECK-i64-NEXT:    str z0, [x8, #1, mul vl] // 16-byte Folded Spill1804; CHECK-i64-NEXT:    ldr q0, [sp, #64] // 16-byte Reload1805; CHECK-i64-NEXT:    bl lrintl1806; CHECK-i64-NEXT:    fmov d0, x01807; CHECK-i64-NEXT:    str q0, [sp, #64] // 16-byte Spill1808; CHECK-i64-NEXT:    ldr q0, [sp, #80] // 16-byte Reload1809; CHECK-i64-NEXT:    bl lrintl1810; CHECK-i64-NEXT:    fmov d0, x01811; CHECK-i64-NEXT:    ldr q1, [sp, #64] // 16-byte Reload1812; CHECK-i64-NEXT:    add x8, sp, #1281813; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]1814; CHECK-i64-NEXT:    str z0, [x8] // 16-byte Folded Spill1815; CHECK-i64-NEXT:    ldr q0, [sp, #96] // 16-byte Reload1816; CHECK-i64-NEXT:    bl lrintl1817; CHECK-i64-NEXT:    fmov d0, x01818; CHECK-i64-NEXT:    str q0, [sp, #96] // 16-byte Spill1819; CHECK-i64-NEXT:    ldr q0, [sp, #112] // 16-byte Reload1820; CHECK-i64-NEXT:    bl lrintl1821; CHECK-i64-NEXT:    fmov d0, x01822; CHECK-i64-NEXT:    ldr q1, [sp, #96] // 16-byte Reload1823; CHECK-i64-NEXT:    add x8, sp, #1281824; CHECK-i64-NEXT:    ptrue p0.d, vl21825; CHECK-i64-NEXT:    ldr z2, [x8, #1, mul vl] // 16-byte Folded Reload1826; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]1827; CHECK-i64-NEXT:    ldr z1, [x8] // 16-byte Folded Reload1828; CHECK-i64-NEXT:    movprfx z3, z21829; CHECK-i64-NEXT:    ext z3.b, z3.b, z2.b, #161830; CHECK-i64-NEXT:    // kill: def $q2 killed $q2 killed $z21831; CHECK-i64-NEXT:    splice z0.d, p0, z0.d, z1.d1832; CHECK-i64-NEXT:    // kill: def $q3 killed $q3 killed $z31833; CHECK-i64-NEXT:    movprfx z1, z01834; CHECK-i64-NEXT:    ext z1.b, z1.b, z0.b, #161835; CHECK-i64-NEXT:    // kill: def $q0 killed $q0 killed $z01836; CHECK-i64-NEXT:    // kill: def $q1 killed $q1 killed $z11837; CHECK-i64-NEXT:    addvl sp, sp, #21838; CHECK-i64-NEXT:    add sp, sp, #1281839; CHECK-i64-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload1840; CHECK-i64-NEXT:    ret1841  %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8fp128(<8 x fp128> %x)1842  ret <8 x iXLen> %a1843}1844declare <8 x iXLen> @llvm.lrint.v8iXLen.v8fp128(<8 x fp128>)1845 1846define <16 x iXLen> @lrint_v16fp128(<16 x fp128> %x) nounwind {1847; CHECK-i32-LABEL: lrint_v16fp128:1848; CHECK-i32:       // %bb.0:1849; CHECK-i32-NEXT:    sub sp, sp, #3681850; CHECK-i32-NEXT:    stp q3, q0, [sp, #144] // 32-byte Folded Spill1851; CHECK-i32-NEXT:    stp q2, q1, [sp, #176] // 32-byte Folded Spill1852; CHECK-i32-NEXT:    ldr q1, [sp, #368]1853; CHECK-i32-NEXT:    stp x29, x30, [sp, #272] // 16-byte Folded Spill1854; CHECK-i32-NEXT:    str q1, [sp, #64] // 16-byte Spill1855; CHECK-i32-NEXT:    ldr q1, [sp, #384]1856; CHECK-i32-NEXT:    stp x28, x27, [sp, #288] // 16-byte Folded Spill1857; CHECK-i32-NEXT:    str q1, [sp, #48] // 16-byte Spill1858; CHECK-i32-NEXT:    ldr q1, [sp, #400]1859; CHECK-i32-NEXT:    stp x26, x25, [sp, #304] // 16-byte Folded Spill1860; CHECK-i32-NEXT:    str q1, [sp, #32] // 16-byte Spill1861; CHECK-i32-NEXT:    ldr q1, [sp, #416]1862; CHECK-i32-NEXT:    stp x24, x23, [sp, #320] // 16-byte Folded Spill1863; CHECK-i32-NEXT:    str q1, [sp, #208] // 16-byte Spill1864; CHECK-i32-NEXT:    ldr q1, [sp, #432]1865; CHECK-i32-NEXT:    stp x22, x21, [sp, #336] // 16-byte Folded Spill1866; CHECK-i32-NEXT:    str q1, [sp, #16] // 16-byte Spill1867; CHECK-i32-NEXT:    ldr q1, [sp, #448]1868; CHECK-i32-NEXT:    stp x20, x19, [sp, #352] // 16-byte Folded Spill1869; CHECK-i32-NEXT:    str q1, [sp, #224] // 16-byte Spill1870; CHECK-i32-NEXT:    ldr q1, [sp, #464]1871; CHECK-i32-NEXT:    stp q7, q6, [sp, #80] // 32-byte Folded Spill1872; CHECK-i32-NEXT:    str q1, [sp, #240] // 16-byte Spill1873; CHECK-i32-NEXT:    ldr q1, [sp, #480]1874; CHECK-i32-NEXT:    stp q5, q4, [sp, #112] // 32-byte Folded Spill1875; CHECK-i32-NEXT:    mov v0.16b, v1.16b1876; CHECK-i32-NEXT:    bl lrintl1877; CHECK-i32-NEXT:    ldr q0, [sp, #240] // 16-byte Reload1878; CHECK-i32-NEXT:    str w0, [sp, #268] // 4-byte Spill1879; CHECK-i32-NEXT:    bl lrintl1880; CHECK-i32-NEXT:    ldr q0, [sp, #224] // 16-byte Reload1881; CHECK-i32-NEXT:    str w0, [sp, #240] // 4-byte Spill1882; CHECK-i32-NEXT:    bl lrintl1883; CHECK-i32-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1884; CHECK-i32-NEXT:    str w0, [sp, #224] // 4-byte Spill1885; CHECK-i32-NEXT:    bl lrintl1886; CHECK-i32-NEXT:    ldr q0, [sp, #208] // 16-byte Reload1887; CHECK-i32-NEXT:    mov w23, w01888; CHECK-i32-NEXT:    bl lrintl1889; CHECK-i32-NEXT:    ldr q0, [sp, #32] // 16-byte Reload1890; CHECK-i32-NEXT:    str w0, [sp, #208] // 4-byte Spill1891; CHECK-i32-NEXT:    bl lrintl1892; CHECK-i32-NEXT:    ldr q0, [sp, #48] // 16-byte Reload1893; CHECK-i32-NEXT:    mov w24, w01894; CHECK-i32-NEXT:    bl lrintl1895; CHECK-i32-NEXT:    ldr q0, [sp, #64] // 16-byte Reload1896; CHECK-i32-NEXT:    mov w25, w01897; CHECK-i32-NEXT:    bl lrintl1898; CHECK-i32-NEXT:    ldr q0, [sp, #80] // 16-byte Reload1899; CHECK-i32-NEXT:    mov w27, w01900; CHECK-i32-NEXT:    bl lrintl1901; CHECK-i32-NEXT:    ldr q0, [sp, #96] // 16-byte Reload1902; CHECK-i32-NEXT:    mov w26, w01903; CHECK-i32-NEXT:    bl lrintl1904; CHECK-i32-NEXT:    ldr q0, [sp, #112] // 16-byte Reload1905; CHECK-i32-NEXT:    mov w28, w01906; CHECK-i32-NEXT:    bl lrintl1907; CHECK-i32-NEXT:    ldr q0, [sp, #128] // 16-byte Reload1908; CHECK-i32-NEXT:    mov w29, w01909; CHECK-i32-NEXT:    bl lrintl1910; CHECK-i32-NEXT:    ldr q0, [sp, #144] // 16-byte Reload1911; CHECK-i32-NEXT:    mov w19, w01912; CHECK-i32-NEXT:    bl lrintl1913; CHECK-i32-NEXT:    ldr q0, [sp, #176] // 16-byte Reload1914; CHECK-i32-NEXT:    mov w20, w01915; CHECK-i32-NEXT:    bl lrintl1916; CHECK-i32-NEXT:    ldr q0, [sp, #192] // 16-byte Reload1917; CHECK-i32-NEXT:    mov w21, w01918; CHECK-i32-NEXT:    bl lrintl1919; CHECK-i32-NEXT:    ldr q0, [sp, #160] // 16-byte Reload1920; CHECK-i32-NEXT:    mov w22, w01921; CHECK-i32-NEXT:    bl lrintl1922; CHECK-i32-NEXT:    fmov s1, w191923; CHECK-i32-NEXT:    fmov s0, w01924; CHECK-i32-NEXT:    ldr w8, [sp, #224] // 4-byte Reload1925; CHECK-i32-NEXT:    fmov s2, w271926; CHECK-i32-NEXT:    fmov s3, w231927; CHECK-i32-NEXT:    mov v0.s[1], w221928; CHECK-i32-NEXT:    mov v1.s[1], w291929; CHECK-i32-NEXT:    mov v2.s[1], w251930; CHECK-i32-NEXT:    mov v3.s[1], w81931; CHECK-i32-NEXT:    ldr w8, [sp, #240] // 4-byte Reload1932; CHECK-i32-NEXT:    ldp x29, x30, [sp, #272] // 16-byte Folded Reload1933; CHECK-i32-NEXT:    mov v0.s[2], w211934; CHECK-i32-NEXT:    mov v1.s[2], w281935; CHECK-i32-NEXT:    mov v2.s[2], w241936; CHECK-i32-NEXT:    mov v3.s[2], w81937; CHECK-i32-NEXT:    ldr w8, [sp, #208] // 4-byte Reload1938; CHECK-i32-NEXT:    ldp x22, x21, [sp, #336] // 16-byte Folded Reload1939; CHECK-i32-NEXT:    ldp x24, x23, [sp, #320] // 16-byte Folded Reload1940; CHECK-i32-NEXT:    mov v0.s[3], w201941; CHECK-i32-NEXT:    mov v1.s[3], w261942; CHECK-i32-NEXT:    mov v2.s[3], w81943; CHECK-i32-NEXT:    ldr w8, [sp, #268] // 4-byte Reload1944; CHECK-i32-NEXT:    ldp x20, x19, [sp, #352] // 16-byte Folded Reload1945; CHECK-i32-NEXT:    ldp x26, x25, [sp, #304] // 16-byte Folded Reload1946; CHECK-i32-NEXT:    mov v3.s[3], w81947; CHECK-i32-NEXT:    ldp x28, x27, [sp, #288] // 16-byte Folded Reload1948; CHECK-i32-NEXT:    add sp, sp, #3681949; CHECK-i32-NEXT:    ret1950;1951; CHECK-i64-LABEL: lrint_v16fp128:1952; CHECK-i64:       // %bb.0:1953; CHECK-i64-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill1954; CHECK-i64-NEXT:    sub sp, sp, #2561955; CHECK-i64-NEXT:    addvl sp, sp, #-41956; CHECK-i64-NEXT:    addvl x8, sp, #41957; CHECK-i64-NEXT:    str q1, [sp, #240] // 16-byte Spill1958; CHECK-i64-NEXT:    ldr q1, [x8, #272]1959; CHECK-i64-NEXT:    addvl x8, sp, #41960; CHECK-i64-NEXT:    str q0, [sp, #224] // 16-byte Spill1961; CHECK-i64-NEXT:    stp q7, q6, [sp, #128] // 32-byte Folded Spill1962; CHECK-i64-NEXT:    str q1, [sp, #112] // 16-byte Spill1963; CHECK-i64-NEXT:    ldr q1, [x8, #288]1964; CHECK-i64-NEXT:    addvl x8, sp, #41965; CHECK-i64-NEXT:    stp q5, q4, [sp, #160] // 32-byte Folded Spill1966; CHECK-i64-NEXT:    str q1, [sp, #96] // 16-byte Spill1967; CHECK-i64-NEXT:    ldr q1, [x8, #304]1968; CHECK-i64-NEXT:    addvl x8, sp, #41969; CHECK-i64-NEXT:    stp q3, q2, [sp, #192] // 32-byte Folded Spill1970; CHECK-i64-NEXT:    str q1, [sp, #80] // 16-byte Spill1971; CHECK-i64-NEXT:    ldr q1, [x8, #320]1972; CHECK-i64-NEXT:    addvl x8, sp, #41973; CHECK-i64-NEXT:    str q1, [sp, #64] // 16-byte Spill1974; CHECK-i64-NEXT:    ldr q1, [x8, #336]1975; CHECK-i64-NEXT:    addvl x8, sp, #41976; CHECK-i64-NEXT:    str q1, [sp, #48] // 16-byte Spill1977; CHECK-i64-NEXT:    ldr q1, [x8, #352]1978; CHECK-i64-NEXT:    addvl x8, sp, #41979; CHECK-i64-NEXT:    str q1, [sp, #32] // 16-byte Spill1980; CHECK-i64-NEXT:    ldr q1, [x8, #368]1981; CHECK-i64-NEXT:    addvl x8, sp, #41982; CHECK-i64-NEXT:    str q1, [sp, #16] // 16-byte Spill1983; CHECK-i64-NEXT:    ldr q1, [x8, #384]1984; CHECK-i64-NEXT:    mov v0.16b, v1.16b1985; CHECK-i64-NEXT:    bl lrintl1986; CHECK-i64-NEXT:    fmov d0, x01987; CHECK-i64-NEXT:    str q0, [sp] // 16-byte Spill1988; CHECK-i64-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1989; CHECK-i64-NEXT:    bl lrintl1990; CHECK-i64-NEXT:    fmov d0, x01991; CHECK-i64-NEXT:    ldr q1, [sp] // 16-byte Reload1992; CHECK-i64-NEXT:    add x8, sp, #2561993; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]1994; CHECK-i64-NEXT:    str z0, [x8, #3, mul vl] // 16-byte Folded Spill1995; CHECK-i64-NEXT:    ldr q0, [sp, #32] // 16-byte Reload1996; CHECK-i64-NEXT:    bl lrintl1997; CHECK-i64-NEXT:    fmov d0, x01998; CHECK-i64-NEXT:    str q0, [sp, #32] // 16-byte Spill1999; CHECK-i64-NEXT:    ldr q0, [sp, #48] // 16-byte Reload2000; CHECK-i64-NEXT:    bl lrintl2001; CHECK-i64-NEXT:    fmov d0, x02002; CHECK-i64-NEXT:    ldr q1, [sp, #32] // 16-byte Reload2003; CHECK-i64-NEXT:    add x8, sp, #2562004; CHECK-i64-NEXT:    ptrue p0.d, vl22005; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]2006; CHECK-i64-NEXT:    ldr z1, [x8, #3, mul vl] // 16-byte Folded Reload2007; CHECK-i64-NEXT:    splice z0.d, p0, z0.d, z1.d2008; CHECK-i64-NEXT:    str z0, [x8, #3, mul vl] // 16-byte Folded Spill2009; CHECK-i64-NEXT:    ldr q0, [sp, #64] // 16-byte Reload2010; CHECK-i64-NEXT:    bl lrintl2011; CHECK-i64-NEXT:    fmov d0, x02012; CHECK-i64-NEXT:    str q0, [sp, #64] // 16-byte Spill2013; CHECK-i64-NEXT:    ldr q0, [sp, #80] // 16-byte Reload2014; CHECK-i64-NEXT:    bl lrintl2015; CHECK-i64-NEXT:    fmov d0, x02016; CHECK-i64-NEXT:    ldr q1, [sp, #64] // 16-byte Reload2017; CHECK-i64-NEXT:    add x8, sp, #2562018; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]2019; CHECK-i64-NEXT:    str z0, [x8, #2, mul vl] // 16-byte Folded Spill2020; CHECK-i64-NEXT:    ldr q0, [sp, #96] // 16-byte Reload2021; CHECK-i64-NEXT:    bl lrintl2022; CHECK-i64-NEXT:    fmov d0, x02023; CHECK-i64-NEXT:    str q0, [sp, #96] // 16-byte Spill2024; CHECK-i64-NEXT:    ldr q0, [sp, #112] // 16-byte Reload2025; CHECK-i64-NEXT:    bl lrintl2026; CHECK-i64-NEXT:    fmov d0, x02027; CHECK-i64-NEXT:    ldr q1, [sp, #96] // 16-byte Reload2028; CHECK-i64-NEXT:    add x8, sp, #2562029; CHECK-i64-NEXT:    ptrue p0.d, vl22030; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]2031; CHECK-i64-NEXT:    ldr z1, [x8, #2, mul vl] // 16-byte Folded Reload2032; CHECK-i64-NEXT:    splice z0.d, p0, z0.d, z1.d2033; CHECK-i64-NEXT:    str z0, [x8, #2, mul vl] // 16-byte Folded Spill2034; CHECK-i64-NEXT:    ldr q0, [sp, #128] // 16-byte Reload2035; CHECK-i64-NEXT:    bl lrintl2036; CHECK-i64-NEXT:    fmov d0, x02037; CHECK-i64-NEXT:    str q0, [sp, #128] // 16-byte Spill2038; CHECK-i64-NEXT:    ldr q0, [sp, #144] // 16-byte Reload2039; CHECK-i64-NEXT:    bl lrintl2040; CHECK-i64-NEXT:    fmov d0, x02041; CHECK-i64-NEXT:    ldr q1, [sp, #128] // 16-byte Reload2042; CHECK-i64-NEXT:    add x8, sp, #2562043; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]2044; CHECK-i64-NEXT:    str z0, [x8, #1, mul vl] // 16-byte Folded Spill2045; CHECK-i64-NEXT:    ldr q0, [sp, #160] // 16-byte Reload2046; CHECK-i64-NEXT:    bl lrintl2047; CHECK-i64-NEXT:    fmov d0, x02048; CHECK-i64-NEXT:    str q0, [sp, #160] // 16-byte Spill2049; CHECK-i64-NEXT:    ldr q0, [sp, #176] // 16-byte Reload2050; CHECK-i64-NEXT:    bl lrintl2051; CHECK-i64-NEXT:    fmov d0, x02052; CHECK-i64-NEXT:    ldr q1, [sp, #160] // 16-byte Reload2053; CHECK-i64-NEXT:    add x8, sp, #2562054; CHECK-i64-NEXT:    ptrue p0.d, vl22055; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]2056; CHECK-i64-NEXT:    ldr z1, [x8, #1, mul vl] // 16-byte Folded Reload2057; CHECK-i64-NEXT:    splice z0.d, p0, z0.d, z1.d2058; CHECK-i64-NEXT:    str z0, [x8, #1, mul vl] // 16-byte Folded Spill2059; CHECK-i64-NEXT:    ldr q0, [sp, #192] // 16-byte Reload2060; CHECK-i64-NEXT:    bl lrintl2061; CHECK-i64-NEXT:    fmov d0, x02062; CHECK-i64-NEXT:    str q0, [sp, #192] // 16-byte Spill2063; CHECK-i64-NEXT:    ldr q0, [sp, #208] // 16-byte Reload2064; CHECK-i64-NEXT:    bl lrintl2065; CHECK-i64-NEXT:    fmov d0, x02066; CHECK-i64-NEXT:    ldr q1, [sp, #192] // 16-byte Reload2067; CHECK-i64-NEXT:    add x8, sp, #2562068; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]2069; CHECK-i64-NEXT:    str z0, [x8] // 16-byte Folded Spill2070; CHECK-i64-NEXT:    ldr q0, [sp, #240] // 16-byte Reload2071; CHECK-i64-NEXT:    bl lrintl2072; CHECK-i64-NEXT:    fmov d0, x02073; CHECK-i64-NEXT:    str q0, [sp, #240] // 16-byte Spill2074; CHECK-i64-NEXT:    ldr q0, [sp, #224] // 16-byte Reload2075; CHECK-i64-NEXT:    bl lrintl2076; CHECK-i64-NEXT:    fmov d0, x02077; CHECK-i64-NEXT:    ldr q1, [sp, #240] // 16-byte Reload2078; CHECK-i64-NEXT:    add x8, sp, #2562079; CHECK-i64-NEXT:    ptrue p0.d, vl22080; CHECK-i64-NEXT:    ldr z2, [x8, #1, mul vl] // 16-byte Folded Reload2081; CHECK-i64-NEXT:    ldr z4, [x8, #2, mul vl] // 16-byte Folded Reload2082; CHECK-i64-NEXT:    ldr z6, [x8, #3, mul vl] // 16-byte Folded Reload2083; CHECK-i64-NEXT:    mov v0.d[1], v1.d[0]2084; CHECK-i64-NEXT:    ldr z1, [x8] // 16-byte Folded Reload2085; CHECK-i64-NEXT:    movprfx z3, z22086; CHECK-i64-NEXT:    ext z3.b, z3.b, z2.b, #162087; CHECK-i64-NEXT:    movprfx z5, z42088; CHECK-i64-NEXT:    ext z5.b, z5.b, z4.b, #162089; CHECK-i64-NEXT:    // kill: def $q2 killed $q2 killed $z22090; CHECK-i64-NEXT:    // kill: def $q4 killed $q4 killed $z42091; CHECK-i64-NEXT:    movprfx z7, z62092; CHECK-i64-NEXT:    ext z7.b, z7.b, z6.b, #162093; CHECK-i64-NEXT:    // kill: def $q6 killed $q6 killed $z62094; CHECK-i64-NEXT:    splice z0.d, p0, z0.d, z1.d2095; CHECK-i64-NEXT:    // kill: def $q3 killed $q3 killed $z32096; CHECK-i64-NEXT:    // kill: def $q5 killed $q5 killed $z52097; CHECK-i64-NEXT:    // kill: def $q7 killed $q7 killed $z72098; CHECK-i64-NEXT:    movprfx z1, z02099; CHECK-i64-NEXT:    ext z1.b, z1.b, z0.b, #162100; CHECK-i64-NEXT:    // kill: def $q0 killed $q0 killed $z02101; CHECK-i64-NEXT:    // kill: def $q1 killed $q1 killed $z12102; CHECK-i64-NEXT:    addvl sp, sp, #42103; CHECK-i64-NEXT:    add sp, sp, #2562104; CHECK-i64-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload2105; CHECK-i64-NEXT:    ret2106  %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16fp128(<16 x fp128> %x)2107  ret <16 x iXLen> %a2108}2109declare <16 x iXLen> @llvm.lrint.v16iXLen.v16fp128(<16 x fp128>)2110