1796 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=+neon |\3; RUN: FileCheck %s --check-prefixes=CHECK-i324; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=aarch64 -mattr=+neon |\5; RUN: FileCheck %s --check-prefixes=CHECK-i64,CHECK-i64-SD6; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=aarch64 -mattr=+neon \7; RUN: -global-isel -global-isel-abort=2 2>&1 |\8; RUN: FileCheck %s --check-prefixes=CHECK-i32,CHECK-i32-GI9; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=aarch64 -mattr=+neon \10; RUN: -global-isel -global-isel-abort=2 2>&1 |\11; RUN: FileCheck %s --check-prefixes=CHECK-i64,CHECK-i64-GI12 13; CHECK-i32-GI: warning: Instruction selection used fallback path for lrint_v1f1614; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v2f1615; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v4f1616; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v8f1617; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v16f1618; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v32f1619; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v1f3220; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v2f3221; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v4f3222; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v8f3223; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v16f3224; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v32f3225; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v1f6426; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v2f6427; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v4f6428; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v8f6429; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v16f6430; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v32f6431; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v1fp12832; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v2fp12833; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v4fp12834; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v8fp12835; CHECK-i32-GI-NEXT: warning: Instruction selection used fallback path for lrint_v16fp12836;37; CHECK-i64-GI: warning: Instruction selection used fallback path for lrint_v2f1638; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v4f1639; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v8f1640; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v16f1641; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v32f1642; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v2f3243; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v4f3244; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v8f3245; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v16f3246; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v32f3247; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v2f6448; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v4f6449; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v8f6450; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v16f6451; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v32f6452; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v2fp12853; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v4fp12854; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v8fp12855; CHECK-i64-GI-NEXT: warning: Instruction selection used fallback path for lrint_v16fp12856 57 58define <1 x iXLen> @lrint_v1f16(<1 x half> %x) nounwind {59; CHECK-i32-LABEL: lrint_v1f16:60; CHECK-i32: // %bb.0:61; CHECK-i32-NEXT: fcvt s0, h062; CHECK-i32-NEXT: frintx s0, s063; CHECK-i32-NEXT: fcvtzs w8, s064; CHECK-i32-NEXT: fmov s0, w865; CHECK-i32-NEXT: ret66;67; CHECK-i64-LABEL: lrint_v1f16:68; CHECK-i64: // %bb.0:69; CHECK-i64-NEXT: fcvt s0, h070; CHECK-i64-NEXT: frintx s0, s071; CHECK-i64-NEXT: fcvtzs x8, s072; CHECK-i64-NEXT: fmov d0, x873; CHECK-i64-NEXT: ret74 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f16(<1 x half> %x)75 ret <1 x iXLen> %a76}77declare <1 x iXLen> @llvm.lrint.v1iXLen.v1f16(<1 x half>)78 79define <2 x iXLen> @lrint_v2f16(<2 x half> %x) nounwind {80; CHECK-i32-LABEL: lrint_v2f16:81; CHECK-i32: // %bb.0:82; CHECK-i32-NEXT: // kill: def $d0 killed $d0 def $q083; CHECK-i32-NEXT: mov h1, v0.h[1]84; CHECK-i32-NEXT: fcvt s0, h085; CHECK-i32-NEXT: fcvt s1, h186; CHECK-i32-NEXT: frintx s0, s087; CHECK-i32-NEXT: frintx s1, s188; CHECK-i32-NEXT: fcvtzs w8, s089; CHECK-i32-NEXT: fcvtzs w9, s190; CHECK-i32-NEXT: fmov s0, w891; CHECK-i32-NEXT: mov v0.s[1], w992; CHECK-i32-NEXT: // kill: def $d0 killed $d0 killed $q093; CHECK-i32-NEXT: ret94;95; CHECK-i64-LABEL: lrint_v2f16:96; CHECK-i64: // %bb.0:97; CHECK-i64-NEXT: // kill: def $d0 killed $d0 def $q098; CHECK-i64-NEXT: mov h1, v0.h[1]99; CHECK-i64-NEXT: fcvt s0, h0100; CHECK-i64-NEXT: fcvt s1, h1101; CHECK-i64-NEXT: frintx s0, s0102; CHECK-i64-NEXT: frintx s1, s1103; CHECK-i64-NEXT: fcvtzs x8, s0104; CHECK-i64-NEXT: fcvtzs x9, s1105; CHECK-i64-NEXT: fmov d0, x8106; CHECK-i64-NEXT: mov v0.d[1], x9107; CHECK-i64-NEXT: ret108 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f16(<2 x half> %x)109 ret <2 x iXLen> %a110}111declare <2 x iXLen> @llvm.lrint.v2iXLen.v2f16(<2 x half>)112 113define <4 x iXLen> @lrint_v4f16(<4 x half> %x) nounwind {114; CHECK-i32-LABEL: lrint_v4f16:115; CHECK-i32: // %bb.0:116; CHECK-i32-NEXT: // kill: def $d0 killed $d0 def $q0117; CHECK-i32-NEXT: mov h1, v0.h[1]118; CHECK-i32-NEXT: fcvt s2, h0119; CHECK-i32-NEXT: mov h3, v0.h[2]120; CHECK-i32-NEXT: mov h0, v0.h[3]121; CHECK-i32-NEXT: fcvt s1, h1122; CHECK-i32-NEXT: frintx s2, s2123; CHECK-i32-NEXT: fcvt s3, h3124; CHECK-i32-NEXT: frintx s1, s1125; CHECK-i32-NEXT: fcvtzs w8, s2126; CHECK-i32-NEXT: fcvt s2, h0127; CHECK-i32-NEXT: fcvtzs w9, s1128; CHECK-i32-NEXT: frintx s1, s3129; CHECK-i32-NEXT: fmov s0, w8130; CHECK-i32-NEXT: mov v0.s[1], w9131; CHECK-i32-NEXT: fcvtzs w8, s1132; CHECK-i32-NEXT: frintx s1, s2133; CHECK-i32-NEXT: mov v0.s[2], w8134; CHECK-i32-NEXT: fcvtzs w8, s1135; CHECK-i32-NEXT: mov v0.s[3], w8136; CHECK-i32-NEXT: ret137;138; CHECK-i64-LABEL: lrint_v4f16:139; CHECK-i64: // %bb.0:140; CHECK-i64-NEXT: // kill: def $d0 killed $d0 def $q0141; CHECK-i64-NEXT: mov h1, v0.h[2]142; CHECK-i64-NEXT: mov h2, v0.h[1]143; CHECK-i64-NEXT: mov h3, v0.h[3]144; CHECK-i64-NEXT: fcvt s0, h0145; CHECK-i64-NEXT: fcvt s1, h1146; CHECK-i64-NEXT: fcvt s2, h2147; CHECK-i64-NEXT: fcvt s3, h3148; CHECK-i64-NEXT: frintx s0, s0149; CHECK-i64-NEXT: frintx s1, s1150; CHECK-i64-NEXT: frintx s2, s2151; CHECK-i64-NEXT: frintx s3, s3152; CHECK-i64-NEXT: fcvtzs x8, s0153; CHECK-i64-NEXT: fcvtzs x9, s1154; CHECK-i64-NEXT: fcvtzs x10, s2155; CHECK-i64-NEXT: fcvtzs x11, s3156; CHECK-i64-NEXT: fmov d0, x8157; CHECK-i64-NEXT: fmov d1, x9158; CHECK-i64-NEXT: mov v0.d[1], x10159; CHECK-i64-NEXT: mov v1.d[1], x11160; CHECK-i64-NEXT: ret161 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f16(<4 x half> %x)162 ret <4 x iXLen> %a163}164declare <4 x iXLen> @llvm.lrint.v4iXLen.v4f16(<4 x half>)165 166define <8 x iXLen> @lrint_v8f16(<8 x half> %x) nounwind {167; CHECK-i32-LABEL: lrint_v8f16:168; CHECK-i32: // %bb.0:169; CHECK-i32-NEXT: ext v1.16b, v0.16b, v0.16b, #8170; CHECK-i32-NEXT: mov h3, v0.h[1]171; CHECK-i32-NEXT: fcvt s6, h0172; CHECK-i32-NEXT: mov h4, v0.h[2]173; CHECK-i32-NEXT: mov h0, v0.h[3]174; CHECK-i32-NEXT: mov h2, v1.h[1]175; CHECK-i32-NEXT: fcvt s5, h1176; CHECK-i32-NEXT: mov h7, v1.h[2]177; CHECK-i32-NEXT: fcvt s3, h3178; CHECK-i32-NEXT: frintx s6, s6179; CHECK-i32-NEXT: fcvt s4, h4180; CHECK-i32-NEXT: mov h1, v1.h[3]181; CHECK-i32-NEXT: fcvt s2, h2182; CHECK-i32-NEXT: frintx s5, s5183; CHECK-i32-NEXT: fcvt s7, h7184; CHECK-i32-NEXT: frintx s3, s3185; CHECK-i32-NEXT: fcvtzs w9, s6186; CHECK-i32-NEXT: frintx s4, s4187; CHECK-i32-NEXT: frintx s2, s2188; CHECK-i32-NEXT: fcvtzs w8, s5189; CHECK-i32-NEXT: fcvt s5, h1190; CHECK-i32-NEXT: fcvtzs w11, s3191; CHECK-i32-NEXT: fcvt s3, h0192; CHECK-i32-NEXT: fmov s0, w9193; CHECK-i32-NEXT: fcvtzs w12, s4194; CHECK-i32-NEXT: fcvtzs w10, s2195; CHECK-i32-NEXT: frintx s2, s7196; CHECK-i32-NEXT: fmov s1, w8197; CHECK-i32-NEXT: mov v0.s[1], w11198; CHECK-i32-NEXT: fcvtzs w8, s2199; CHECK-i32-NEXT: mov v1.s[1], w10200; CHECK-i32-NEXT: frintx s2, s3201; CHECK-i32-NEXT: frintx s3, s5202; CHECK-i32-NEXT: mov v0.s[2], w12203; CHECK-i32-NEXT: mov v1.s[2], w8204; CHECK-i32-NEXT: fcvtzs w9, s2205; CHECK-i32-NEXT: fcvtzs w8, s3206; CHECK-i32-NEXT: mov v0.s[3], w9207; CHECK-i32-NEXT: mov v1.s[3], w8208; CHECK-i32-NEXT: ret209;210; CHECK-i64-LABEL: lrint_v8f16:211; CHECK-i64: // %bb.0:212; CHECK-i64-NEXT: ext v1.16b, v0.16b, v0.16b, #8213; CHECK-i64-NEXT: mov h4, v0.h[2]214; CHECK-i64-NEXT: mov h3, v0.h[1]215; CHECK-i64-NEXT: mov h7, v0.h[3]216; CHECK-i64-NEXT: fcvt s0, h0217; CHECK-i64-NEXT: mov h2, v1.h[2]218; CHECK-i64-NEXT: mov h5, v1.h[1]219; CHECK-i64-NEXT: mov h6, v1.h[3]220; CHECK-i64-NEXT: fcvt s1, h1221; CHECK-i64-NEXT: fcvt s4, h4222; CHECK-i64-NEXT: fcvt s3, h3223; CHECK-i64-NEXT: fcvt s7, h7224; CHECK-i64-NEXT: frintx s0, s0225; CHECK-i64-NEXT: fcvt s2, h2226; CHECK-i64-NEXT: fcvt s5, h5227; CHECK-i64-NEXT: fcvt s6, h6228; CHECK-i64-NEXT: frintx s1, s1229; CHECK-i64-NEXT: frintx s4, s4230; CHECK-i64-NEXT: frintx s3, s3231; CHECK-i64-NEXT: frintx s7, s7232; CHECK-i64-NEXT: fcvtzs x9, s0233; CHECK-i64-NEXT: frintx s2, s2234; CHECK-i64-NEXT: frintx s5, s5235; CHECK-i64-NEXT: frintx s6, s6236; CHECK-i64-NEXT: fcvtzs x8, s1237; CHECK-i64-NEXT: fcvtzs x12, s4238; CHECK-i64-NEXT: fcvtzs x11, s3239; CHECK-i64-NEXT: fcvtzs x15, s7240; CHECK-i64-NEXT: fmov d0, x9241; CHECK-i64-NEXT: fcvtzs x10, s2242; CHECK-i64-NEXT: fcvtzs x13, s5243; CHECK-i64-NEXT: fcvtzs x14, s6244; CHECK-i64-NEXT: fmov d2, x8245; CHECK-i64-NEXT: fmov d1, x12246; CHECK-i64-NEXT: mov v0.d[1], x11247; CHECK-i64-NEXT: fmov d3, x10248; CHECK-i64-NEXT: mov v2.d[1], x13249; CHECK-i64-NEXT: mov v1.d[1], x15250; CHECK-i64-NEXT: mov v3.d[1], x14251; CHECK-i64-NEXT: ret252 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f16(<8 x half> %x)253 ret <8 x iXLen> %a254}255declare <8 x iXLen> @llvm.lrint.v8iXLen.v8f16(<8 x half>)256 257define <16 x iXLen> @lrint_v16f16(<16 x half> %x) nounwind {258; CHECK-i32-LABEL: lrint_v16f16:259; CHECK-i32: // %bb.0:260; CHECK-i32-NEXT: ext v2.16b, v0.16b, v0.16b, #8261; CHECK-i32-NEXT: ext v3.16b, v1.16b, v1.16b, #8262; CHECK-i32-NEXT: mov h18, v0.h[1]263; CHECK-i32-NEXT: mov h19, v1.h[1]264; CHECK-i32-NEXT: fcvt s20, h0265; CHECK-i32-NEXT: mov h21, v0.h[2]266; CHECK-i32-NEXT: mov h0, v0.h[3]267; CHECK-i32-NEXT: mov h4, v2.h[1]268; CHECK-i32-NEXT: mov h5, v2.h[2]269; CHECK-i32-NEXT: fcvt s6, h2270; CHECK-i32-NEXT: fcvt s7, h3271; CHECK-i32-NEXT: mov h16, v3.h[1]272; CHECK-i32-NEXT: mov h17, v3.h[2]273; CHECK-i32-NEXT: fcvt s18, h18274; CHECK-i32-NEXT: fcvt s19, h19275; CHECK-i32-NEXT: mov h2, v2.h[3]276; CHECK-i32-NEXT: fcvt s4, h4277; CHECK-i32-NEXT: fcvt s5, h5278; CHECK-i32-NEXT: frintx s6, s6279; CHECK-i32-NEXT: frintx s7, s7280; CHECK-i32-NEXT: fcvt s16, h16281; CHECK-i32-NEXT: fcvt s17, h17282; CHECK-i32-NEXT: frintx s18, s18283; CHECK-i32-NEXT: fcvt s2, h2284; CHECK-i32-NEXT: frintx s4, s4285; CHECK-i32-NEXT: frintx s5, s5286; CHECK-i32-NEXT: fcvtzs w8, s6287; CHECK-i32-NEXT: fcvt s6, h1288; CHECK-i32-NEXT: fcvtzs w9, s7289; CHECK-i32-NEXT: mov h7, v1.h[2]290; CHECK-i32-NEXT: frintx s16, s16291; CHECK-i32-NEXT: fcvtzs w15, s18292; CHECK-i32-NEXT: fcvtzs w10, s4293; CHECK-i32-NEXT: frintx s4, s17294; CHECK-i32-NEXT: fcvtzs w11, s5295; CHECK-i32-NEXT: frintx s5, s20296; CHECK-i32-NEXT: fcvt s17, h21297; CHECK-i32-NEXT: frintx s6, s6298; CHECK-i32-NEXT: fcvtzs w12, s16299; CHECK-i32-NEXT: frintx s16, s19300; CHECK-i32-NEXT: fcvt s7, h7301; CHECK-i32-NEXT: mov h19, v1.h[3]302; CHECK-i32-NEXT: fmov s1, w8303; CHECK-i32-NEXT: fcvtzs w13, s4304; CHECK-i32-NEXT: mov h4, v3.h[3]305; CHECK-i32-NEXT: fmov s3, w9306; CHECK-i32-NEXT: fcvtzs w14, s5307; CHECK-i32-NEXT: frintx s5, s17308; CHECK-i32-NEXT: fcvtzs w16, s6309; CHECK-i32-NEXT: fcvt s17, h0310; CHECK-i32-NEXT: fcvtzs w8, s16311; CHECK-i32-NEXT: frintx s6, s7312; CHECK-i32-NEXT: fcvt s7, h19313; CHECK-i32-NEXT: mov v1.s[1], w10314; CHECK-i32-NEXT: mov v3.s[1], w12315; CHECK-i32-NEXT: fcvt s4, h4316; CHECK-i32-NEXT: fcvtzs w9, s5317; CHECK-i32-NEXT: fmov s0, w14318; CHECK-i32-NEXT: frintx s5, s2319; CHECK-i32-NEXT: fmov s2, w16320; CHECK-i32-NEXT: frintx s16, s17321; CHECK-i32-NEXT: fcvtzs w10, s6322; CHECK-i32-NEXT: frintx s6, s7323; CHECK-i32-NEXT: mov v1.s[2], w11324; CHECK-i32-NEXT: mov v3.s[2], w13325; CHECK-i32-NEXT: mov v0.s[1], w15326; CHECK-i32-NEXT: frintx s4, s4327; CHECK-i32-NEXT: mov v2.s[1], w8328; CHECK-i32-NEXT: fcvtzs w8, s5329; CHECK-i32-NEXT: fcvtzs w12, s16330; CHECK-i32-NEXT: mov v0.s[2], w9331; CHECK-i32-NEXT: fcvtzs w9, s4332; CHECK-i32-NEXT: mov v2.s[2], w10333; CHECK-i32-NEXT: fcvtzs w10, s6334; CHECK-i32-NEXT: mov v1.s[3], w8335; CHECK-i32-NEXT: mov v0.s[3], w12336; CHECK-i32-NEXT: mov v3.s[3], w9337; CHECK-i32-NEXT: mov v2.s[3], w10338; CHECK-i32-NEXT: ret339;340; CHECK-i64-LABEL: lrint_v16f16:341; CHECK-i64: // %bb.0:342; CHECK-i64-NEXT: ext v2.16b, v0.16b, v0.16b, #8343; CHECK-i64-NEXT: ext v3.16b, v1.16b, v1.16b, #8344; CHECK-i64-NEXT: mov h17, v0.h[1]345; CHECK-i64-NEXT: mov h19, v0.h[2]346; CHECK-i64-NEXT: fcvt s18, h0347; CHECK-i64-NEXT: mov h0, v0.h[3]348; CHECK-i64-NEXT: mov h4, v2.h[1]349; CHECK-i64-NEXT: mov h5, v2.h[2]350; CHECK-i64-NEXT: fcvt s7, h3351; CHECK-i64-NEXT: fcvt s6, h2352; CHECK-i64-NEXT: mov h16, v3.h[2]353; CHECK-i64-NEXT: mov h2, v2.h[3]354; CHECK-i64-NEXT: fcvt s17, h17355; CHECK-i64-NEXT: fcvt s19, h19356; CHECK-i64-NEXT: frintx s18, s18357; CHECK-i64-NEXT: fcvt s0, h0358; CHECK-i64-NEXT: fcvt s4, h4359; CHECK-i64-NEXT: fcvt s5, h5360; CHECK-i64-NEXT: frintx s7, s7361; CHECK-i64-NEXT: frintx s6, s6362; CHECK-i64-NEXT: fcvt s16, h16363; CHECK-i64-NEXT: fcvt s2, h2364; CHECK-i64-NEXT: frintx s17, s17365; CHECK-i64-NEXT: frintx s19, s19366; CHECK-i64-NEXT: fcvtzs x13, s18367; CHECK-i64-NEXT: frintx s0, s0368; CHECK-i64-NEXT: frintx s4, s4369; CHECK-i64-NEXT: frintx s5, s5370; CHECK-i64-NEXT: fcvtzs x9, s7371; CHECK-i64-NEXT: mov h7, v1.h[2]372; CHECK-i64-NEXT: fcvtzs x8, s6373; CHECK-i64-NEXT: mov h6, v1.h[1]374; CHECK-i64-NEXT: frintx s16, s16375; CHECK-i64-NEXT: fcvtzs x14, s17376; CHECK-i64-NEXT: fcvtzs x15, s19377; CHECK-i64-NEXT: fcvtzs x10, s4378; CHECK-i64-NEXT: mov h4, v3.h[1]379; CHECK-i64-NEXT: fcvtzs x11, s5380; CHECK-i64-NEXT: mov h5, v1.h[3]381; CHECK-i64-NEXT: mov h3, v3.h[3]382; CHECK-i64-NEXT: fcvt s1, h1383; CHECK-i64-NEXT: fcvt s7, h7384; CHECK-i64-NEXT: fcvt s6, h6385; CHECK-i64-NEXT: fcvtzs x12, s16386; CHECK-i64-NEXT: frintx s16, s2387; CHECK-i64-NEXT: fmov d2, x8388; CHECK-i64-NEXT: fcvt s4, h4389; CHECK-i64-NEXT: fcvt s3, h3390; CHECK-i64-NEXT: fcvt s5, h5391; CHECK-i64-NEXT: frintx s1, s1392; CHECK-i64-NEXT: frintx s7, s7393; CHECK-i64-NEXT: frintx s17, s6394; CHECK-i64-NEXT: fmov d6, x9395; CHECK-i64-NEXT: mov v2.d[1], x10396; CHECK-i64-NEXT: frintx s4, s4397; CHECK-i64-NEXT: frintx s18, s3398; CHECK-i64-NEXT: frintx s5, s5399; CHECK-i64-NEXT: fcvtzs x8, s1400; CHECK-i64-NEXT: fcvtzs x9, s7401; CHECK-i64-NEXT: fmov d3, x11402; CHECK-i64-NEXT: fcvtzs x11, s0403; CHECK-i64-NEXT: fmov d7, x12404; CHECK-i64-NEXT: fcvtzs x12, s16405; CHECK-i64-NEXT: fcvtzs x16, s17406; CHECK-i64-NEXT: fcvtzs x17, s4407; CHECK-i64-NEXT: fmov d0, x13408; CHECK-i64-NEXT: fmov d1, x15409; CHECK-i64-NEXT: fcvtzs x18, s18410; CHECK-i64-NEXT: fcvtzs x0, s5411; CHECK-i64-NEXT: fmov d4, x8412; CHECK-i64-NEXT: fmov d5, x9413; CHECK-i64-NEXT: mov v0.d[1], x14414; CHECK-i64-NEXT: mov v1.d[1], x11415; CHECK-i64-NEXT: mov v3.d[1], x12416; CHECK-i64-NEXT: mov v4.d[1], x16417; CHECK-i64-NEXT: mov v6.d[1], x17418; CHECK-i64-NEXT: mov v7.d[1], x18419; CHECK-i64-NEXT: mov v5.d[1], x0420; CHECK-i64-NEXT: ret421 %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16f16(<16 x half> %x)422 ret <16 x iXLen> %a423}424declare <16 x iXLen> @llvm.lrint.v16iXLen.v16f16(<16 x half>)425 426define <32 x iXLen> @lrint_v32f16(<32 x half> %x) nounwind {427; CHECK-i32-LABEL: lrint_v32f16:428; CHECK-i32: // %bb.0:429; CHECK-i32-NEXT: ext v5.16b, v0.16b, v0.16b, #8430; CHECK-i32-NEXT: ext v4.16b, v1.16b, v1.16b, #8431; CHECK-i32-NEXT: ext v17.16b, v2.16b, v2.16b, #8432; CHECK-i32-NEXT: mov h6, v5.h[1]433; CHECK-i32-NEXT: fcvt s7, h5434; CHECK-i32-NEXT: mov h16, v5.h[2]435; CHECK-i32-NEXT: mov h5, v5.h[3]436; CHECK-i32-NEXT: mov h18, v4.h[1]437; CHECK-i32-NEXT: mov h20, v4.h[3]438; CHECK-i32-NEXT: mov h19, v4.h[2]439; CHECK-i32-NEXT: fcvt s21, h4440; CHECK-i32-NEXT: mov h23, v17.h[1]441; CHECK-i32-NEXT: ext v4.16b, v3.16b, v3.16b, #8442; CHECK-i32-NEXT: fcvt s22, h17443; CHECK-i32-NEXT: fcvt s6, h6444; CHECK-i32-NEXT: frintx s7, s7445; CHECK-i32-NEXT: fcvt s16, h16446; CHECK-i32-NEXT: fcvt s5, h5447; CHECK-i32-NEXT: fcvt s18, h18448; CHECK-i32-NEXT: fcvt s20, h20449; CHECK-i32-NEXT: fcvt s19, h19450; CHECK-i32-NEXT: frintx s22, s22451; CHECK-i32-NEXT: frintx s6, s6452; CHECK-i32-NEXT: fcvtzs w12, s7453; CHECK-i32-NEXT: frintx s7, s16454; CHECK-i32-NEXT: frintx s5, s5455; CHECK-i32-NEXT: frintx s16, s21456; CHECK-i32-NEXT: fcvt s21, h23457; CHECK-i32-NEXT: frintx s18, s18458; CHECK-i32-NEXT: frintx s20, s20459; CHECK-i32-NEXT: frintx s19, s19460; CHECK-i32-NEXT: fcvtzs w15, s22461; CHECK-i32-NEXT: mov h22, v1.h[2]462; CHECK-i32-NEXT: fcvtzs w17, s6463; CHECK-i32-NEXT: mov h6, v17.h[2]464; CHECK-i32-NEXT: mov h17, v17.h[3]465; CHECK-i32-NEXT: fcvtzs w9, s7466; CHECK-i32-NEXT: mov h7, v4.h[2]467; CHECK-i32-NEXT: fcvtzs w8, s5468; CHECK-i32-NEXT: mov h5, v4.h[1]469; CHECK-i32-NEXT: fcvtzs w13, s16470; CHECK-i32-NEXT: frintx s16, s21471; CHECK-i32-NEXT: fcvtzs w14, s18472; CHECK-i32-NEXT: fcvtzs w10, s20473; CHECK-i32-NEXT: fcvt s18, h4474; CHECK-i32-NEXT: fcvt s6, h6475; CHECK-i32-NEXT: fcvt s17, h17476; CHECK-i32-NEXT: mov h20, v0.h[2]477; CHECK-i32-NEXT: fcvt s7, h7478; CHECK-i32-NEXT: fcvtzs w11, s19479; CHECK-i32-NEXT: mov h19, v0.h[1]480; CHECK-i32-NEXT: fcvt s5, h5481; CHECK-i32-NEXT: fcvtzs w0, s16482; CHECK-i32-NEXT: mov h21, v1.h[1]483; CHECK-i32-NEXT: frintx s18, s18484; CHECK-i32-NEXT: mov h4, v4.h[3]485; CHECK-i32-NEXT: frintx s6, s6486; CHECK-i32-NEXT: frintx s16, s17487; CHECK-i32-NEXT: mov h17, v0.h[3]488; CHECK-i32-NEXT: fcvt s0, h0489; CHECK-i32-NEXT: fcvt s19, h19490; CHECK-i32-NEXT: frintx s5, s5491; CHECK-i32-NEXT: fcvtzs w2, s18492; CHECK-i32-NEXT: fcvt s18, h21493; CHECK-i32-NEXT: fcvt s21, h2494; CHECK-i32-NEXT: fcvtzs w18, s6495; CHECK-i32-NEXT: frintx s6, s7496; CHECK-i32-NEXT: fcvt s7, h20497; CHECK-i32-NEXT: fcvtzs w16, s16498; CHECK-i32-NEXT: fcvt s16, h17499; CHECK-i32-NEXT: fcvt s17, h1500; CHECK-i32-NEXT: frintx s0, s0501; CHECK-i32-NEXT: fcvtzs w3, s5502; CHECK-i32-NEXT: frintx s5, s19503; CHECK-i32-NEXT: fcvt s19, h22504; CHECK-i32-NEXT: mov h1, v1.h[3]505; CHECK-i32-NEXT: fcvtzs w1, s6506; CHECK-i32-NEXT: frintx s6, s7507; CHECK-i32-NEXT: mov h7, v2.h[1]508; CHECK-i32-NEXT: frintx s17, s17509; CHECK-i32-NEXT: frintx s20, s16510; CHECK-i32-NEXT: fmov s16, w12511; CHECK-i32-NEXT: fcvtzs w4, s0512; CHECK-i32-NEXT: frintx s0, s18513; CHECK-i32-NEXT: fcvtzs w5, s5514; CHECK-i32-NEXT: frintx s5, s19515; CHECK-i32-NEXT: frintx s18, s21516; CHECK-i32-NEXT: fcvt s19, h3517; CHECK-i32-NEXT: fcvtzs w12, s6518; CHECK-i32-NEXT: fcvt s6, h7519; CHECK-i32-NEXT: mov h7, v3.h[1]520; CHECK-i32-NEXT: fcvtzs w6, s17521; CHECK-i32-NEXT: fmov s17, w13522; CHECK-i32-NEXT: mov v16.s[1], w17523; CHECK-i32-NEXT: fcvtzs w17, s20524; CHECK-i32-NEXT: fcvtzs w7, s0525; CHECK-i32-NEXT: mov h0, v2.h[2]526; CHECK-i32-NEXT: mov h20, v3.h[2]527; CHECK-i32-NEXT: fcvtzs w13, s5528; CHECK-i32-NEXT: fmov s5, w15529; CHECK-i32-NEXT: frintx s6, s6530; CHECK-i32-NEXT: fcvt s7, h7531; CHECK-i32-NEXT: mov v17.s[1], w14532; CHECK-i32-NEXT: fcvtzs w14, s18533; CHECK-i32-NEXT: frintx s18, s19534; CHECK-i32-NEXT: mov h2, v2.h[3]535; CHECK-i32-NEXT: fcvt s0, h0536; CHECK-i32-NEXT: mov h3, v3.h[3]537; CHECK-i32-NEXT: mov v5.s[1], w0538; CHECK-i32-NEXT: fcvt s19, h20539; CHECK-i32-NEXT: fcvt s1, h1540; CHECK-i32-NEXT: mov v16.s[2], w9541; CHECK-i32-NEXT: fcvtzs w15, s6542; CHECK-i32-NEXT: frintx s6, s7543; CHECK-i32-NEXT: fmov s7, w2544; CHECK-i32-NEXT: fcvtzs w0, s18545; CHECK-i32-NEXT: fcvt s20, h2546; CHECK-i32-NEXT: fcvt s18, h4547; CHECK-i32-NEXT: frintx s21, s0548; CHECK-i32-NEXT: fcvt s3, h3549; CHECK-i32-NEXT: fmov s0, w4550; CHECK-i32-NEXT: frintx s19, s19551; CHECK-i32-NEXT: fmov s2, w6552; CHECK-i32-NEXT: fmov s4, w14553; CHECK-i32-NEXT: fcvtzs w2, s6554; CHECK-i32-NEXT: mov v7.s[1], w3555; CHECK-i32-NEXT: frintx s1, s1556; CHECK-i32-NEXT: fmov s6, w0557; CHECK-i32-NEXT: mov v0.s[1], w5558; CHECK-i32-NEXT: frintx s20, s20559; CHECK-i32-NEXT: mov v2.s[1], w7560; CHECK-i32-NEXT: fcvtzs w3, s21561; CHECK-i32-NEXT: mov v4.s[1], w15562; CHECK-i32-NEXT: fcvtzs w14, s19563; CHECK-i32-NEXT: frintx s18, s18564; CHECK-i32-NEXT: frintx s3, s3565; CHECK-i32-NEXT: mov v6.s[1], w2566; CHECK-i32-NEXT: mov v17.s[2], w11567; CHECK-i32-NEXT: fcvtzs w15, s1568; CHECK-i32-NEXT: fcvtzs w0, s20569; CHECK-i32-NEXT: mov v5.s[2], w18570; CHECK-i32-NEXT: mov v0.s[2], w12571; CHECK-i32-NEXT: mov v7.s[2], w1572; CHECK-i32-NEXT: mov v2.s[2], w13573; CHECK-i32-NEXT: mov v4.s[2], w3574; CHECK-i32-NEXT: fcvtzs w9, s18575; CHECK-i32-NEXT: fcvtzs w11, s3576; CHECK-i32-NEXT: mov v16.s[3], w8577; CHECK-i32-NEXT: mov v6.s[2], w14578; CHECK-i32-NEXT: mov v17.s[3], w10579; CHECK-i32-NEXT: mov v0.s[3], w17580; CHECK-i32-NEXT: mov v5.s[3], w16581; CHECK-i32-NEXT: mov v2.s[3], w15582; CHECK-i32-NEXT: mov v4.s[3], w0583; CHECK-i32-NEXT: mov v7.s[3], w9584; CHECK-i32-NEXT: mov v1.16b, v16.16b585; CHECK-i32-NEXT: mov v6.s[3], w11586; CHECK-i32-NEXT: mov v3.16b, v17.16b587; CHECK-i32-NEXT: ret588;589; CHECK-i64-LABEL: lrint_v32f16:590; CHECK-i64: // %bb.0:591; CHECK-i64-NEXT: ext v4.16b, v1.16b, v1.16b, #8592; CHECK-i64-NEXT: ext v5.16b, v2.16b, v2.16b, #8593; CHECK-i64-NEXT: ext v6.16b, v3.16b, v3.16b, #8594; CHECK-i64-NEXT: ext v7.16b, v0.16b, v0.16b, #8595; CHECK-i64-NEXT: mov h19, v0.h[1]596; CHECK-i64-NEXT: fcvt s21, h0597; CHECK-i64-NEXT: mov h23, v1.h[2]598; CHECK-i64-NEXT: fcvt s22, h1599; CHECK-i64-NEXT: fcvt s26, h2600; CHECK-i64-NEXT: mov h27, v2.h[1]601; CHECK-i64-NEXT: mov h28, v2.h[2]602; CHECK-i64-NEXT: mov h16, v4.h[2]603; CHECK-i64-NEXT: fcvt s17, h5604; CHECK-i64-NEXT: mov h18, v5.h[2]605; CHECK-i64-NEXT: mov h20, v6.h[2]606; CHECK-i64-NEXT: fcvt s24, h7607; CHECK-i64-NEXT: fcvt s25, h6608; CHECK-i64-NEXT: fcvt s19, h19609; CHECK-i64-NEXT: frintx s22, s22610; CHECK-i64-NEXT: fcvt s16, h16611; CHECK-i64-NEXT: frintx s17, s17612; CHECK-i64-NEXT: fcvt s18, h18613; CHECK-i64-NEXT: fcvt s20, h20614; CHECK-i64-NEXT: frintx s16, s16615; CHECK-i64-NEXT: fcvtzs x12, s17616; CHECK-i64-NEXT: frintx s17, s18617; CHECK-i64-NEXT: frintx s18, s21618; CHECK-i64-NEXT: fcvt s21, h23619; CHECK-i64-NEXT: frintx s23, s24620; CHECK-i64-NEXT: frintx s24, s25621; CHECK-i64-NEXT: frintx s25, s19622; CHECK-i64-NEXT: mov h19, v7.h[1]623; CHECK-i64-NEXT: fcvtzs x13, s16624; CHECK-i64-NEXT: frintx s16, s20625; CHECK-i64-NEXT: frintx s20, s26626; CHECK-i64-NEXT: fcvtzs x9, s23627; CHECK-i64-NEXT: mov h23, v3.h[2]628; CHECK-i64-NEXT: fcvt s26, h27629; CHECK-i64-NEXT: fcvtzs x15, s24630; CHECK-i64-NEXT: fcvtzs x10, s25631; CHECK-i64-NEXT: fcvt s24, h28632; CHECK-i64-NEXT: mov h25, v3.h[3]633; CHECK-i64-NEXT: fcvtzs x14, s17634; CHECK-i64-NEXT: frintx s21, s21635; CHECK-i64-NEXT: fmov d17, x12636; CHECK-i64-NEXT: fcvtzs x12, s16637; CHECK-i64-NEXT: fmov d16, x13638; CHECK-i64-NEXT: fcvtzs x13, s22639; CHECK-i64-NEXT: fcvt s22, h3640; CHECK-i64-NEXT: mov h3, v3.h[1]641; CHECK-i64-NEXT: mov h27, v0.h[2]642; CHECK-i64-NEXT: mov h28, v2.h[3]643; CHECK-i64-NEXT: fcvt s23, h23644; CHECK-i64-NEXT: frintx s26, s26645; CHECK-i64-NEXT: fcvtzs x16, s20646; CHECK-i64-NEXT: frintx s20, s24647; CHECK-i64-NEXT: fcvt s24, h25648; CHECK-i64-NEXT: fcvtzs x11, s18649; CHECK-i64-NEXT: fmov d18, x14650; CHECK-i64-NEXT: fcvtzs x14, s21651; CHECK-i64-NEXT: frintx s22, s22652; CHECK-i64-NEXT: fcvt s3, h3653; CHECK-i64-NEXT: fcvt s25, h27654; CHECK-i64-NEXT: fcvt s27, h28655; CHECK-i64-NEXT: frintx s23, s23656; CHECK-i64-NEXT: mov h21, v1.h[3]657; CHECK-i64-NEXT: fmov d2, x15658; CHECK-i64-NEXT: fcvtzs x15, s26659; CHECK-i64-NEXT: fmov d26, x13660; CHECK-i64-NEXT: mov h1, v1.h[1]661; CHECK-i64-NEXT: fcvtzs x13, s20662; CHECK-i64-NEXT: frintx s20, s24663; CHECK-i64-NEXT: fmov d24, x14664; CHECK-i64-NEXT: fcvtzs x14, s22665; CHECK-i64-NEXT: frintx s3, s3666; CHECK-i64-NEXT: fmov d22, x16667; CHECK-i64-NEXT: frintx s27, s27668; CHECK-i64-NEXT: fcvtzs x16, s23669; CHECK-i64-NEXT: fcvt s21, h21670; CHECK-i64-NEXT: frintx s25, s25671; CHECK-i64-NEXT: fcvt s1, h1672; CHECK-i64-NEXT: mov h0, v0.h[3]673; CHECK-i64-NEXT: mov h23, v7.h[2]674; CHECK-i64-NEXT: mov v22.d[1], x15675; CHECK-i64-NEXT: fcvtzs x15, s20676; CHECK-i64-NEXT: fmov d20, x13677; CHECK-i64-NEXT: fcvtzs x13, s3678; CHECK-i64-NEXT: fmov d3, x14679; CHECK-i64-NEXT: fcvtzs x14, s27680; CHECK-i64-NEXT: fmov d27, x16681; CHECK-i64-NEXT: frintx s21, s21682; CHECK-i64-NEXT: mov h7, v7.h[3]683; CHECK-i64-NEXT: frintx s1, s1684; CHECK-i64-NEXT: fcvt s0, h0685; CHECK-i64-NEXT: fcvt s23, h23686; CHECK-i64-NEXT: fcvt s19, h19687; CHECK-i64-NEXT: mov v27.d[1], x15688; CHECK-i64-NEXT: fcvtzs x15, s25689; CHECK-i64-NEXT: mov h25, v6.h[3]690; CHECK-i64-NEXT: mov h6, v6.h[1]691; CHECK-i64-NEXT: mov v3.d[1], x13692; CHECK-i64-NEXT: fcvtzs x13, s21693; CHECK-i64-NEXT: mov h21, v5.h[1]694; CHECK-i64-NEXT: mov h5, v5.h[3]695; CHECK-i64-NEXT: mov v20.d[1], x14696; CHECK-i64-NEXT: fcvtzs x14, s1697; CHECK-i64-NEXT: mov h1, v4.h[1]698; CHECK-i64-NEXT: frintx s0, s0699; CHECK-i64-NEXT: fcvt s25, h25700; CHECK-i64-NEXT: fcvt s7, h7701; CHECK-i64-NEXT: stp q3, q27, [x8, #192]702; CHECK-i64-NEXT: fcvt s6, h6703; CHECK-i64-NEXT: mov h3, v4.h[3]704; CHECK-i64-NEXT: stp q22, q20, [x8, #128]705; CHECK-i64-NEXT: fcvt s21, h21706; CHECK-i64-NEXT: fcvt s5, h5707; CHECK-i64-NEXT: mov v24.d[1], x13708; CHECK-i64-NEXT: mov v26.d[1], x14709; CHECK-i64-NEXT: fcvt s4, h4710; CHECK-i64-NEXT: frintx s22, s25711; CHECK-i64-NEXT: fmov d20, x12712; CHECK-i64-NEXT: fcvt s1, h1713; CHECK-i64-NEXT: frintx s6, s6714; CHECK-i64-NEXT: fcvt s3, h3715; CHECK-i64-NEXT: fcvtzs x12, s0716; CHECK-i64-NEXT: frintx s5, s5717; CHECK-i64-NEXT: frintx s21, s21718; CHECK-i64-NEXT: fmov d0, x11719; CHECK-i64-NEXT: stp q26, q24, [x8, #64]720; CHECK-i64-NEXT: fmov d24, x15721; CHECK-i64-NEXT: frintx s4, s4722; CHECK-i64-NEXT: fcvtzs x11, s22723; CHECK-i64-NEXT: frintx s22, s23724; CHECK-i64-NEXT: frintx s1, s1725; CHECK-i64-NEXT: fcvtzs x13, s6726; CHECK-i64-NEXT: frintx s3, s3727; CHECK-i64-NEXT: frintx s6, s7728; CHECK-i64-NEXT: fcvtzs x14, s5729; CHECK-i64-NEXT: mov v24.d[1], x12730; CHECK-i64-NEXT: frintx s5, s19731; CHECK-i64-NEXT: fcvtzs x12, s21732; CHECK-i64-NEXT: mov v0.d[1], x10733; CHECK-i64-NEXT: fcvtzs x10, s4734; CHECK-i64-NEXT: mov v20.d[1], x11735; CHECK-i64-NEXT: fcvtzs x11, s22736; CHECK-i64-NEXT: mov v2.d[1], x13737; CHECK-i64-NEXT: fcvtzs x15, s3738; CHECK-i64-NEXT: fcvtzs x13, s1739; CHECK-i64-NEXT: mov v18.d[1], x14740; CHECK-i64-NEXT: fcvtzs x14, s6741; CHECK-i64-NEXT: stp q0, q24, [x8]742; CHECK-i64-NEXT: mov v17.d[1], x12743; CHECK-i64-NEXT: fcvtzs x12, s5744; CHECK-i64-NEXT: fmov d0, x10745; CHECK-i64-NEXT: fmov d1, x11746; CHECK-i64-NEXT: stp q2, q20, [x8, #224]747; CHECK-i64-NEXT: fmov d2, x9748; CHECK-i64-NEXT: mov v16.d[1], x15749; CHECK-i64-NEXT: stp q17, q18, [x8, #160]750; CHECK-i64-NEXT: mov v0.d[1], x13751; CHECK-i64-NEXT: mov v1.d[1], x14752; CHECK-i64-NEXT: mov v2.d[1], x12753; CHECK-i64-NEXT: stp q0, q16, [x8, #96]754; CHECK-i64-NEXT: stp q2, q1, [x8, #32]755; CHECK-i64-NEXT: ret756 %a = call <32 x iXLen> @llvm.lrint.v32iXLen.v32f16(<32 x half> %x)757 ret <32 x iXLen> %a758}759declare <32 x iXLen> @llvm.lrint.v32iXLen.v32f16(<32 x half>)760 761define <1 x iXLen> @lrint_v1f32(<1 x float> %x) nounwind {762; CHECK-i32-LABEL: lrint_v1f32:763; CHECK-i32: // %bb.0:764; CHECK-i32-NEXT: frintx v0.2s, v0.2s765; CHECK-i32-NEXT: fcvtzs v0.2s, v0.2s766; CHECK-i32-NEXT: ret767;768; CHECK-i64-SD-LABEL: lrint_v1f32:769; CHECK-i64-SD: // %bb.0:770; CHECK-i64-SD-NEXT: // kill: def $d0 killed $d0 def $q0771; CHECK-i64-SD-NEXT: frintx s0, s0772; CHECK-i64-SD-NEXT: fcvtzs x8, s0773; CHECK-i64-SD-NEXT: fmov d0, x8774; CHECK-i64-SD-NEXT: ret775;776; CHECK-i64-GI-LABEL: lrint_v1f32:777; CHECK-i64-GI: // %bb.0:778; CHECK-i64-GI-NEXT: frintx s0, s0779; CHECK-i64-GI-NEXT: fcvtzs x8, s0780; CHECK-i64-GI-NEXT: fmov d0, x8781; CHECK-i64-GI-NEXT: ret782 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f32(<1 x float> %x)783 ret <1 x iXLen> %a784}785declare <1 x iXLen> @llvm.lrint.v1iXLen.v1f32(<1 x float>)786 787define <2 x iXLen> @lrint_v2f32(<2 x float> %x) nounwind {788; CHECK-i32-LABEL: lrint_v2f32:789; CHECK-i32: // %bb.0:790; CHECK-i32-NEXT: frintx v0.2s, v0.2s791; CHECK-i32-NEXT: fcvtzs v0.2s, v0.2s792; CHECK-i32-NEXT: ret793;794; CHECK-i64-LABEL: lrint_v2f32:795; CHECK-i64: // %bb.0:796; CHECK-i64-NEXT: frintx v0.2s, v0.2s797; CHECK-i64-NEXT: fcvtl v0.2d, v0.2s798; CHECK-i64-NEXT: fcvtzs v0.2d, v0.2d799; CHECK-i64-NEXT: ret800 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f32(<2 x float> %x)801 ret <2 x iXLen> %a802}803declare <2 x iXLen> @llvm.lrint.v2iXLen.v2f32(<2 x float>)804 805define <4 x iXLen> @lrint_v4f32(<4 x float> %x) nounwind {806; CHECK-i32-LABEL: lrint_v4f32:807; CHECK-i32: // %bb.0:808; CHECK-i32-NEXT: frintx v0.4s, v0.4s809; CHECK-i32-NEXT: fcvtzs v0.4s, v0.4s810; CHECK-i32-NEXT: ret811;812; CHECK-i64-LABEL: lrint_v4f32:813; CHECK-i64: // %bb.0:814; CHECK-i64-NEXT: ext v1.16b, v0.16b, v0.16b, #8815; CHECK-i64-NEXT: frintx v0.2s, v0.2s816; CHECK-i64-NEXT: frintx v1.2s, v1.2s817; CHECK-i64-NEXT: fcvtl v0.2d, v0.2s818; CHECK-i64-NEXT: fcvtl v1.2d, v1.2s819; CHECK-i64-NEXT: fcvtzs v0.2d, v0.2d820; CHECK-i64-NEXT: fcvtzs v1.2d, v1.2d821; CHECK-i64-NEXT: ret822 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f32(<4 x float> %x)823 ret <4 x iXLen> %a824}825declare <4 x iXLen> @llvm.lrint.v4iXLen.v4f32(<4 x float>)826 827define <8 x iXLen> @lrint_v8f32(<8 x float> %x) nounwind {828; CHECK-i32-LABEL: lrint_v8f32:829; CHECK-i32: // %bb.0:830; CHECK-i32-NEXT: frintx v0.4s, v0.4s831; CHECK-i32-NEXT: frintx v1.4s, v1.4s832; CHECK-i32-NEXT: fcvtzs v0.4s, v0.4s833; CHECK-i32-NEXT: fcvtzs v1.4s, v1.4s834; CHECK-i32-NEXT: ret835;836; CHECK-i64-LABEL: lrint_v8f32:837; CHECK-i64: // %bb.0:838; CHECK-i64-NEXT: ext v2.16b, v0.16b, v0.16b, #8839; CHECK-i64-NEXT: ext v3.16b, v1.16b, v1.16b, #8840; CHECK-i64-NEXT: frintx v0.2s, v0.2s841; CHECK-i64-NEXT: frintx v1.2s, v1.2s842; CHECK-i64-NEXT: frintx v2.2s, v2.2s843; CHECK-i64-NEXT: frintx v3.2s, v3.2s844; CHECK-i64-NEXT: fcvtl v0.2d, v0.2s845; CHECK-i64-NEXT: fcvtl v1.2d, v1.2s846; CHECK-i64-NEXT: fcvtl v4.2d, v2.2s847; CHECK-i64-NEXT: fcvtl v3.2d, v3.2s848; CHECK-i64-NEXT: fcvtzs v0.2d, v0.2d849; CHECK-i64-NEXT: fcvtzs v2.2d, v1.2d850; CHECK-i64-NEXT: fcvtzs v1.2d, v4.2d851; CHECK-i64-NEXT: fcvtzs v3.2d, v3.2d852; CHECK-i64-NEXT: ret853 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f32(<8 x float> %x)854 ret <8 x iXLen> %a855}856declare <8 x iXLen> @llvm.lrint.v8iXLen.v8f32(<8 x float>)857 858define <16 x iXLen> @lrint_v16f32(<16 x float> %x) nounwind {859; CHECK-i32-LABEL: lrint_v16f32:860; CHECK-i32: // %bb.0:861; CHECK-i32-NEXT: frintx v0.4s, v0.4s862; CHECK-i32-NEXT: frintx v1.4s, v1.4s863; CHECK-i32-NEXT: frintx v2.4s, v2.4s864; CHECK-i32-NEXT: frintx v3.4s, v3.4s865; CHECK-i32-NEXT: fcvtzs v0.4s, v0.4s866; CHECK-i32-NEXT: fcvtzs v1.4s, v1.4s867; CHECK-i32-NEXT: fcvtzs v2.4s, v2.4s868; CHECK-i32-NEXT: fcvtzs v3.4s, v3.4s869; CHECK-i32-NEXT: ret870;871; CHECK-i64-LABEL: lrint_v16f32:872; CHECK-i64: // %bb.0:873; CHECK-i64-NEXT: ext v4.16b, v1.16b, v1.16b, #8874; CHECK-i64-NEXT: ext v5.16b, v0.16b, v0.16b, #8875; CHECK-i64-NEXT: ext v6.16b, v2.16b, v2.16b, #8876; CHECK-i64-NEXT: ext v7.16b, v3.16b, v3.16b, #8877; CHECK-i64-NEXT: frintx v0.2s, v0.2s878; CHECK-i64-NEXT: frintx v1.2s, v1.2s879; CHECK-i64-NEXT: frintx v2.2s, v2.2s880; CHECK-i64-NEXT: frintx v3.2s, v3.2s881; CHECK-i64-NEXT: frintx v5.2s, v5.2s882; CHECK-i64-NEXT: frintx v4.2s, v4.2s883; CHECK-i64-NEXT: frintx v6.2s, v6.2s884; CHECK-i64-NEXT: frintx v7.2s, v7.2s885; CHECK-i64-NEXT: fcvtl v0.2d, v0.2s886; CHECK-i64-NEXT: fcvtl v1.2d, v1.2s887; CHECK-i64-NEXT: fcvtl v16.2d, v2.2s888; CHECK-i64-NEXT: fcvtl v18.2d, v3.2s889; CHECK-i64-NEXT: fcvtl v5.2d, v5.2s890; CHECK-i64-NEXT: fcvtl v17.2d, v4.2s891; CHECK-i64-NEXT: fcvtl v19.2d, v6.2s892; CHECK-i64-NEXT: fcvtl v7.2d, v7.2s893; CHECK-i64-NEXT: fcvtzs v0.2d, v0.2d894; CHECK-i64-NEXT: fcvtzs v2.2d, v1.2d895; CHECK-i64-NEXT: fcvtzs v4.2d, v16.2d896; CHECK-i64-NEXT: fcvtzs v6.2d, v18.2d897; CHECK-i64-NEXT: fcvtzs v1.2d, v5.2d898; CHECK-i64-NEXT: fcvtzs v3.2d, v17.2d899; CHECK-i64-NEXT: fcvtzs v5.2d, v19.2d900; CHECK-i64-NEXT: fcvtzs v7.2d, v7.2d901; CHECK-i64-NEXT: ret902 %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16f32(<16 x float> %x)903 ret <16 x iXLen> %a904}905declare <16 x iXLen> @llvm.lrint.v16iXLen.v16f32(<16 x float>)906 907define <32 x iXLen> @lrint_v32f32(<32 x float> %x) nounwind {908; CHECK-i32-LABEL: lrint_v32f32:909; CHECK-i32: // %bb.0:910; CHECK-i32-NEXT: frintx v0.4s, v0.4s911; CHECK-i32-NEXT: frintx v1.4s, v1.4s912; CHECK-i32-NEXT: frintx v2.4s, v2.4s913; CHECK-i32-NEXT: frintx v3.4s, v3.4s914; CHECK-i32-NEXT: frintx v4.4s, v4.4s915; CHECK-i32-NEXT: frintx v5.4s, v5.4s916; CHECK-i32-NEXT: frintx v6.4s, v6.4s917; CHECK-i32-NEXT: frintx v7.4s, v7.4s918; CHECK-i32-NEXT: fcvtzs v0.4s, v0.4s919; CHECK-i32-NEXT: fcvtzs v1.4s, v1.4s920; CHECK-i32-NEXT: fcvtzs v2.4s, v2.4s921; CHECK-i32-NEXT: fcvtzs v3.4s, v3.4s922; CHECK-i32-NEXT: fcvtzs v4.4s, v4.4s923; CHECK-i32-NEXT: fcvtzs v5.4s, v5.4s924; CHECK-i32-NEXT: fcvtzs v6.4s, v6.4s925; CHECK-i32-NEXT: fcvtzs v7.4s, v7.4s926; CHECK-i32-NEXT: ret927;928; CHECK-i64-LABEL: lrint_v32f32:929; CHECK-i64: // %bb.0:930; CHECK-i64-NEXT: ext v16.16b, v7.16b, v7.16b, #8931; CHECK-i64-NEXT: ext v17.16b, v6.16b, v6.16b, #8932; CHECK-i64-NEXT: frintx v7.2s, v7.2s933; CHECK-i64-NEXT: frintx v6.2s, v6.2s934; CHECK-i64-NEXT: ext v18.16b, v5.16b, v5.16b, #8935; CHECK-i64-NEXT: ext v21.16b, v4.16b, v4.16b, #8936; CHECK-i64-NEXT: ext v22.16b, v2.16b, v2.16b, #8937; CHECK-i64-NEXT: frintx v5.2s, v5.2s938; CHECK-i64-NEXT: ext v23.16b, v3.16b, v3.16b, #8939; CHECK-i64-NEXT: frintx v4.2s, v4.2s940; CHECK-i64-NEXT: ext v19.16b, v0.16b, v0.16b, #8941; CHECK-i64-NEXT: ext v20.16b, v1.16b, v1.16b, #8942; CHECK-i64-NEXT: frintx v16.2s, v16.2s943; CHECK-i64-NEXT: frintx v17.2s, v17.2s944; CHECK-i64-NEXT: fcvtl v7.2d, v7.2s945; CHECK-i64-NEXT: fcvtl v6.2d, v6.2s946; CHECK-i64-NEXT: frintx v18.2s, v18.2s947; CHECK-i64-NEXT: frintx v21.2s, v21.2s948; CHECK-i64-NEXT: frintx v2.2s, v2.2s949; CHECK-i64-NEXT: frintx v3.2s, v3.2s950; CHECK-i64-NEXT: fcvtl v5.2d, v5.2s951; CHECK-i64-NEXT: frintx v23.2s, v23.2s952; CHECK-i64-NEXT: fcvtl v4.2d, v4.2s953; CHECK-i64-NEXT: frintx v1.2s, v1.2s954; CHECK-i64-NEXT: fcvtl v16.2d, v16.2s955; CHECK-i64-NEXT: fcvtl v17.2d, v17.2s956; CHECK-i64-NEXT: fcvtzs v7.2d, v7.2d957; CHECK-i64-NEXT: fcvtzs v6.2d, v6.2d958; CHECK-i64-NEXT: fcvtl v18.2d, v18.2s959; CHECK-i64-NEXT: fcvtl v21.2d, v21.2s960; CHECK-i64-NEXT: frintx v20.2s, v20.2s961; CHECK-i64-NEXT: fcvtl v3.2d, v3.2s962; CHECK-i64-NEXT: fcvtzs v5.2d, v5.2d963; CHECK-i64-NEXT: frintx v0.2s, v0.2s964; CHECK-i64-NEXT: fcvtl v2.2d, v2.2s965; CHECK-i64-NEXT: fcvtzs v4.2d, v4.2d966; CHECK-i64-NEXT: fcvtzs v16.2d, v16.2d967; CHECK-i64-NEXT: fcvtzs v17.2d, v17.2d968; CHECK-i64-NEXT: fcvtl v1.2d, v1.2s969; CHECK-i64-NEXT: fcvtzs v3.2d, v3.2d970; CHECK-i64-NEXT: fcvtl v0.2d, v0.2s971; CHECK-i64-NEXT: fcvtzs v2.2d, v2.2d972; CHECK-i64-NEXT: stp q6, q17, [x8, #192]973; CHECK-i64-NEXT: fcvtl v6.2d, v23.2s974; CHECK-i64-NEXT: frintx v17.2s, v19.2s975; CHECK-i64-NEXT: stp q7, q16, [x8, #224]976; CHECK-i64-NEXT: frintx v7.2s, v22.2s977; CHECK-i64-NEXT: fcvtzs v16.2d, v18.2d978; CHECK-i64-NEXT: fcvtzs v18.2d, v21.2d979; CHECK-i64-NEXT: fcvtzs v1.2d, v1.2d980; CHECK-i64-NEXT: fcvtzs v0.2d, v0.2d981; CHECK-i64-NEXT: fcvtzs v6.2d, v6.2d982; CHECK-i64-NEXT: stp q5, q16, [x8, #160]983; CHECK-i64-NEXT: fcvtl v7.2d, v7.2s984; CHECK-i64-NEXT: fcvtl v5.2d, v20.2s985; CHECK-i64-NEXT: stp q4, q18, [x8, #128]986; CHECK-i64-NEXT: fcvtl v4.2d, v17.2s987; CHECK-i64-NEXT: stp q3, q6, [x8, #96]988; CHECK-i64-NEXT: fcvtzs v7.2d, v7.2d989; CHECK-i64-NEXT: fcvtzs v3.2d, v5.2d990; CHECK-i64-NEXT: stp q1, q3, [x8, #32]991; CHECK-i64-NEXT: stp q2, q7, [x8, #64]992; CHECK-i64-NEXT: fcvtzs v2.2d, v4.2d993; CHECK-i64-NEXT: stp q0, q2, [x8]994; CHECK-i64-NEXT: ret995 %a = call <32 x iXLen> @llvm.lrint.v32iXLen.v32f32(<32 x float> %x)996 ret <32 x iXLen> %a997}998declare <32 x iXLen> @llvm.lrint.v32iXLen.v32f32(<32 x float>)999 1000define <1 x iXLen> @lrint_v1f64(<1 x double> %x) nounwind {1001; CHECK-i32-LABEL: lrint_v1f64:1002; CHECK-i32: // %bb.0:1003; CHECK-i32-NEXT: frintx d0, d01004; CHECK-i32-NEXT: fcvtzs w8, d01005; CHECK-i32-NEXT: fmov s0, w81006; CHECK-i32-NEXT: ret1007;1008; CHECK-i64-LABEL: lrint_v1f64:1009; CHECK-i64: // %bb.0:1010; CHECK-i64-NEXT: frintx d0, d01011; CHECK-i64-NEXT: fcvtzs x8, d01012; CHECK-i64-NEXT: fmov d0, x81013; CHECK-i64-NEXT: ret1014 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f64(<1 x double> %x)1015 ret <1 x iXLen> %a1016}1017declare <1 x iXLen> @llvm.lrint.v1iXLen.v1f64(<1 x double>)1018 1019define <2 x iXLen> @lrint_v2f64(<2 x double> %x) nounwind {1020; CHECK-i32-LABEL: lrint_v2f64:1021; CHECK-i32: // %bb.0:1022; CHECK-i32-NEXT: frintx v0.2d, v0.2d1023; CHECK-i32-NEXT: mov d1, v0.d[1]1024; CHECK-i32-NEXT: fcvtzs w8, d01025; CHECK-i32-NEXT: fcvtzs w9, d11026; CHECK-i32-NEXT: fmov s0, w81027; CHECK-i32-NEXT: mov v0.s[1], w91028; CHECK-i32-NEXT: // kill: def $d0 killed $d0 killed $q01029; CHECK-i32-NEXT: ret1030;1031; CHECK-i64-LABEL: lrint_v2f64:1032; CHECK-i64: // %bb.0:1033; CHECK-i64-NEXT: frintx v0.2d, v0.2d1034; CHECK-i64-NEXT: fcvtzs v0.2d, v0.2d1035; CHECK-i64-NEXT: ret1036 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f64(<2 x double> %x)1037 ret <2 x iXLen> %a1038}1039declare <2 x iXLen> @llvm.lrint.v2iXLen.v2f64(<2 x double>)1040 1041define <4 x iXLen> @lrint_v4f64(<4 x double> %x) nounwind {1042; CHECK-i32-LABEL: lrint_v4f64:1043; CHECK-i32: // %bb.0:1044; CHECK-i32-NEXT: frintx v0.2d, v0.2d1045; CHECK-i32-NEXT: frintx v1.2d, v1.2d1046; CHECK-i32-NEXT: mov d2, v0.d[1]1047; CHECK-i32-NEXT: fcvtzs w8, d01048; CHECK-i32-NEXT: fcvtzs w9, d21049; CHECK-i32-NEXT: fmov s0, w81050; CHECK-i32-NEXT: fcvtzs w8, d11051; CHECK-i32-NEXT: mov d1, v1.d[1]1052; CHECK-i32-NEXT: mov v0.s[1], w91053; CHECK-i32-NEXT: mov v0.s[2], w81054; CHECK-i32-NEXT: fcvtzs w8, d11055; CHECK-i32-NEXT: mov v0.s[3], w81056; CHECK-i32-NEXT: ret1057;1058; CHECK-i64-LABEL: lrint_v4f64:1059; CHECK-i64: // %bb.0:1060; CHECK-i64-NEXT: frintx v0.2d, v0.2d1061; CHECK-i64-NEXT: frintx v1.2d, v1.2d1062; CHECK-i64-NEXT: fcvtzs v0.2d, v0.2d1063; CHECK-i64-NEXT: fcvtzs v1.2d, v1.2d1064; CHECK-i64-NEXT: ret1065 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f64(<4 x double> %x)1066 ret <4 x iXLen> %a1067}1068declare <4 x iXLen> @llvm.lrint.v4iXLen.v4f64(<4 x double>)1069 1070define <8 x iXLen> @lrint_v8f64(<8 x double> %x) nounwind {1071; CHECK-i32-LABEL: lrint_v8f64:1072; CHECK-i32: // %bb.0:1073; CHECK-i32-NEXT: frintx v2.2d, v2.2d1074; CHECK-i32-NEXT: frintx v0.2d, v0.2d1075; CHECK-i32-NEXT: frintx v3.2d, v3.2d1076; CHECK-i32-NEXT: mov d4, v0.d[1]1077; CHECK-i32-NEXT: mov d5, v2.d[1]1078; CHECK-i32-NEXT: fcvtzs w8, d01079; CHECK-i32-NEXT: fcvtzs w9, d21080; CHECK-i32-NEXT: frintx v2.2d, v1.2d1081; CHECK-i32-NEXT: fcvtzs w10, d41082; CHECK-i32-NEXT: fcvtzs w11, d51083; CHECK-i32-NEXT: fmov s0, w81084; CHECK-i32-NEXT: fmov s1, w91085; CHECK-i32-NEXT: fcvtzs w8, d21086; CHECK-i32-NEXT: mov d2, v2.d[1]1087; CHECK-i32-NEXT: fcvtzs w9, d31088; CHECK-i32-NEXT: mov d3, v3.d[1]1089; CHECK-i32-NEXT: mov v0.s[1], w101090; CHECK-i32-NEXT: mov v1.s[1], w111091; CHECK-i32-NEXT: mov v0.s[2], w81092; CHECK-i32-NEXT: fcvtzs w8, d21093; CHECK-i32-NEXT: mov v1.s[2], w91094; CHECK-i32-NEXT: fcvtzs w9, d31095; CHECK-i32-NEXT: mov v0.s[3], w81096; CHECK-i32-NEXT: mov v1.s[3], w91097; CHECK-i32-NEXT: ret1098;1099; CHECK-i64-LABEL: lrint_v8f64:1100; CHECK-i64: // %bb.0:1101; CHECK-i64-NEXT: frintx v0.2d, v0.2d1102; CHECK-i64-NEXT: frintx v1.2d, v1.2d1103; CHECK-i64-NEXT: frintx v2.2d, v2.2d1104; CHECK-i64-NEXT: frintx v3.2d, v3.2d1105; CHECK-i64-NEXT: fcvtzs v0.2d, v0.2d1106; CHECK-i64-NEXT: fcvtzs v1.2d, v1.2d1107; CHECK-i64-NEXT: fcvtzs v2.2d, v2.2d1108; CHECK-i64-NEXT: fcvtzs v3.2d, v3.2d1109; CHECK-i64-NEXT: ret1110 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f64(<8 x double> %x)1111 ret <8 x iXLen> %a1112}1113declare <8 x iXLen> @llvm.lrint.v8iXLen.v8f64(<8 x double>)1114 1115define <16 x iXLen> @lrint_v16f64(<16 x double> %x) nounwind {1116; CHECK-i32-LABEL: lrint_v16f64:1117; CHECK-i32: // %bb.0:1118; CHECK-i32-NEXT: frintx v0.2d, v0.2d1119; CHECK-i32-NEXT: frintx v2.2d, v2.2d1120; CHECK-i32-NEXT: frintx v4.2d, v4.2d1121; CHECK-i32-NEXT: frintx v6.2d, v6.2d1122; CHECK-i32-NEXT: frintx v17.2d, v1.2d1123; CHECK-i32-NEXT: frintx v5.2d, v5.2d1124; CHECK-i32-NEXT: fcvtzs w8, d01125; CHECK-i32-NEXT: mov d16, v0.d[1]1126; CHECK-i32-NEXT: fcvtzs w9, d21127; CHECK-i32-NEXT: mov d2, v2.d[1]1128; CHECK-i32-NEXT: fcvtzs w10, d41129; CHECK-i32-NEXT: mov d4, v4.d[1]1130; CHECK-i32-NEXT: fcvtzs w11, d61131; CHECK-i32-NEXT: mov d6, v6.d[1]1132; CHECK-i32-NEXT: fmov s0, w81133; CHECK-i32-NEXT: fcvtzs w8, d161134; CHECK-i32-NEXT: frintx v16.2d, v3.2d1135; CHECK-i32-NEXT: fmov s1, w91136; CHECK-i32-NEXT: fcvtzs w9, d21137; CHECK-i32-NEXT: fmov s2, w101138; CHECK-i32-NEXT: fcvtzs w10, d41139; CHECK-i32-NEXT: frintx v4.2d, v7.2d1140; CHECK-i32-NEXT: fmov s3, w111141; CHECK-i32-NEXT: fcvtzs w11, d61142; CHECK-i32-NEXT: mov d6, v17.d[1]1143; CHECK-i32-NEXT: mov v0.s[1], w81144; CHECK-i32-NEXT: fcvtzs w8, d171145; CHECK-i32-NEXT: mov d7, v16.d[1]1146; CHECK-i32-NEXT: mov v1.s[1], w91147; CHECK-i32-NEXT: fcvtzs w9, d161148; CHECK-i32-NEXT: mov v2.s[1], w101149; CHECK-i32-NEXT: fcvtzs w10, d51150; CHECK-i32-NEXT: mov d5, v5.d[1]1151; CHECK-i32-NEXT: mov v3.s[1], w111152; CHECK-i32-NEXT: fcvtzs w11, d41153; CHECK-i32-NEXT: mov d4, v4.d[1]1154; CHECK-i32-NEXT: mov v0.s[2], w81155; CHECK-i32-NEXT: fcvtzs w8, d61156; CHECK-i32-NEXT: mov v1.s[2], w91157; CHECK-i32-NEXT: fcvtzs w9, d71158; CHECK-i32-NEXT: mov v2.s[2], w101159; CHECK-i32-NEXT: fcvtzs w10, d51160; CHECK-i32-NEXT: mov v3.s[2], w111161; CHECK-i32-NEXT: fcvtzs w11, d41162; CHECK-i32-NEXT: mov v0.s[3], w81163; CHECK-i32-NEXT: mov v1.s[3], w91164; CHECK-i32-NEXT: mov v2.s[3], w101165; CHECK-i32-NEXT: mov v3.s[3], w111166; CHECK-i32-NEXT: ret1167;1168; CHECK-i64-LABEL: lrint_v16f64:1169; CHECK-i64: // %bb.0:1170; CHECK-i64-NEXT: frintx v0.2d, v0.2d1171; CHECK-i64-NEXT: frintx v1.2d, v1.2d1172; CHECK-i64-NEXT: frintx v2.2d, v2.2d1173; CHECK-i64-NEXT: frintx v3.2d, v3.2d1174; CHECK-i64-NEXT: frintx v4.2d, v4.2d1175; CHECK-i64-NEXT: frintx v5.2d, v5.2d1176; CHECK-i64-NEXT: frintx v6.2d, v6.2d1177; CHECK-i64-NEXT: frintx v7.2d, v7.2d1178; CHECK-i64-NEXT: fcvtzs v0.2d, v0.2d1179; CHECK-i64-NEXT: fcvtzs v1.2d, v1.2d1180; CHECK-i64-NEXT: fcvtzs v2.2d, v2.2d1181; CHECK-i64-NEXT: fcvtzs v3.2d, v3.2d1182; CHECK-i64-NEXT: fcvtzs v4.2d, v4.2d1183; CHECK-i64-NEXT: fcvtzs v5.2d, v5.2d1184; CHECK-i64-NEXT: fcvtzs v6.2d, v6.2d1185; CHECK-i64-NEXT: fcvtzs v7.2d, v7.2d1186; CHECK-i64-NEXT: ret1187 %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16f64(<16 x double> %x)1188 ret <16 x iXLen> %a1189}1190declare <16 x iXLen> @llvm.lrint.v16iXLen.v16f64(<16 x double>)1191 1192define <32 x iXLen> @lrint_v32f64(<32 x double> %x) nounwind {1193; CHECK-i32-LABEL: lrint_v32f64:1194; CHECK-i32: // %bb.0:1195; CHECK-i32-NEXT: frintx v17.2d, v0.2d1196; CHECK-i32-NEXT: frintx v19.2d, v2.2d1197; CHECK-i32-NEXT: frintx v0.2d, v1.2d1198; CHECK-i32-NEXT: frintx v1.2d, v4.2d1199; CHECK-i32-NEXT: frintx v2.2d, v3.2d1200; CHECK-i32-NEXT: frintx v3.2d, v5.2d1201; CHECK-i32-NEXT: ldp q16, q5, [sp]1202; CHECK-i32-NEXT: frintx v18.2d, v6.2d1203; CHECK-i32-NEXT: frintx v4.2d, v7.2d1204; CHECK-i32-NEXT: ldp q22, q6, [sp, #64]1205; CHECK-i32-NEXT: mov d20, v17.d[1]1206; CHECK-i32-NEXT: mov d21, v19.d[1]1207; CHECK-i32-NEXT: fcvtzs w8, d171208; CHECK-i32-NEXT: fcvtzs w9, d191209; CHECK-i32-NEXT: ldp q17, q7, [sp, #32]1210; CHECK-i32-NEXT: fcvtzs w12, d01211; CHECK-i32-NEXT: mov d19, v1.d[1]1212; CHECK-i32-NEXT: fcvtzs w13, d11213; CHECK-i32-NEXT: frintx v16.2d, v16.2d1214; CHECK-i32-NEXT: mov d23, v18.d[1]1215; CHECK-i32-NEXT: fcvtzs w15, d181216; CHECK-i32-NEXT: fcvtzs w10, d201217; CHECK-i32-NEXT: fcvtzs w11, d211218; CHECK-i32-NEXT: mov d21, v0.d[1]1219; CHECK-i32-NEXT: fmov s0, w81220; CHECK-i32-NEXT: fmov s1, w91221; CHECK-i32-NEXT: frintx v17.2d, v17.2d1222; CHECK-i32-NEXT: frintx v20.2d, v22.2d1223; CHECK-i32-NEXT: mov d22, v2.d[1]1224; CHECK-i32-NEXT: fcvtzs w14, d191225; CHECK-i32-NEXT: mov d18, v16.d[1]1226; CHECK-i32-NEXT: frintx v7.2d, v7.2d1227; CHECK-i32-NEXT: mov v0.s[1], w101228; CHECK-i32-NEXT: fcvtzs w10, d21229; CHECK-i32-NEXT: mov v1.s[1], w111230; CHECK-i32-NEXT: fcvtzs w8, d211231; CHECK-i32-NEXT: ldp q21, q19, [sp, #96]1232; CHECK-i32-NEXT: fmov s2, w131233; CHECK-i32-NEXT: fcvtzs w11, d231234; CHECK-i32-NEXT: mov d23, v3.d[1]1235; CHECK-i32-NEXT: fcvtzs w9, d221236; CHECK-i32-NEXT: mov d22, v17.d[1]1237; CHECK-i32-NEXT: fcvtzs w13, d181238; CHECK-i32-NEXT: mov v0.s[2], w121239; CHECK-i32-NEXT: fcvtzs w12, d161240; CHECK-i32-NEXT: mov v1.s[2], w101241; CHECK-i32-NEXT: fcvtzs w10, d31242; CHECK-i32-NEXT: fmov s3, w151243; CHECK-i32-NEXT: frintx v21.2d, v21.2d1244; CHECK-i32-NEXT: mov v2.s[1], w141245; CHECK-i32-NEXT: mov d16, v20.d[1]1246; CHECK-i32-NEXT: fcvtzs w14, d171247; CHECK-i32-NEXT: mov d17, v4.d[1]1248; CHECK-i32-NEXT: fcvtzs w15, d221249; CHECK-i32-NEXT: frintx v22.2d, v5.2d1250; CHECK-i32-NEXT: mov v3.s[1], w111251; CHECK-i32-NEXT: fcvtzs w11, d41252; CHECK-i32-NEXT: fmov s4, w121253; CHECK-i32-NEXT: fcvtzs w12, d201254; CHECK-i32-NEXT: mov d18, v21.d[1]1255; CHECK-i32-NEXT: mov d20, v7.d[1]1256; CHECK-i32-NEXT: fmov s5, w141257; CHECK-i32-NEXT: fcvtzs w14, d211258; CHECK-i32-NEXT: mov v2.s[2], w101259; CHECK-i32-NEXT: mov v4.s[1], w131260; CHECK-i32-NEXT: fcvtzs w13, d161261; CHECK-i32-NEXT: frintx v16.2d, v6.2d1262; CHECK-i32-NEXT: fcvtzs w10, d231263; CHECK-i32-NEXT: mov v3.s[2], w111264; CHECK-i32-NEXT: fcvtzs w11, d171265; CHECK-i32-NEXT: fmov s6, w121266; CHECK-i32-NEXT: mov v5.s[1], w151267; CHECK-i32-NEXT: fcvtzs w15, d181268; CHECK-i32-NEXT: frintx v18.2d, v19.2d1269; CHECK-i32-NEXT: fcvtzs w12, d221270; CHECK-i32-NEXT: mov d19, v22.d[1]1271; CHECK-i32-NEXT: mov v0.s[3], w81272; CHECK-i32-NEXT: mov v1.s[3], w91273; CHECK-i32-NEXT: mov v6.s[1], w131274; CHECK-i32-NEXT: fcvtzs w13, d71275; CHECK-i32-NEXT: fmov s7, w141276; CHECK-i32-NEXT: fcvtzs w14, d161277; CHECK-i32-NEXT: mov d16, v16.d[1]1278; CHECK-i32-NEXT: mov v2.s[3], w101279; CHECK-i32-NEXT: mov v4.s[2], w121280; CHECK-i32-NEXT: fcvtzs w12, d191281; CHECK-i32-NEXT: mov v3.s[3], w111282; CHECK-i32-NEXT: mov v7.s[1], w151283; CHECK-i32-NEXT: fcvtzs w15, d181284; CHECK-i32-NEXT: mov d18, v18.d[1]1285; CHECK-i32-NEXT: mov v5.s[2], w131286; CHECK-i32-NEXT: fcvtzs w13, d201287; CHECK-i32-NEXT: mov v6.s[2], w141288; CHECK-i32-NEXT: fcvtzs w14, d161289; CHECK-i32-NEXT: mov v4.s[3], w121290; CHECK-i32-NEXT: mov v7.s[2], w151291; CHECK-i32-NEXT: fcvtzs w15, d181292; CHECK-i32-NEXT: mov v5.s[3], w131293; CHECK-i32-NEXT: mov v6.s[3], w141294; CHECK-i32-NEXT: mov v7.s[3], w151295; CHECK-i32-NEXT: ret1296;1297; CHECK-i64-LABEL: lrint_v32f64:1298; CHECK-i64: // %bb.0:1299; CHECK-i64-NEXT: ldp q17, q16, [sp, #96]1300; CHECK-i64-NEXT: frintx v7.2d, v7.2d1301; CHECK-i64-NEXT: ldp q19, q18, [sp, #64]1302; CHECK-i64-NEXT: frintx v6.2d, v6.2d1303; CHECK-i64-NEXT: ldp q21, q20, [sp, #32]1304; CHECK-i64-NEXT: frintx v5.2d, v5.2d1305; CHECK-i64-NEXT: frintx v16.2d, v16.2d1306; CHECK-i64-NEXT: frintx v17.2d, v17.2d1307; CHECK-i64-NEXT: frintx v4.2d, v4.2d1308; CHECK-i64-NEXT: frintx v18.2d, v18.2d1309; CHECK-i64-NEXT: frintx v19.2d, v19.2d1310; CHECK-i64-NEXT: frintx v3.2d, v3.2d1311; CHECK-i64-NEXT: ldp q23, q22, [sp]1312; CHECK-i64-NEXT: frintx v20.2d, v20.2d1313; CHECK-i64-NEXT: frintx v21.2d, v21.2d1314; CHECK-i64-NEXT: frintx v2.2d, v2.2d1315; CHECK-i64-NEXT: frintx v1.2d, v1.2d1316; CHECK-i64-NEXT: fcvtzs v16.2d, v16.2d1317; CHECK-i64-NEXT: fcvtzs v17.2d, v17.2d1318; CHECK-i64-NEXT: frintx v0.2d, v0.2d1319; CHECK-i64-NEXT: frintx v22.2d, v22.2d1320; CHECK-i64-NEXT: fcvtzs v18.2d, v18.2d1321; CHECK-i64-NEXT: frintx v23.2d, v23.2d1322; CHECK-i64-NEXT: fcvtzs v19.2d, v19.2d1323; CHECK-i64-NEXT: fcvtzs v20.2d, v20.2d1324; CHECK-i64-NEXT: fcvtzs v7.2d, v7.2d1325; CHECK-i64-NEXT: fcvtzs v6.2d, v6.2d1326; CHECK-i64-NEXT: fcvtzs v5.2d, v5.2d1327; CHECK-i64-NEXT: fcvtzs v4.2d, v4.2d1328; CHECK-i64-NEXT: stp q17, q16, [x8, #224]1329; CHECK-i64-NEXT: fcvtzs v16.2d, v21.2d1330; CHECK-i64-NEXT: fcvtzs v3.2d, v3.2d1331; CHECK-i64-NEXT: fcvtzs v17.2d, v22.2d1332; CHECK-i64-NEXT: fcvtzs v2.2d, v2.2d1333; CHECK-i64-NEXT: fcvtzs v1.2d, v1.2d1334; CHECK-i64-NEXT: stp q19, q18, [x8, #192]1335; CHECK-i64-NEXT: fcvtzs v18.2d, v23.2d1336; CHECK-i64-NEXT: fcvtzs v0.2d, v0.2d1337; CHECK-i64-NEXT: stp q4, q5, [x8, #64]1338; CHECK-i64-NEXT: stp q6, q7, [x8, #96]1339; CHECK-i64-NEXT: stp q2, q3, [x8, #32]1340; CHECK-i64-NEXT: stp q0, q1, [x8]1341; CHECK-i64-NEXT: stp q18, q17, [x8, #128]1342; CHECK-i64-NEXT: stp q16, q20, [x8, #160]1343; CHECK-i64-NEXT: ret1344 %a = call <32 x iXLen> @llvm.lrint.v32iXLen.v16f64(<32 x double> %x)1345 ret <32 x iXLen> %a1346}1347declare <32 x iXLen> @llvm.lrint.v32iXLen.v32f64(<32 x double>)1348 1349define <1 x iXLen> @lrint_v1fp128(<1 x fp128> %x) nounwind {1350; CHECK-i32-LABEL: lrint_v1fp128:1351; CHECK-i32: // %bb.0:1352; CHECK-i32-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1353; CHECK-i32-NEXT: bl lrintl1354; CHECK-i32-NEXT: fmov s0, w01355; CHECK-i32-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1356; CHECK-i32-NEXT: ret1357;1358; CHECK-i64-LABEL: lrint_v1fp128:1359; CHECK-i64: // %bb.0:1360; CHECK-i64-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill1361; CHECK-i64-NEXT: bl lrintl1362; CHECK-i64-NEXT: fmov d0, x01363; CHECK-i64-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload1364; CHECK-i64-NEXT: ret1365 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1fp128(<1 x fp128> %x)1366 ret <1 x iXLen> %a1367}1368declare <1 x iXLen> @llvm.lrint.v1iXLen.v1fp128(<1 x fp128>)1369 1370define <2 x iXLen> @lrint_v2fp128(<2 x fp128> %x) nounwind {1371; CHECK-i32-LABEL: lrint_v2fp128:1372; CHECK-i32: // %bb.0:1373; CHECK-i32-NEXT: sub sp, sp, #481374; CHECK-i32-NEXT: str x30, [sp, #32] // 8-byte Spill1375; CHECK-i32-NEXT: str q1, [sp, #16] // 16-byte Spill1376; CHECK-i32-NEXT: bl lrintl1377; CHECK-i32-NEXT: fmov s0, w01378; CHECK-i32-NEXT: str q0, [sp] // 16-byte Spill1379; CHECK-i32-NEXT: ldr q0, [sp, #16] // 16-byte Reload1380; CHECK-i32-NEXT: bl lrintl1381; CHECK-i32-NEXT: ldr q0, [sp] // 16-byte Reload1382; CHECK-i32-NEXT: ldr x30, [sp, #32] // 8-byte Reload1383; CHECK-i32-NEXT: mov v0.s[1], w01384; CHECK-i32-NEXT: // kill: def $d0 killed $d0 killed $q01385; CHECK-i32-NEXT: add sp, sp, #481386; CHECK-i32-NEXT: ret1387;1388; CHECK-i64-LABEL: lrint_v2fp128:1389; CHECK-i64: // %bb.0:1390; CHECK-i64-NEXT: sub sp, sp, #481391; CHECK-i64-NEXT: str q0, [sp] // 16-byte Spill1392; CHECK-i64-NEXT: mov v0.16b, v1.16b1393; CHECK-i64-NEXT: str x30, [sp, #32] // 8-byte Spill1394; CHECK-i64-NEXT: bl lrintl1395; CHECK-i64-NEXT: fmov d0, x01396; CHECK-i64-NEXT: str q0, [sp, #16] // 16-byte Spill1397; CHECK-i64-NEXT: ldr q0, [sp] // 16-byte Reload1398; CHECK-i64-NEXT: bl lrintl1399; CHECK-i64-NEXT: fmov d0, x01400; CHECK-i64-NEXT: ldr q1, [sp, #16] // 16-byte Reload1401; CHECK-i64-NEXT: ldr x30, [sp, #32] // 8-byte Reload1402; CHECK-i64-NEXT: mov v0.d[1], v1.d[0]1403; CHECK-i64-NEXT: add sp, sp, #481404; CHECK-i64-NEXT: ret1405 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2fp128(<2 x fp128> %x)1406 ret <2 x iXLen> %a1407}1408declare <2 x iXLen> @llvm.lrint.v2iXLen.v2fp128(<2 x fp128>)1409 1410define <4 x iXLen> @lrint_v4fp128(<4 x fp128> %x) nounwind {1411; CHECK-i32-LABEL: lrint_v4fp128:1412; CHECK-i32: // %bb.0:1413; CHECK-i32-NEXT: sub sp, sp, #801414; CHECK-i32-NEXT: str x30, [sp, #64] // 8-byte Spill1415; CHECK-i32-NEXT: stp q2, q3, [sp, #16] // 32-byte Folded Spill1416; CHECK-i32-NEXT: str q1, [sp] // 16-byte Spill1417; CHECK-i32-NEXT: bl lrintl1418; CHECK-i32-NEXT: fmov s0, w01419; CHECK-i32-NEXT: str q0, [sp, #48] // 16-byte Spill1420; CHECK-i32-NEXT: ldr q0, [sp] // 16-byte Reload1421; CHECK-i32-NEXT: bl lrintl1422; CHECK-i32-NEXT: ldr q0, [sp, #48] // 16-byte Reload1423; CHECK-i32-NEXT: mov v0.s[1], w01424; CHECK-i32-NEXT: str q0, [sp, #48] // 16-byte Spill1425; CHECK-i32-NEXT: ldr q0, [sp, #16] // 16-byte Reload1426; CHECK-i32-NEXT: bl lrintl1427; CHECK-i32-NEXT: ldr q0, [sp, #48] // 16-byte Reload1428; CHECK-i32-NEXT: mov v0.s[2], w01429; CHECK-i32-NEXT: str q0, [sp, #48] // 16-byte Spill1430; CHECK-i32-NEXT: ldr q0, [sp, #32] // 16-byte Reload1431; CHECK-i32-NEXT: bl lrintl1432; CHECK-i32-NEXT: ldr q0, [sp, #48] // 16-byte Reload1433; CHECK-i32-NEXT: ldr x30, [sp, #64] // 8-byte Reload1434; CHECK-i32-NEXT: mov v0.s[3], w01435; CHECK-i32-NEXT: add sp, sp, #801436; CHECK-i32-NEXT: ret1437;1438; CHECK-i64-LABEL: lrint_v4fp128:1439; CHECK-i64: // %bb.0:1440; CHECK-i64-NEXT: sub sp, sp, #801441; CHECK-i64-NEXT: str q0, [sp] // 16-byte Spill1442; CHECK-i64-NEXT: mov v0.16b, v1.16b1443; CHECK-i64-NEXT: str x30, [sp, #64] // 8-byte Spill1444; CHECK-i64-NEXT: stp q3, q2, [sp, #32] // 32-byte Folded Spill1445; CHECK-i64-NEXT: bl lrintl1446; CHECK-i64-NEXT: fmov d0, x01447; CHECK-i64-NEXT: str q0, [sp, #16] // 16-byte Spill1448; CHECK-i64-NEXT: ldr q0, [sp] // 16-byte Reload1449; CHECK-i64-NEXT: bl lrintl1450; CHECK-i64-NEXT: fmov d0, x01451; CHECK-i64-NEXT: ldr q1, [sp, #16] // 16-byte Reload1452; CHECK-i64-NEXT: mov v0.d[1], v1.d[0]1453; CHECK-i64-NEXT: str q0, [sp, #16] // 16-byte Spill1454; CHECK-i64-NEXT: ldr q0, [sp, #32] // 16-byte Reload1455; CHECK-i64-NEXT: bl lrintl1456; CHECK-i64-NEXT: fmov d0, x01457; CHECK-i64-NEXT: str q0, [sp, #32] // 16-byte Spill1458; CHECK-i64-NEXT: ldr q0, [sp, #48] // 16-byte Reload1459; CHECK-i64-NEXT: bl lrintl1460; CHECK-i64-NEXT: fmov d1, x01461; CHECK-i64-NEXT: ldp q0, q4, [sp, #16] // 32-byte Folded Reload1462; CHECK-i64-NEXT: ldr x30, [sp, #64] // 8-byte Reload1463; CHECK-i64-NEXT: mov v1.d[1], v4.d[0]1464; CHECK-i64-NEXT: add sp, sp, #801465; CHECK-i64-NEXT: ret1466 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4fp128(<4 x fp128> %x)1467 ret <4 x iXLen> %a1468}1469declare <4 x iXLen> @llvm.lrint.v4iXLen.v4fp128(<4 x fp128>)1470 1471define <8 x iXLen> @lrint_v8fp128(<8 x fp128> %x) nounwind {1472; CHECK-i32-LABEL: lrint_v8fp128:1473; CHECK-i32: // %bb.0:1474; CHECK-i32-NEXT: sub sp, sp, #1441475; CHECK-i32-NEXT: str x30, [sp, #128] // 8-byte Spill1476; CHECK-i32-NEXT: str q4, [sp, #96] // 16-byte Spill1477; CHECK-i32-NEXT: stp q1, q2, [sp] // 32-byte Folded Spill1478; CHECK-i32-NEXT: stp q3, q5, [sp, #32] // 32-byte Folded Spill1479; CHECK-i32-NEXT: stp q6, q7, [sp, #64] // 32-byte Folded Spill1480; CHECK-i32-NEXT: bl lrintl1481; CHECK-i32-NEXT: fmov s0, w01482; CHECK-i32-NEXT: str q0, [sp, #112] // 16-byte Spill1483; CHECK-i32-NEXT: ldr q0, [sp] // 16-byte Reload1484; CHECK-i32-NEXT: bl lrintl1485; CHECK-i32-NEXT: ldr q0, [sp, #112] // 16-byte Reload1486; CHECK-i32-NEXT: mov v0.s[1], w01487; CHECK-i32-NEXT: str q0, [sp, #112] // 16-byte Spill1488; CHECK-i32-NEXT: ldr q0, [sp, #16] // 16-byte Reload1489; CHECK-i32-NEXT: bl lrintl1490; CHECK-i32-NEXT: ldr q0, [sp, #112] // 16-byte Reload1491; CHECK-i32-NEXT: mov v0.s[2], w01492; CHECK-i32-NEXT: str q0, [sp, #112] // 16-byte Spill1493; CHECK-i32-NEXT: ldr q0, [sp, #32] // 16-byte Reload1494; CHECK-i32-NEXT: bl lrintl1495; CHECK-i32-NEXT: ldr q0, [sp, #112] // 16-byte Reload1496; CHECK-i32-NEXT: mov v0.s[3], w01497; CHECK-i32-NEXT: str q0, [sp, #112] // 16-byte Spill1498; CHECK-i32-NEXT: ldr q0, [sp, #96] // 16-byte Reload1499; CHECK-i32-NEXT: bl lrintl1500; CHECK-i32-NEXT: fmov s0, w01501; CHECK-i32-NEXT: str q0, [sp, #96] // 16-byte Spill1502; CHECK-i32-NEXT: ldr q0, [sp, #48] // 16-byte Reload1503; CHECK-i32-NEXT: bl lrintl1504; CHECK-i32-NEXT: ldr q0, [sp, #96] // 16-byte Reload1505; CHECK-i32-NEXT: mov v0.s[1], w01506; CHECK-i32-NEXT: str q0, [sp, #96] // 16-byte Spill1507; CHECK-i32-NEXT: ldr q0, [sp, #64] // 16-byte Reload1508; CHECK-i32-NEXT: bl lrintl1509; CHECK-i32-NEXT: ldr q0, [sp, #96] // 16-byte Reload1510; CHECK-i32-NEXT: mov v0.s[2], w01511; CHECK-i32-NEXT: str q0, [sp, #96] // 16-byte Spill1512; CHECK-i32-NEXT: ldr q0, [sp, #80] // 16-byte Reload1513; CHECK-i32-NEXT: bl lrintl1514; CHECK-i32-NEXT: ldp q1, q0, [sp, #96] // 32-byte Folded Reload1515; CHECK-i32-NEXT: ldr x30, [sp, #128] // 8-byte Reload1516; CHECK-i32-NEXT: mov v1.s[3], w01517; CHECK-i32-NEXT: add sp, sp, #1441518; CHECK-i32-NEXT: ret1519;1520; CHECK-i64-LABEL: lrint_v8fp128:1521; CHECK-i64: // %bb.0:1522; CHECK-i64-NEXT: sub sp, sp, #1441523; CHECK-i64-NEXT: str q0, [sp] // 16-byte Spill1524; CHECK-i64-NEXT: mov v0.16b, v1.16b1525; CHECK-i64-NEXT: str x30, [sp, #128] // 8-byte Spill1526; CHECK-i64-NEXT: stp q3, q2, [sp, #16] // 32-byte Folded Spill1527; CHECK-i64-NEXT: stp q5, q4, [sp, #48] // 32-byte Folded Spill1528; CHECK-i64-NEXT: stp q7, q6, [sp, #96] // 32-byte Folded Spill1529; CHECK-i64-NEXT: bl lrintl1530; CHECK-i64-NEXT: fmov d0, x01531; CHECK-i64-NEXT: str q0, [sp, #80] // 16-byte Spill1532; CHECK-i64-NEXT: ldr q0, [sp] // 16-byte Reload1533; CHECK-i64-NEXT: bl lrintl1534; CHECK-i64-NEXT: fmov d0, x01535; CHECK-i64-NEXT: ldr q1, [sp, #80] // 16-byte Reload1536; CHECK-i64-NEXT: mov v0.d[1], v1.d[0]1537; CHECK-i64-NEXT: str q0, [sp, #80] // 16-byte Spill1538; CHECK-i64-NEXT: ldr q0, [sp, #16] // 16-byte Reload1539; CHECK-i64-NEXT: bl lrintl1540; CHECK-i64-NEXT: fmov d0, x01541; CHECK-i64-NEXT: str q0, [sp, #16] // 16-byte Spill1542; CHECK-i64-NEXT: ldr q0, [sp, #32] // 16-byte Reload1543; CHECK-i64-NEXT: bl lrintl1544; CHECK-i64-NEXT: fmov d0, x01545; CHECK-i64-NEXT: ldr q1, [sp, #16] // 16-byte Reload1546; CHECK-i64-NEXT: mov v0.d[1], v1.d[0]1547; CHECK-i64-NEXT: str q0, [sp, #32] // 16-byte Spill1548; CHECK-i64-NEXT: ldr q0, [sp, #48] // 16-byte Reload1549; CHECK-i64-NEXT: bl lrintl1550; CHECK-i64-NEXT: fmov d0, x01551; CHECK-i64-NEXT: str q0, [sp, #48] // 16-byte Spill1552; CHECK-i64-NEXT: ldr q0, [sp, #64] // 16-byte Reload1553; CHECK-i64-NEXT: bl lrintl1554; CHECK-i64-NEXT: fmov d0, x01555; CHECK-i64-NEXT: ldr q1, [sp, #48] // 16-byte Reload1556; CHECK-i64-NEXT: mov v0.d[1], v1.d[0]1557; CHECK-i64-NEXT: str q0, [sp, #64] // 16-byte Spill1558; CHECK-i64-NEXT: ldr q0, [sp, #96] // 16-byte Reload1559; CHECK-i64-NEXT: bl lrintl1560; CHECK-i64-NEXT: fmov d0, x01561; CHECK-i64-NEXT: str q0, [sp, #96] // 16-byte Spill1562; CHECK-i64-NEXT: ldr q0, [sp, #112] // 16-byte Reload1563; CHECK-i64-NEXT: bl lrintl1564; CHECK-i64-NEXT: fmov d3, x01565; CHECK-i64-NEXT: ldp q0, q1, [sp, #80] // 32-byte Folded Reload1566; CHECK-i64-NEXT: ldr q2, [sp, #64] // 16-byte Reload1567; CHECK-i64-NEXT: ldr x30, [sp, #128] // 8-byte Reload1568; CHECK-i64-NEXT: mov v3.d[1], v1.d[0]1569; CHECK-i64-NEXT: ldr q1, [sp, #32] // 16-byte Reload1570; CHECK-i64-NEXT: add sp, sp, #1441571; CHECK-i64-NEXT: ret1572 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8fp128(<8 x fp128> %x)1573 ret <8 x iXLen> %a1574}1575declare <8 x iXLen> @llvm.lrint.v8iXLen.v8fp128(<8 x fp128>)1576 1577define <16 x iXLen> @lrint_v16fp128(<16 x fp128> %x) nounwind {1578; CHECK-i32-LABEL: lrint_v16fp128:1579; CHECK-i32: // %bb.0:1580; CHECK-i32-NEXT: sub sp, sp, #2721581; CHECK-i32-NEXT: stp q1, q2, [sp] // 32-byte Folded Spill1582; CHECK-i32-NEXT: ldr q1, [sp, #384]1583; CHECK-i32-NEXT: stp x29, x30, [sp, #256] // 16-byte Folded Spill1584; CHECK-i32-NEXT: str q1, [sp, #176] // 16-byte Spill1585; CHECK-i32-NEXT: ldr q1, [sp, #368]1586; CHECK-i32-NEXT: stp q3, q5, [sp, #32] // 32-byte Folded Spill1587; CHECK-i32-NEXT: str q1, [sp, #160] // 16-byte Spill1588; CHECK-i32-NEXT: ldr q1, [sp, #352]1589; CHECK-i32-NEXT: stp q7, q4, [sp, #208] // 32-byte Folded Spill1590; CHECK-i32-NEXT: str q1, [sp, #144] // 16-byte Spill1591; CHECK-i32-NEXT: ldr q1, [sp, #336]1592; CHECK-i32-NEXT: str q1, [sp, #192] // 16-byte Spill1593; CHECK-i32-NEXT: ldr q1, [sp, #320]1594; CHECK-i32-NEXT: str q1, [sp, #128] // 16-byte Spill1595; CHECK-i32-NEXT: ldr q1, [sp, #304]1596; CHECK-i32-NEXT: str q1, [sp, #112] // 16-byte Spill1597; CHECK-i32-NEXT: ldr q1, [sp, #288]1598; CHECK-i32-NEXT: stp q6, q1, [sp, #80] // 32-byte Folded Spill1599; CHECK-i32-NEXT: ldr q1, [sp, #272]1600; CHECK-i32-NEXT: str q1, [sp, #64] // 16-byte Spill1601; CHECK-i32-NEXT: bl lrintl1602; CHECK-i32-NEXT: fmov s0, w01603; CHECK-i32-NEXT: str q0, [sp, #240] // 16-byte Spill1604; CHECK-i32-NEXT: ldr q0, [sp] // 16-byte Reload1605; CHECK-i32-NEXT: bl lrintl1606; CHECK-i32-NEXT: ldr q0, [sp, #240] // 16-byte Reload1607; CHECK-i32-NEXT: mov v0.s[1], w01608; CHECK-i32-NEXT: str q0, [sp, #240] // 16-byte Spill1609; CHECK-i32-NEXT: ldr q0, [sp, #16] // 16-byte Reload1610; CHECK-i32-NEXT: bl lrintl1611; CHECK-i32-NEXT: ldr q0, [sp, #240] // 16-byte Reload1612; CHECK-i32-NEXT: mov v0.s[2], w01613; CHECK-i32-NEXT: str q0, [sp, #240] // 16-byte Spill1614; CHECK-i32-NEXT: ldr q0, [sp, #32] // 16-byte Reload1615; CHECK-i32-NEXT: bl lrintl1616; CHECK-i32-NEXT: ldr q0, [sp, #240] // 16-byte Reload1617; CHECK-i32-NEXT: mov v0.s[3], w01618; CHECK-i32-NEXT: str q0, [sp, #240] // 16-byte Spill1619; CHECK-i32-NEXT: ldr q0, [sp, #224] // 16-byte Reload1620; CHECK-i32-NEXT: bl lrintl1621; CHECK-i32-NEXT: fmov s0, w01622; CHECK-i32-NEXT: str q0, [sp, #224] // 16-byte Spill1623; CHECK-i32-NEXT: ldr q0, [sp, #48] // 16-byte Reload1624; CHECK-i32-NEXT: bl lrintl1625; CHECK-i32-NEXT: ldr q0, [sp, #224] // 16-byte Reload1626; CHECK-i32-NEXT: mov v0.s[1], w01627; CHECK-i32-NEXT: str q0, [sp, #224] // 16-byte Spill1628; CHECK-i32-NEXT: ldr q0, [sp, #80] // 16-byte Reload1629; CHECK-i32-NEXT: bl lrintl1630; CHECK-i32-NEXT: ldr q0, [sp, #224] // 16-byte Reload1631; CHECK-i32-NEXT: mov v0.s[2], w01632; CHECK-i32-NEXT: str q0, [sp, #224] // 16-byte Spill1633; CHECK-i32-NEXT: ldr q0, [sp, #208] // 16-byte Reload1634; CHECK-i32-NEXT: bl lrintl1635; CHECK-i32-NEXT: ldr q0, [sp, #224] // 16-byte Reload1636; CHECK-i32-NEXT: mov v0.s[3], w01637; CHECK-i32-NEXT: str q0, [sp, #224] // 16-byte Spill1638; CHECK-i32-NEXT: ldr q0, [sp, #64] // 16-byte Reload1639; CHECK-i32-NEXT: bl lrintl1640; CHECK-i32-NEXT: fmov s0, w01641; CHECK-i32-NEXT: str q0, [sp, #208] // 16-byte Spill1642; CHECK-i32-NEXT: ldr q0, [sp, #96] // 16-byte Reload1643; CHECK-i32-NEXT: bl lrintl1644; CHECK-i32-NEXT: ldr q0, [sp, #208] // 16-byte Reload1645; CHECK-i32-NEXT: mov v0.s[1], w01646; CHECK-i32-NEXT: str q0, [sp, #208] // 16-byte Spill1647; CHECK-i32-NEXT: ldr q0, [sp, #112] // 16-byte Reload1648; CHECK-i32-NEXT: bl lrintl1649; CHECK-i32-NEXT: ldr q0, [sp, #208] // 16-byte Reload1650; CHECK-i32-NEXT: mov v0.s[2], w01651; CHECK-i32-NEXT: str q0, [sp, #208] // 16-byte Spill1652; CHECK-i32-NEXT: ldr q0, [sp, #128] // 16-byte Reload1653; CHECK-i32-NEXT: bl lrintl1654; CHECK-i32-NEXT: ldr q0, [sp, #208] // 16-byte Reload1655; CHECK-i32-NEXT: mov v0.s[3], w01656; CHECK-i32-NEXT: str q0, [sp, #208] // 16-byte Spill1657; CHECK-i32-NEXT: ldr q0, [sp, #192] // 16-byte Reload1658; CHECK-i32-NEXT: bl lrintl1659; CHECK-i32-NEXT: fmov s0, w01660; CHECK-i32-NEXT: str q0, [sp, #192] // 16-byte Spill1661; CHECK-i32-NEXT: ldr q0, [sp, #144] // 16-byte Reload1662; CHECK-i32-NEXT: bl lrintl1663; CHECK-i32-NEXT: ldr q0, [sp, #192] // 16-byte Reload1664; CHECK-i32-NEXT: mov v0.s[1], w01665; CHECK-i32-NEXT: str q0, [sp, #192] // 16-byte Spill1666; CHECK-i32-NEXT: ldr q0, [sp, #160] // 16-byte Reload1667; CHECK-i32-NEXT: bl lrintl1668; CHECK-i32-NEXT: ldr q0, [sp, #192] // 16-byte Reload1669; CHECK-i32-NEXT: mov v0.s[2], w01670; CHECK-i32-NEXT: str q0, [sp, #192] // 16-byte Spill1671; CHECK-i32-NEXT: ldr q0, [sp, #176] // 16-byte Reload1672; CHECK-i32-NEXT: bl lrintl1673; CHECK-i32-NEXT: ldp q3, q2, [sp, #192] // 32-byte Folded Reload1674; CHECK-i32-NEXT: ldp q1, q0, [sp, #224] // 32-byte Folded Reload1675; CHECK-i32-NEXT: ldp x29, x30, [sp, #256] // 16-byte Folded Reload1676; CHECK-i32-NEXT: mov v3.s[3], w01677; CHECK-i32-NEXT: add sp, sp, #2721678; CHECK-i32-NEXT: ret1679;1680; CHECK-i64-LABEL: lrint_v16fp128:1681; CHECK-i64: // %bb.0:1682; CHECK-i64-NEXT: sub sp, sp, #2721683; CHECK-i64-NEXT: str q2, [sp, #160] // 16-byte Spill1684; CHECK-i64-NEXT: ldr q2, [sp, #368]1685; CHECK-i64-NEXT: stp q0, q3, [sp] // 32-byte Folded Spill1686; CHECK-i64-NEXT: mov v0.16b, v1.16b1687; CHECK-i64-NEXT: str q2, [sp, #240] // 16-byte Spill1688; CHECK-i64-NEXT: ldr q2, [sp, #384]1689; CHECK-i64-NEXT: stp x29, x30, [sp, #256] // 16-byte Folded Spill1690; CHECK-i64-NEXT: str q2, [sp, #224] // 16-byte Spill1691; CHECK-i64-NEXT: ldr q2, [sp, #336]1692; CHECK-i64-NEXT: stp q5, q7, [sp, #32] // 32-byte Folded Spill1693; CHECK-i64-NEXT: str q2, [sp, #192] // 16-byte Spill1694; CHECK-i64-NEXT: ldr q2, [sp, #352]1695; CHECK-i64-NEXT: str q2, [sp, #176] // 16-byte Spill1696; CHECK-i64-NEXT: ldr q2, [sp, #304]1697; CHECK-i64-NEXT: str q2, [sp, #144] // 16-byte Spill1698; CHECK-i64-NEXT: ldr q2, [sp, #320]1699; CHECK-i64-NEXT: stp q4, q2, [sp, #112] // 32-byte Folded Spill1700; CHECK-i64-NEXT: ldr q2, [sp, #272]1701; CHECK-i64-NEXT: stp q6, q2, [sp, #80] // 32-byte Folded Spill1702; CHECK-i64-NEXT: ldr q2, [sp, #288]1703; CHECK-i64-NEXT: str q2, [sp, #64] // 16-byte Spill1704; CHECK-i64-NEXT: bl lrintl1705; CHECK-i64-NEXT: fmov d0, x01706; CHECK-i64-NEXT: str q0, [sp, #208] // 16-byte Spill1707; CHECK-i64-NEXT: ldr q0, [sp] // 16-byte Reload1708; CHECK-i64-NEXT: bl lrintl1709; CHECK-i64-NEXT: fmov d0, x01710; CHECK-i64-NEXT: ldr q1, [sp, #208] // 16-byte Reload1711; CHECK-i64-NEXT: mov v0.d[1], v1.d[0]1712; CHECK-i64-NEXT: str q0, [sp, #208] // 16-byte Spill1713; CHECK-i64-NEXT: ldr q0, [sp, #16] // 16-byte Reload1714; CHECK-i64-NEXT: bl lrintl1715; CHECK-i64-NEXT: fmov d0, x01716; CHECK-i64-NEXT: str q0, [sp, #16] // 16-byte Spill1717; CHECK-i64-NEXT: ldr q0, [sp, #160] // 16-byte Reload1718; CHECK-i64-NEXT: bl lrintl1719; CHECK-i64-NEXT: fmov d0, x01720; CHECK-i64-NEXT: ldr q1, [sp, #16] // 16-byte Reload1721; CHECK-i64-NEXT: mov v0.d[1], v1.d[0]1722; CHECK-i64-NEXT: str q0, [sp, #160] // 16-byte Spill1723; CHECK-i64-NEXT: ldr q0, [sp, #32] // 16-byte Reload1724; CHECK-i64-NEXT: bl lrintl1725; CHECK-i64-NEXT: fmov d0, x01726; CHECK-i64-NEXT: str q0, [sp, #32] // 16-byte Spill1727; CHECK-i64-NEXT: ldr q0, [sp, #112] // 16-byte Reload1728; CHECK-i64-NEXT: bl lrintl1729; CHECK-i64-NEXT: fmov d0, x01730; CHECK-i64-NEXT: ldr q1, [sp, #32] // 16-byte Reload1731; CHECK-i64-NEXT: mov v0.d[1], v1.d[0]1732; CHECK-i64-NEXT: str q0, [sp, #112] // 16-byte Spill1733; CHECK-i64-NEXT: ldr q0, [sp, #48] // 16-byte Reload1734; CHECK-i64-NEXT: bl lrintl1735; CHECK-i64-NEXT: fmov d0, x01736; CHECK-i64-NEXT: str q0, [sp, #48] // 16-byte Spill1737; CHECK-i64-NEXT: ldr q0, [sp, #80] // 16-byte Reload1738; CHECK-i64-NEXT: bl lrintl1739; CHECK-i64-NEXT: fmov d0, x01740; CHECK-i64-NEXT: ldr q1, [sp, #48] // 16-byte Reload1741; CHECK-i64-NEXT: mov v0.d[1], v1.d[0]1742; CHECK-i64-NEXT: str q0, [sp, #80] // 16-byte Spill1743; CHECK-i64-NEXT: ldr q0, [sp, #64] // 16-byte Reload1744; CHECK-i64-NEXT: bl lrintl1745; CHECK-i64-NEXT: fmov d0, x01746; CHECK-i64-NEXT: str q0, [sp, #64] // 16-byte Spill1747; CHECK-i64-NEXT: ldr q0, [sp, #96] // 16-byte Reload1748; CHECK-i64-NEXT: bl lrintl1749; CHECK-i64-NEXT: fmov d0, x01750; CHECK-i64-NEXT: ldr q1, [sp, #64] // 16-byte Reload1751; CHECK-i64-NEXT: mov v0.d[1], v1.d[0]1752; CHECK-i64-NEXT: str q0, [sp, #96] // 16-byte Spill1753; CHECK-i64-NEXT: ldr q0, [sp, #128] // 16-byte Reload1754; CHECK-i64-NEXT: bl lrintl1755; CHECK-i64-NEXT: fmov d0, x01756; CHECK-i64-NEXT: str q0, [sp, #128] // 16-byte Spill1757; CHECK-i64-NEXT: ldr q0, [sp, #144] // 16-byte Reload1758; CHECK-i64-NEXT: bl lrintl1759; CHECK-i64-NEXT: fmov d0, x01760; CHECK-i64-NEXT: ldr q1, [sp, #128] // 16-byte Reload1761; CHECK-i64-NEXT: mov v0.d[1], v1.d[0]1762; CHECK-i64-NEXT: str q0, [sp, #144] // 16-byte Spill1763; CHECK-i64-NEXT: ldr q0, [sp, #176] // 16-byte Reload1764; CHECK-i64-NEXT: bl lrintl1765; CHECK-i64-NEXT: fmov d0, x01766; CHECK-i64-NEXT: str q0, [sp, #176] // 16-byte Spill1767; CHECK-i64-NEXT: ldr q0, [sp, #192] // 16-byte Reload1768; CHECK-i64-NEXT: bl lrintl1769; CHECK-i64-NEXT: fmov d0, x01770; CHECK-i64-NEXT: ldr q1, [sp, #176] // 16-byte Reload1771; CHECK-i64-NEXT: mov v0.d[1], v1.d[0]1772; CHECK-i64-NEXT: str q0, [sp, #192] // 16-byte Spill1773; CHECK-i64-NEXT: ldr q0, [sp, #224] // 16-byte Reload1774; CHECK-i64-NEXT: bl lrintl1775; CHECK-i64-NEXT: fmov d0, x01776; CHECK-i64-NEXT: str q0, [sp, #224] // 16-byte Spill1777; CHECK-i64-NEXT: ldr q0, [sp, #240] // 16-byte Reload1778; CHECK-i64-NEXT: bl lrintl1779; CHECK-i64-NEXT: fmov d7, x01780; CHECK-i64-NEXT: ldp q0, q1, [sp, #208] // 32-byte Folded Reload1781; CHECK-i64-NEXT: ldp q4, q2, [sp, #96] // 32-byte Folded Reload1782; CHECK-i64-NEXT: ldr q3, [sp, #80] // 16-byte Reload1783; CHECK-i64-NEXT: ldp x29, x30, [sp, #256] // 16-byte Folded Reload1784; CHECK-i64-NEXT: ldr q6, [sp, #192] // 16-byte Reload1785; CHECK-i64-NEXT: mov v7.d[1], v1.d[0]1786; CHECK-i64-NEXT: ldp q5, q1, [sp, #144] // 32-byte Folded Reload1787; CHECK-i64-NEXT: add sp, sp, #2721788; CHECK-i64-NEXT: ret1789 %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16fp128(<16 x fp128> %x)1790 ret <16 x iXLen> %a1791}1792declare <16 x iXLen> @llvm.lrint.v16iXLen.v16fp128(<16 x fp128>)1793 1794;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1795; CHECK-i32-GI: {{.*}}1796