320 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s --mattr=+sve -o - | FileCheck %s3 4target triple = "aarch64"5 6%"class.std::complex" = type { { double, double } }7 8; Zero initialized reduction. The IR is generated with predicated tail folding (-prefer-predicate-over-epilogue=predicate-dont-vectorize)9;10; complex<double> x = 0.0 + 0.0i;11; for (int i = 0; i < 100; ++i)12; x += a[i] * b[i];13;14define %"class.std::complex" @complex_mul_v2f64(ptr %a, ptr %b) {15; CHECK-LABEL: complex_mul_v2f64:16; CHECK: // %bb.0: // %entry17; CHECK-NEXT: movi v0.2d, #000000000000000018; CHECK-NEXT: movi v1.2d, #000000000000000019; CHECK-NEXT: mov w8, #100 // =0x6420; CHECK-NEXT: whilelo p1.d, xzr, x821; CHECK-NEXT: cntd x922; CHECK-NEXT: rdvl x10, #223; CHECK-NEXT: ptrue p0.d24; CHECK-NEXT: mov x11, x925; CHECK-NEXT: .LBB0_1: // %vector.body26; CHECK-NEXT: // =>This Inner Loop Header: Depth=127; CHECK-NEXT: zip2 p2.d, p1.d, p1.d28; CHECK-NEXT: mov z6.d, z0.d29; CHECK-NEXT: mov z7.d, z1.d30; CHECK-NEXT: zip1 p1.d, p1.d, p1.d31; CHECK-NEXT: ld1d { z2.d }, p2/z, [x0, #1, mul vl]32; CHECK-NEXT: ld1d { z4.d }, p2/z, [x1, #1, mul vl]33; CHECK-NEXT: ld1d { z3.d }, p1/z, [x0]34; CHECK-NEXT: ld1d { z5.d }, p1/z, [x1]35; CHECK-NEXT: add x1, x1, x1036; CHECK-NEXT: add x0, x0, x1037; CHECK-NEXT: fcmla z7.d, p0/m, z4.d, z2.d, #038; CHECK-NEXT: fcmla z6.d, p0/m, z5.d, z3.d, #039; CHECK-NEXT: fcmla z7.d, p0/m, z4.d, z2.d, #9040; CHECK-NEXT: fcmla z6.d, p0/m, z5.d, z3.d, #9041; CHECK-NEXT: mov z1.d, p2/m, z7.d42; CHECK-NEXT: mov z0.d, p1/m, z6.d43; CHECK-NEXT: whilelo p1.d, x11, x844; CHECK-NEXT: add x11, x11, x945; CHECK-NEXT: b.mi .LBB0_146; CHECK-NEXT: // %bb.2: // %exit.block47; CHECK-NEXT: uzp1 z2.d, z0.d, z1.d48; CHECK-NEXT: uzp2 z1.d, z0.d, z1.d49; CHECK-NEXT: faddv d0, p0, z2.d50; CHECK-NEXT: faddv d1, p0, z1.d51; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z052; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z153; CHECK-NEXT: ret54entry:55 %active.lane.mask.entry = tail call <vscale x 2 x i1> @llvm.get.active.lane.mask.nxv2i1.i64(i64 0, i64 100)56 %0 = tail call i64 @llvm.vscale.i64()57 %1 = shl i64 %0, 158 %2 = shl nuw nsw i64 %0, 559 br label %vector.body60 61vector.body: ; preds = %vector.body, %entry62 %lsr.iv35 = phi i64 [ %lsr.iv.next36, %vector.body ], [ %1, %entry ]63 %lsr.iv = phi i64 [ %lsr.iv.next, %vector.body ], [ 0, %entry ]64 %active.lane.mask = phi <vscale x 2 x i1> [ %active.lane.mask.entry, %entry ], [ %active.lane.mask.next, %vector.body ]65 %vec.phi = phi <vscale x 2 x double> [ zeroinitializer, %entry ], [ %15, %vector.body ]66 %vec.phi27 = phi <vscale x 2 x double> [ zeroinitializer, %entry ], [ %16, %vector.body ]67 %scevgep = getelementptr i8, ptr %a, i64 %lsr.iv68 %scevgep34 = getelementptr i8, ptr %b, i64 %lsr.iv69 %interleaved.mask = tail call <vscale x 4 x i1> @llvm.vector.interleave2.nxv4i1(<vscale x 2 x i1> %active.lane.mask, <vscale x 2 x i1> %active.lane.mask)70 %wide.masked.vec = tail call <vscale x 4 x double> @llvm.masked.load.nxv4f64.p0(ptr %scevgep, i32 8, <vscale x 4 x i1> %interleaved.mask, <vscale x 4 x double> poison)71 %strided.vec = tail call { <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave2.nxv4f64(<vscale x 4 x double> %wide.masked.vec)72 %3 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 073 %4 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 174 %interleaved.mask28 = tail call <vscale x 4 x i1> @llvm.vector.interleave2.nxv4i1(<vscale x 2 x i1> %active.lane.mask, <vscale x 2 x i1> %active.lane.mask)75 %wide.masked.vec29 = tail call <vscale x 4 x double> @llvm.masked.load.nxv4f64.p0(ptr %scevgep34, i32 8, <vscale x 4 x i1> %interleaved.mask28, <vscale x 4 x double> poison)76 %strided.vec30 = tail call { <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave2.nxv4f64(<vscale x 4 x double> %wide.masked.vec29)77 %5 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec30, 078 %6 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec30, 179 %7 = fmul fast <vscale x 2 x double> %6, %380 %8 = fmul fast <vscale x 2 x double> %5, %481 %9 = fmul fast <vscale x 2 x double> %5, %382 %10 = fadd fast <vscale x 2 x double> %9, %vec.phi2783 %11 = fmul fast <vscale x 2 x double> %6, %484 %12 = fsub fast <vscale x 2 x double> %10, %1185 %13 = fadd fast <vscale x 2 x double> %8, %vec.phi86 %14 = fadd fast <vscale x 2 x double> %13, %787 %15 = select fast <vscale x 2 x i1> %active.lane.mask, <vscale x 2 x double> %14, <vscale x 2 x double> %vec.phi88 %16 = select fast <vscale x 2 x i1> %active.lane.mask, <vscale x 2 x double> %12, <vscale x 2 x double> %vec.phi2789 %active.lane.mask.next = tail call <vscale x 2 x i1> @llvm.get.active.lane.mask.nxv2i1.i64(i64 %lsr.iv35, i64 100)90 %17 = extractelement <vscale x 2 x i1> %active.lane.mask.next, i64 091 %lsr.iv.next = add i64 %lsr.iv, %292 %lsr.iv.next36 = add i64 %lsr.iv35, %193 br i1 %17, label %vector.body, label %exit.block94 95exit.block: ; preds = %vector.body96 %18 = tail call fast double @llvm.vector.reduce.fadd.nxv2f64(double -0.000000e+00, <vscale x 2 x double> %16)97 %19 = tail call fast double @llvm.vector.reduce.fadd.nxv2f64(double -0.000000e+00, <vscale x 2 x double> %15)98 %.fca.0.0.insert = insertvalue %"class.std::complex" poison, double %18, 0, 099 %.fca.0.1.insert = insertvalue %"class.std::complex" %.fca.0.0.insert, double %19, 0, 1100 ret %"class.std::complex" %.fca.0.1.insert101}102 103; Zero initialized reduction with conditional block. The IR is generated with scalar tail folding (-prefer-predicate-over-epilogue=scalar-epilogue)104;105; complex<double> x = 0.0 + 0.0i;106; for (int i = 0; i < 100; ++i)107; if (cond[i])108; x += a[i] * b[i];109;110define %"class.std::complex" @complex_mul_predicated_v2f64(ptr %a, ptr %b, ptr %cond) {111; CHECK-LABEL: complex_mul_predicated_v2f64:112; CHECK: // %bb.0: // %entry113; CHECK-NEXT: movi v0.2d, #0000000000000000114; CHECK-NEXT: movi v1.2d, #0000000000000000115; CHECK-NEXT: cntd x9116; CHECK-NEXT: neg x10, x9117; CHECK-NEXT: mov w11, #100 // =0x64118; CHECK-NEXT: ptrue p0.d119; CHECK-NEXT: mov x8, xzr120; CHECK-NEXT: and x10, x10, x11121; CHECK-NEXT: rdvl x11, #2122; CHECK-NEXT: .LBB1_1: // %vector.body123; CHECK-NEXT: // =>This Inner Loop Header: Depth=1124; CHECK-NEXT: ld1w { z2.d }, p0/z, [x2, x8, lsl #2]125; CHECK-NEXT: mov z6.d, z0.d126; CHECK-NEXT: mov z7.d, z1.d127; CHECK-NEXT: add x8, x8, x9128; CHECK-NEXT: cmpne p1.d, p0/z, z2.d, #0129; CHECK-NEXT: cmp x10, x8130; CHECK-NEXT: zip2 p2.d, p1.d, p1.d131; CHECK-NEXT: zip1 p1.d, p1.d, p1.d132; CHECK-NEXT: ld1d { z2.d }, p2/z, [x0, #1, mul vl]133; CHECK-NEXT: ld1d { z4.d }, p2/z, [x1, #1, mul vl]134; CHECK-NEXT: ld1d { z3.d }, p1/z, [x0]135; CHECK-NEXT: ld1d { z5.d }, p1/z, [x1]136; CHECK-NEXT: add x1, x1, x11137; CHECK-NEXT: add x0, x0, x11138; CHECK-NEXT: fcmla z7.d, p0/m, z4.d, z2.d, #0139; CHECK-NEXT: fcmla z6.d, p0/m, z5.d, z3.d, #0140; CHECK-NEXT: fcmla z7.d, p0/m, z4.d, z2.d, #90141; CHECK-NEXT: fcmla z6.d, p0/m, z5.d, z3.d, #90142; CHECK-NEXT: mov z1.d, p2/m, z7.d143; CHECK-NEXT: mov z0.d, p1/m, z6.d144; CHECK-NEXT: b.ne .LBB1_1145; CHECK-NEXT: // %bb.2: // %exit.block146; CHECK-NEXT: uzp1 z2.d, z0.d, z1.d147; CHECK-NEXT: uzp2 z1.d, z0.d, z1.d148; CHECK-NEXT: faddv d0, p0, z2.d149; CHECK-NEXT: faddv d1, p0, z1.d150; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0151; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z1152; CHECK-NEXT: ret153entry:154 %0 = tail call i64 @llvm.vscale.i64()155 %1 = shl nuw nsw i64 %0, 1156 %n.mod.vf = urem i64 100, %1157 %n.vec = sub i64 100, %n.mod.vf158 %2 = shl nuw nsw i64 %0, 5159 br label %vector.body160 161vector.body: ; preds = %vector.body, %entry162 %lsr.iv48 = phi i64 [ %lsr.iv.next, %vector.body ], [ 0, %entry ]163 %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]164 %vec.phi = phi <vscale x 2 x double> [ zeroinitializer, %entry ], [ %predphi34, %vector.body ]165 %vec.phi30 = phi <vscale x 2 x double> [ zeroinitializer, %entry ], [ %predphi, %vector.body ]166 %3 = shl i64 %index, 2167 %scevgep47 = getelementptr i8, ptr %cond, i64 %3168 %wide.load = load <vscale x 2 x i32>, ptr %scevgep47, align 4169 %4 = icmp ne <vscale x 2 x i32> %wide.load, zeroinitializer170 %scevgep49 = getelementptr i8, ptr %a, i64 %lsr.iv48171 %scevgep50 = getelementptr i8, ptr %b, i64 %lsr.iv48172 %interleaved.mask = tail call <vscale x 4 x i1> @llvm.vector.interleave2.nxv4i1(<vscale x 2 x i1> %4, <vscale x 2 x i1> %4)173 %wide.masked.vec = tail call <vscale x 4 x double> @llvm.masked.load.nxv4f64.p0(ptr %scevgep49, i32 8, <vscale x 4 x i1> %interleaved.mask, <vscale x 4 x double> poison)174 %strided.vec = tail call { <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave2.nxv4f64(<vscale x 4 x double> %wide.masked.vec)175 %5 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 0176 %6 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 1177 %wide.masked.vec32 = tail call <vscale x 4 x double> @llvm.masked.load.nxv4f64.p0(ptr %scevgep50, i32 8, <vscale x 4 x i1> %interleaved.mask, <vscale x 4 x double> poison)178 %strided.vec33 = tail call { <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave2.nxv4f64(<vscale x 4 x double> %wide.masked.vec32)179 %7 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec33, 0180 %8 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec33, 1181 %9 = fmul fast <vscale x 2 x double> %8, %5182 %10 = fmul fast <vscale x 2 x double> %7, %6183 %11 = fmul fast <vscale x 2 x double> %7, %5184 %12 = fadd fast <vscale x 2 x double> %11, %vec.phi30185 %13 = fmul fast <vscale x 2 x double> %8, %6186 %14 = fsub fast <vscale x 2 x double> %12, %13187 %15 = fadd fast <vscale x 2 x double> %10, %vec.phi188 %16 = fadd fast <vscale x 2 x double> %15, %9189 %predphi = select <vscale x 2 x i1> %4, <vscale x 2 x double> %14, <vscale x 2 x double> %vec.phi30190 %predphi34 = select <vscale x 2 x i1> %4, <vscale x 2 x double> %16, <vscale x 2 x double> %vec.phi191 %index.next = add nuw i64 %index, %1192 %lsr.iv.next = add i64 %lsr.iv48, %2193 %17 = icmp eq i64 %n.vec, %index.next194 br i1 %17, label %exit.block, label %vector.body195 196exit.block: ; preds = %vector.body197 %18 = tail call fast double @llvm.vector.reduce.fadd.nxv2f64(double -0.000000e+00, <vscale x 2 x double> %predphi)198 %19 = tail call fast double @llvm.vector.reduce.fadd.nxv2f64(double -0.000000e+00, <vscale x 2 x double> %predphi34)199 %.fca.0.0.insert = insertvalue %"class.std::complex" poison, double %18, 0, 0200 %.fca.0.1.insert = insertvalue %"class.std::complex" %.fca.0.0.insert, double %19, 0, 1201 ret %"class.std::complex" %.fca.0.1.insert202}203 204; Zero initialized reduction with conditional block. The IR is generated with scalar tail folding (-predicate-over-epilogue=predicate-dont-vectorize)205;206; complex<double> x = 0.0 + 0.0i;207; for (int i = 0; i < 100; ++i)208; if (cond[i])209; x += a[i] * b[i];210;211define %"class.std::complex" @complex_mul_predicated_x2_v2f64(ptr %a, ptr %b, ptr %cond) {212; CHECK-LABEL: complex_mul_predicated_x2_v2f64:213; CHECK: // %bb.0: // %entry214; CHECK-NEXT: movi v0.2d, #0000000000000000215; CHECK-NEXT: movi v1.2d, #0000000000000000216; CHECK-NEXT: mov w8, #100 // =0x64217; CHECK-NEXT: whilelo p1.d, xzr, x8218; CHECK-NEXT: cntd x9219; CHECK-NEXT: rdvl x10, #2220; CHECK-NEXT: ptrue p0.d221; CHECK-NEXT: cnth x11222; CHECK-NEXT: mov x12, x9223; CHECK-NEXT: .LBB2_1: // %vector.body224; CHECK-NEXT: // =>This Inner Loop Header: Depth=1225; CHECK-NEXT: ld1w { z2.d }, p1/z, [x2]226; CHECK-NEXT: mov z6.d, z0.d227; CHECK-NEXT: mov z7.d, z1.d228; CHECK-NEXT: add x2, x2, x11229; CHECK-NEXT: and z2.d, z2.d, #0xffffffff230; CHECK-NEXT: cmpne p1.d, p1/z, z2.d, #0231; CHECK-NEXT: zip2 p2.d, p1.d, p1.d232; CHECK-NEXT: zip1 p1.d, p1.d, p1.d233; CHECK-NEXT: ld1d { z2.d }, p2/z, [x0, #1, mul vl]234; CHECK-NEXT: ld1d { z4.d }, p2/z, [x1, #1, mul vl]235; CHECK-NEXT: ld1d { z3.d }, p1/z, [x0]236; CHECK-NEXT: ld1d { z5.d }, p1/z, [x1]237; CHECK-NEXT: add x1, x1, x10238; CHECK-NEXT: add x0, x0, x10239; CHECK-NEXT: fcmla z7.d, p0/m, z4.d, z2.d, #0240; CHECK-NEXT: fcmla z6.d, p0/m, z5.d, z3.d, #0241; CHECK-NEXT: fcmla z7.d, p0/m, z4.d, z2.d, #90242; CHECK-NEXT: fcmla z6.d, p0/m, z5.d, z3.d, #90243; CHECK-NEXT: mov z1.d, p2/m, z7.d244; CHECK-NEXT: mov z0.d, p1/m, z6.d245; CHECK-NEXT: whilelo p1.d, x12, x8246; CHECK-NEXT: add x12, x12, x9247; CHECK-NEXT: b.mi .LBB2_1248; CHECK-NEXT: // %bb.2: // %exit.block249; CHECK-NEXT: uzp1 z2.d, z0.d, z1.d250; CHECK-NEXT: uzp2 z1.d, z0.d, z1.d251; CHECK-NEXT: faddv d0, p0, z2.d252; CHECK-NEXT: faddv d1, p0, z1.d253; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0254; CHECK-NEXT: // kill: def $d1 killed $d1 killed $z1255; CHECK-NEXT: ret256entry:257 %active.lane.mask.entry = tail call <vscale x 2 x i1> @llvm.get.active.lane.mask.nxv2i1.i64(i64 0, i64 100)258 %0 = tail call i64 @llvm.vscale.i64()259 %1 = shl i64 %0, 1260 %2 = shl nuw nsw i64 %0, 5261 br label %vector.body262 263vector.body: ; preds = %vector.body, %entry264 %lsr.iv = phi i64 [ %lsr.iv.next, %vector.body ], [ 0, %entry ]265 %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]266 %active.lane.mask = phi <vscale x 2 x i1> [ %active.lane.mask.entry, %entry ], [ %active.lane.mask.next, %vector.body ]267 %vec.phi = phi <vscale x 2 x double> [ zeroinitializer, %entry ], [ %19, %vector.body ]268 %vec.phi30 = phi <vscale x 2 x double> [ zeroinitializer, %entry ], [ %21, %vector.body ]269 %3 = shl i64 %index, 2270 %scevgep = getelementptr i8, ptr %cond, i64 %3271 %wide.masked.load = tail call <vscale x 2 x i32> @llvm.masked.load.nxv2i32.p0(ptr %scevgep, i32 4, <vscale x 2 x i1> %active.lane.mask, <vscale x 2 x i32> poison)272 %4 = icmp ne <vscale x 2 x i32> %wide.masked.load, zeroinitializer273 %scevgep38 = getelementptr i8, ptr %a, i64 %lsr.iv274 %scevgep39 = getelementptr i8, ptr %b, i64 %lsr.iv275 %5 = select <vscale x 2 x i1> %active.lane.mask, <vscale x 2 x i1> %4, <vscale x 2 x i1> zeroinitializer276 %interleaved.mask = tail call <vscale x 4 x i1> @llvm.vector.interleave2.nxv4i1(<vscale x 2 x i1> %5, <vscale x 2 x i1> %5)277 %wide.masked.vec = tail call <vscale x 4 x double> @llvm.masked.load.nxv4f64.p0(ptr %scevgep38, i32 8, <vscale x 4 x i1> %interleaved.mask, <vscale x 4 x double> poison)278 %strided.vec = tail call { <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave2.nxv4f64(<vscale x 4 x double> %wide.masked.vec)279 %6 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 0280 %7 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec, 1281 %interleaved.mask31 = tail call <vscale x 4 x i1> @llvm.vector.interleave2.nxv4i1(<vscale x 2 x i1> %5, <vscale x 2 x i1> %5)282 %wide.masked.vec32 = tail call <vscale x 4 x double> @llvm.masked.load.nxv4f64.p0(ptr %scevgep39, i32 8, <vscale x 4 x i1> %interleaved.mask31, <vscale x 4 x double> poison)283 %strided.vec33 = tail call { <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave2.nxv4f64(<vscale x 4 x double> %wide.masked.vec32)284 %8 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec33, 0285 %9 = extractvalue { <vscale x 2 x double>, <vscale x 2 x double> } %strided.vec33, 1286 %10 = fmul fast <vscale x 2 x double> %9, %6287 %11 = fmul fast <vscale x 2 x double> %8, %7288 %12 = fmul fast <vscale x 2 x double> %8, %6289 %13 = fadd fast <vscale x 2 x double> %12, %vec.phi30290 %14 = fmul fast <vscale x 2 x double> %9, %7291 %15 = fsub fast <vscale x 2 x double> %13, %14292 %16 = fadd fast <vscale x 2 x double> %11, %vec.phi293 %17 = fadd fast <vscale x 2 x double> %16, %10294 %18 = select <vscale x 2 x i1> %active.lane.mask, <vscale x 2 x i1> %4, <vscale x 2 x i1> zeroinitializer295 %19 = select fast <vscale x 2 x i1> %18, <vscale x 2 x double> %17, <vscale x 2 x double> %vec.phi296 %20 = select <vscale x 2 x i1> %active.lane.mask, <vscale x 2 x i1> %4, <vscale x 2 x i1> zeroinitializer297 %21 = select fast <vscale x 2 x i1> %20, <vscale x 2 x double> %15, <vscale x 2 x double> %vec.phi30298 %index.next = add i64 %index, %1299 %22 = add i64 %1, %index300 %active.lane.mask.next = tail call <vscale x 2 x i1> @llvm.get.active.lane.mask.nxv2i1.i64(i64 %22, i64 100)301 %23 = extractelement <vscale x 2 x i1> %active.lane.mask.next, i64 0302 %lsr.iv.next = add i64 %lsr.iv, %2303 br i1 %23, label %vector.body, label %exit.block304 305exit.block: ; preds = %vector.body306 %24 = tail call fast double @llvm.vector.reduce.fadd.nxv2f64(double -0.000000e+00, <vscale x 2 x double> %21)307 %25 = tail call fast double @llvm.vector.reduce.fadd.nxv2f64(double -0.000000e+00, <vscale x 2 x double> %19)308 %.fca.0.0.insert = insertvalue %"class.std::complex" poison, double %24, 0, 0309 %.fca.0.1.insert = insertvalue %"class.std::complex" %.fca.0.0.insert, double %25, 0, 1310 ret %"class.std::complex" %.fca.0.1.insert311}312 313declare i64 @llvm.vscale.i64()314declare <vscale x 2 x i1> @llvm.get.active.lane.mask.nxv2i1.i64(i64, i64)315declare <vscale x 2 x i32> @llvm.masked.load.nxv2i32.p0(ptr nocapture, i32 immarg, <vscale x 2 x i1>, <vscale x 2 x i32>)316declare <vscale x 4 x double> @llvm.masked.load.nxv4f64.p0(ptr nocapture, i32 immarg, <vscale x 4 x i1>, <vscale x 4 x double>)317declare <vscale x 4 x i1> @llvm.vector.interleave2.nxv4i1(<vscale x 2 x i1>, <vscale x 2 x i1>)318declare { <vscale x 2 x double>, <vscale x 2 x double> } @llvm.vector.deinterleave2.nxv4f64(<vscale x 4 x double>)319declare double @llvm.vector.reduce.fadd.nxv2f64(double, <vscale x 2 x double>)320