brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.0 KiB · b8b377d Raw
498 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc < %s -mtriple=riscv64 -mattr=+v | FileCheck %s3 4define float @reduce_fadd(ptr %f) {5; CHECK-LABEL: reduce_fadd:6; CHECK:       # %bb.0: # %entry7; CHECK-NEXT:    csrr a2, vlenb8; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma9; CHECK-NEXT:    vmv.s.x v8, zero10; CHECK-NEXT:    srli a1, a2, 111; CHECK-NEXT:    slli a2, a2, 112; CHECK-NEXT:    li a3, 102413; CHECK-NEXT:  .LBB0_1: # %vector.body14; CHECK-NEXT:    # =>This Inner Loop Header: Depth=115; CHECK-NEXT:    vl2re32.v v10, (a0)16; CHECK-NEXT:    sub a3, a3, a117; CHECK-NEXT:    vsetvli a4, zero, e32, m2, ta, ma18; CHECK-NEXT:    vfredosum.vs v8, v10, v819; CHECK-NEXT:    add a0, a0, a220; CHECK-NEXT:    bnez a3, .LBB0_121; CHECK-NEXT:  # %bb.2: # %exit22; CHECK-NEXT:    vfmv.f.s fa0, v823; CHECK-NEXT:    ret24entry:25  %vscale = tail call i64 @llvm.vscale.i64()26  %vecsize = shl nuw nsw i64 %vscale, 227  br label %vector.body28 29vector.body:30  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]31  %vec.phi = phi float [ 0.000000e+00, %entry ], [ %acc, %vector.body ]32  %gep = getelementptr inbounds float, ptr %f, i64 %index33  %wide.load = load <vscale x 4 x float>, ptr %gep, align 434  %acc = tail call float @llvm.vector.reduce.fadd.nxv4f32(float %vec.phi, <vscale x 4 x float> %wide.load)35  %index.next = add nuw i64 %index, %vecsize36  %done = icmp eq i64 %index.next, 102437  br i1 %done, label %exit, label %vector.body38 39exit:40  ret float %acc41}42 43define i32 @vp_reduce_add(ptr %a) {44; CHECK-LABEL: vp_reduce_add:45; CHECK:       # %bb.0: # %entry46; CHECK-NEXT:    li a1, 047; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma48; CHECK-NEXT:    vmv.s.x v8, zero49; CHECK-NEXT:    li a2, 102450; CHECK-NEXT:  .LBB1_1: # %vector.body51; CHECK-NEXT:    # =>This Inner Loop Header: Depth=152; CHECK-NEXT:    vsetvli a3, a2, e32, m2, ta, ma53; CHECK-NEXT:    slli a4, a1, 254; CHECK-NEXT:    add a4, a0, a455; CHECK-NEXT:    vle32.v v10, (a4)56; CHECK-NEXT:    sub a2, a2, a357; CHECK-NEXT:    vredsum.vs v8, v10, v858; CHECK-NEXT:    add a1, a1, a359; CHECK-NEXT:    bnez a2, .LBB1_160; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup61; CHECK-NEXT:    vmv.x.s a0, v862; CHECK-NEXT:    ret63entry:64  br label %vector.body65 66vector.body:                                      ; preds = %vector.body, %entry67  %trip.count = phi i64 [ 1024, %entry ], [ %remaining.trip.count, %vector.body ]68  %scalar.ind = phi i64 [ 0, %entry ], [ %next.ind, %vector.body ]69  %red.phi = phi i32 [ 0, %entry ], [ %red, %vector.body ]70  %evl = tail call i32 @llvm.experimental.get.vector.length.i64(i64 %trip.count, i32 4, i1 true)71  %evl2 = zext i32 %evl to i6472  %arrayidx6 = getelementptr inbounds i32, ptr %a, i64 %scalar.ind73  %wide.load = tail call <vscale x 4 x i32> @llvm.vp.load.nxv4i32.p0(ptr %arrayidx6, <vscale x 4 x i1> splat (i1 true), i32 %evl)74  %red = tail call i32 @llvm.vp.reduce.add.nxv4i32(i32 %red.phi, <vscale x 4 x i32> %wide.load, <vscale x 4 x i1> splat (i1 true), i32 %evl)75  %remaining.trip.count = sub nuw i64 %trip.count, %evl276  %next.ind = add i64 %scalar.ind, %evl277  %m = icmp eq i64 %remaining.trip.count, 078  br i1 %m, label %for.cond.cleanup, label %vector.body79 80for.cond.cleanup:                                 ; preds = %vector.body81  ret i32 %red82}83 84define i32 @vp_reduce_and(ptr %a) {85; CHECK-LABEL: vp_reduce_and:86; CHECK:       # %bb.0: # %entry87; CHECK-NEXT:    li a1, 088; CHECK-NEXT:    lui a2, 52428889; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma90; CHECK-NEXT:    vmv.s.x v8, a291; CHECK-NEXT:    li a2, 102492; CHECK-NEXT:  .LBB2_1: # %vector.body93; CHECK-NEXT:    # =>This Inner Loop Header: Depth=194; CHECK-NEXT:    vsetvli a3, a2, e32, m2, ta, ma95; CHECK-NEXT:    slli a4, a1, 296; CHECK-NEXT:    add a4, a0, a497; CHECK-NEXT:    vle32.v v10, (a4)98; CHECK-NEXT:    sub a2, a2, a399; CHECK-NEXT:    vredand.vs v8, v10, v8100; CHECK-NEXT:    add a1, a1, a3101; CHECK-NEXT:    bnez a2, .LBB2_1102; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup103; CHECK-NEXT:    vmv.x.s a0, v8104; CHECK-NEXT:    ret105entry:106  br label %vector.body107 108vector.body:                                      ; preds = %vector.body, %entry109  %trip.count = phi i64 [ 1024, %entry ], [ %remaining.trip.count, %vector.body ]110  %scalar.ind = phi i64 [ 0, %entry ], [ %next.ind, %vector.body ]111  %red.phi = phi i32 [ -2147483648, %entry ], [ %red, %vector.body ]112  %evl = tail call i32 @llvm.experimental.get.vector.length.i64(i64 %trip.count, i32 4, i1 true)113  %evl2 = zext i32 %evl to i64114  %arrayidx6 = getelementptr inbounds i32, ptr %a, i64 %scalar.ind115  %wide.load = tail call <vscale x 4 x i32> @llvm.vp.load.nxv4i32.p0(ptr %arrayidx6, <vscale x 4 x i1> splat (i1 true), i32 %evl)116  %red = tail call i32 @llvm.vp.reduce.and.nxv4i32(i32 %red.phi, <vscale x 4 x i32> %wide.load, <vscale x 4 x i1> splat (i1 true), i32 %evl)117  %remaining.trip.count = sub nuw i64 %trip.count, %evl2118  %next.ind = add i64 %scalar.ind, %evl2119  %m = icmp eq i64 %remaining.trip.count, 0120  br i1 %m, label %for.cond.cleanup, label %vector.body121 122for.cond.cleanup:                                 ; preds = %vector.body123  ret i32 %red124}125 126define i32 @vp_reduce_or(ptr %a) {127; CHECK-LABEL: vp_reduce_or:128; CHECK:       # %bb.0: # %entry129; CHECK-NEXT:    li a1, 0130; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma131; CHECK-NEXT:    vmv.s.x v8, zero132; CHECK-NEXT:    li a2, 1024133; CHECK-NEXT:  .LBB3_1: # %vector.body134; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1135; CHECK-NEXT:    vsetvli a3, a2, e32, m2, ta, ma136; CHECK-NEXT:    slli a4, a1, 2137; CHECK-NEXT:    add a4, a0, a4138; CHECK-NEXT:    vle32.v v10, (a4)139; CHECK-NEXT:    sub a2, a2, a3140; CHECK-NEXT:    vredor.vs v8, v10, v8141; CHECK-NEXT:    add a1, a1, a3142; CHECK-NEXT:    bnez a2, .LBB3_1143; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup144; CHECK-NEXT:    vmv.x.s a0, v8145; CHECK-NEXT:    ret146entry:147  br label %vector.body148 149vector.body:                                      ; preds = %vector.body, %entry150  %trip.count = phi i64 [ 1024, %entry ], [ %remaining.trip.count, %vector.body ]151  %scalar.ind = phi i64 [ 0, %entry ], [ %next.ind, %vector.body ]152  %red.phi = phi i32 [ 0, %entry ], [ %red, %vector.body ]153  %evl = tail call i32 @llvm.experimental.get.vector.length.i64(i64 %trip.count, i32 4, i1 true)154  %evl2 = zext i32 %evl to i64155  %arrayidx6 = getelementptr inbounds i32, ptr %a, i64 %scalar.ind156  %wide.load = tail call <vscale x 4 x i32> @llvm.vp.load.nxv4i32.p0(ptr %arrayidx6, <vscale x 4 x i1> splat (i1 true), i32 %evl)157  %red = tail call i32 @llvm.vp.reduce.or.nxv4i32(i32 %red.phi, <vscale x 4 x i32> %wide.load, <vscale x 4 x i1> splat (i1 true), i32 %evl)158  %remaining.trip.count = sub nuw i64 %trip.count, %evl2159  %next.ind = add i64 %scalar.ind, %evl2160  %m = icmp eq i64 %remaining.trip.count, 0161  br i1 %m, label %for.cond.cleanup, label %vector.body162 163for.cond.cleanup:                                 ; preds = %vector.body164  ret i32 %red165}166 167define i32 @vp_reduce_xor(ptr %a) {168; CHECK-LABEL: vp_reduce_xor:169; CHECK:       # %bb.0: # %entry170; CHECK-NEXT:    li a1, 0171; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma172; CHECK-NEXT:    vmv.s.x v8, zero173; CHECK-NEXT:    li a2, 1024174; CHECK-NEXT:  .LBB4_1: # %vector.body175; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1176; CHECK-NEXT:    vsetvli a3, a2, e32, m2, ta, ma177; CHECK-NEXT:    slli a4, a1, 2178; CHECK-NEXT:    add a4, a0, a4179; CHECK-NEXT:    vle32.v v10, (a4)180; CHECK-NEXT:    sub a2, a2, a3181; CHECK-NEXT:    vredxor.vs v8, v10, v8182; CHECK-NEXT:    add a1, a1, a3183; CHECK-NEXT:    bnez a2, .LBB4_1184; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup185; CHECK-NEXT:    vmv.x.s a0, v8186; CHECK-NEXT:    ret187entry:188  br label %vector.body189 190vector.body:                                      ; preds = %vector.body, %entry191  %trip.count = phi i64 [ 1024, %entry ], [ %remaining.trip.count, %vector.body ]192  %scalar.ind = phi i64 [ 0, %entry ], [ %next.ind, %vector.body ]193  %red.phi = phi i32 [ 0, %entry ], [ %red, %vector.body ]194  %evl = tail call i32 @llvm.experimental.get.vector.length.i64(i64 %trip.count, i32 4, i1 true)195  %evl2 = zext i32 %evl to i64196  %arrayidx6 = getelementptr inbounds i32, ptr %a, i64 %scalar.ind197  %wide.load = tail call <vscale x 4 x i32> @llvm.vp.load.nxv4i32.p0(ptr %arrayidx6, <vscale x 4 x i1> splat (i1 true), i32 %evl)198  %red = tail call i32 @llvm.vp.reduce.xor.nxv4i32(i32 %red.phi, <vscale x 4 x i32> %wide.load, <vscale x 4 x i1> splat (i1 true), i32 %evl)199  %remaining.trip.count = sub nuw i64 %trip.count, %evl2200  %next.ind = add i64 %scalar.ind, %evl2201  %m = icmp eq i64 %remaining.trip.count, 0202  br i1 %m, label %for.cond.cleanup, label %vector.body203 204for.cond.cleanup:                                 ; preds = %vector.body205  ret i32 %red206}207 208define i32 @vp_reduce_smax(ptr %a) {209; CHECK-LABEL: vp_reduce_smax:210; CHECK:       # %bb.0: # %entry211; CHECK-NEXT:    li a1, 0212; CHECK-NEXT:    lui a2, 524288213; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma214; CHECK-NEXT:    vmv.s.x v8, a2215; CHECK-NEXT:    li a2, 1024216; CHECK-NEXT:  .LBB5_1: # %vector.body217; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1218; CHECK-NEXT:    vsetvli a3, a2, e32, m2, ta, ma219; CHECK-NEXT:    slli a4, a1, 2220; CHECK-NEXT:    add a4, a0, a4221; CHECK-NEXT:    vle32.v v10, (a4)222; CHECK-NEXT:    sub a2, a2, a3223; CHECK-NEXT:    vredmax.vs v8, v10, v8224; CHECK-NEXT:    add a1, a1, a3225; CHECK-NEXT:    bnez a2, .LBB5_1226; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup227; CHECK-NEXT:    vmv.x.s a0, v8228; CHECK-NEXT:    ret229entry:230  br label %vector.body231 232vector.body:                                      ; preds = %vector.body, %entry233  %trip.count = phi i64 [ 1024, %entry ], [ %remaining.trip.count, %vector.body ]234  %scalar.ind = phi i64 [ 0, %entry ], [ %next.ind, %vector.body ]235  %red.phi = phi i32 [ -2147483648, %entry ], [ %red, %vector.body ]236  %evl = tail call i32 @llvm.experimental.get.vector.length.i64(i64 %trip.count, i32 4, i1 true)237  %evl2 = zext i32 %evl to i64238  %arrayidx6 = getelementptr inbounds i32, ptr %a, i64 %scalar.ind239  %wide.load = tail call <vscale x 4 x i32> @llvm.vp.load.nxv4i32.p0(ptr %arrayidx6, <vscale x 4 x i1> splat (i1 true), i32 %evl)240  %red = tail call i32 @llvm.vp.reduce.smax.nxv4i32(i32 %red.phi, <vscale x 4 x i32> %wide.load, <vscale x 4 x i1> splat (i1 true), i32 %evl)241  %remaining.trip.count = sub nuw i64 %trip.count, %evl2242  %next.ind = add i64 %scalar.ind, %evl2243  %m = icmp eq i64 %remaining.trip.count, 0244  br i1 %m, label %for.cond.cleanup, label %vector.body245 246for.cond.cleanup:                                 ; preds = %vector.body247  ret i32 %red248}249 250define i32 @vp_reduce_smin(ptr %a) {251; CHECK-LABEL: vp_reduce_smin:252; CHECK:       # %bb.0: # %entry253; CHECK-NEXT:    li a1, 0254; CHECK-NEXT:    lui a2, 524288255; CHECK-NEXT:    addi a2, a2, -1256; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma257; CHECK-NEXT:    vmv.s.x v8, a2258; CHECK-NEXT:    li a2, 1024259; CHECK-NEXT:  .LBB6_1: # %vector.body260; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1261; CHECK-NEXT:    vsetvli a3, a2, e32, m2, ta, ma262; CHECK-NEXT:    slli a4, a1, 2263; CHECK-NEXT:    add a4, a0, a4264; CHECK-NEXT:    vle32.v v10, (a4)265; CHECK-NEXT:    sub a2, a2, a3266; CHECK-NEXT:    vredmin.vs v8, v10, v8267; CHECK-NEXT:    add a1, a1, a3268; CHECK-NEXT:    bnez a2, .LBB6_1269; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup270; CHECK-NEXT:    vmv.x.s a0, v8271; CHECK-NEXT:    ret272entry:273  br label %vector.body274 275vector.body:                                      ; preds = %vector.body, %entry276  %trip.count = phi i64 [ 1024, %entry ], [ %remaining.trip.count, %vector.body ]277  %scalar.ind = phi i64 [ 0, %entry ], [ %next.ind, %vector.body ]278  %red.phi = phi i32 [ 2147483647, %entry ], [ %red, %vector.body ]279  %evl = tail call i32 @llvm.experimental.get.vector.length.i64(i64 %trip.count, i32 4, i1 true)280  %evl2 = zext i32 %evl to i64281  %arrayidx6 = getelementptr inbounds i32, ptr %a, i64 %scalar.ind282  %wide.load = tail call <vscale x 4 x i32> @llvm.vp.load.nxv4i32.p0(ptr %arrayidx6, <vscale x 4 x i1> splat (i1 true), i32 %evl)283  %red = tail call i32 @llvm.vp.reduce.smin.nxv4i32(i32 %red.phi, <vscale x 4 x i32> %wide.load, <vscale x 4 x i1> splat (i1 true), i32 %evl)284  %remaining.trip.count = sub nuw i64 %trip.count, %evl2285  %next.ind = add i64 %scalar.ind, %evl2286  %m = icmp eq i64 %remaining.trip.count, 0287  br i1 %m, label %for.cond.cleanup, label %vector.body288 289for.cond.cleanup:                                 ; preds = %vector.body290  ret i32 %red291}292 293define i32 @vp_reduce_umax(ptr %a) {294; CHECK-LABEL: vp_reduce_umax:295; CHECK:       # %bb.0: # %entry296; CHECK-NEXT:    li a1, 0297; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma298; CHECK-NEXT:    vmv.s.x v8, zero299; CHECK-NEXT:    li a2, 1024300; CHECK-NEXT:  .LBB7_1: # %vector.body301; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1302; CHECK-NEXT:    vsetvli a3, a2, e32, m2, ta, ma303; CHECK-NEXT:    slli a4, a1, 2304; CHECK-NEXT:    add a4, a0, a4305; CHECK-NEXT:    vle32.v v10, (a4)306; CHECK-NEXT:    sub a2, a2, a3307; CHECK-NEXT:    vredmaxu.vs v8, v10, v8308; CHECK-NEXT:    add a1, a1, a3309; CHECK-NEXT:    bnez a2, .LBB7_1310; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup311; CHECK-NEXT:    vmv.x.s a0, v8312; CHECK-NEXT:    ret313entry:314  br label %vector.body315 316vector.body:                                      ; preds = %vector.body, %entry317  %trip.count = phi i64 [ 1024, %entry ], [ %remaining.trip.count, %vector.body ]318  %scalar.ind = phi i64 [ 0, %entry ], [ %next.ind, %vector.body ]319  %red.phi = phi i32 [ 0, %entry ], [ %red, %vector.body ]320  %evl = tail call i32 @llvm.experimental.get.vector.length.i64(i64 %trip.count, i32 4, i1 true)321  %evl2 = zext i32 %evl to i64322  %arrayidx6 = getelementptr inbounds i32, ptr %a, i64 %scalar.ind323  %wide.load = tail call <vscale x 4 x i32> @llvm.vp.load.nxv4i32.p0(ptr %arrayidx6, <vscale x 4 x i1> splat (i1 true), i32 %evl)324  %red = tail call i32 @llvm.vp.reduce.umax.nxv4i32(i32 %red.phi, <vscale x 4 x i32> %wide.load, <vscale x 4 x i1> splat (i1 true), i32 %evl)325  %remaining.trip.count = sub nuw i64 %trip.count, %evl2326  %next.ind = add i64 %scalar.ind, %evl2327  %m = icmp eq i64 %remaining.trip.count, 0328  br i1 %m, label %for.cond.cleanup, label %vector.body329 330for.cond.cleanup:                                 ; preds = %vector.body331  ret i32 %red332}333 334define i32 @vp_reduce_umin(ptr %a) {335; CHECK-LABEL: vp_reduce_umin:336; CHECK:       # %bb.0: # %entry337; CHECK-NEXT:    li a1, 0338; CHECK-NEXT:    lui a2, 524288339; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma340; CHECK-NEXT:    vmv.s.x v8, a2341; CHECK-NEXT:    li a2, 1024342; CHECK-NEXT:  .LBB8_1: # %vector.body343; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1344; CHECK-NEXT:    vsetvli a3, a2, e32, m2, ta, ma345; CHECK-NEXT:    slli a4, a1, 2346; CHECK-NEXT:    add a4, a0, a4347; CHECK-NEXT:    vle32.v v10, (a4)348; CHECK-NEXT:    sub a2, a2, a3349; CHECK-NEXT:    vredminu.vs v8, v10, v8350; CHECK-NEXT:    add a1, a1, a3351; CHECK-NEXT:    bnez a2, .LBB8_1352; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup353; CHECK-NEXT:    vmv.x.s a0, v8354; CHECK-NEXT:    ret355entry:356  br label %vector.body357 358vector.body:                                      ; preds = %vector.body, %entry359  %trip.count = phi i64 [ 1024, %entry ], [ %remaining.trip.count, %vector.body ]360  %scalar.ind = phi i64 [ 0, %entry ], [ %next.ind, %vector.body ]361  %red.phi = phi i32 [ -2147483648, %entry ], [ %red, %vector.body ]362  %evl = tail call i32 @llvm.experimental.get.vector.length.i64(i64 %trip.count, i32 4, i1 true)363  %evl2 = zext i32 %evl to i64364  %arrayidx6 = getelementptr inbounds i32, ptr %a, i64 %scalar.ind365  %wide.load = tail call <vscale x 4 x i32> @llvm.vp.load.nxv4i32.p0(ptr %arrayidx6, <vscale x 4 x i1> splat (i1 true), i32 %evl)366  %red = tail call i32 @llvm.vp.reduce.umin.nxv4i32(i32 %red.phi, <vscale x 4 x i32> %wide.load, <vscale x 4 x i1> splat (i1 true), i32 %evl)367  %remaining.trip.count = sub nuw i64 %trip.count, %evl2368  %next.ind = add i64 %scalar.ind, %evl2369  %m = icmp eq i64 %remaining.trip.count, 0370  br i1 %m, label %for.cond.cleanup, label %vector.body371 372for.cond.cleanup:                                 ; preds = %vector.body373  ret i32 %red374}375 376define float @vp_reduce_fadd(ptr %a) {377; CHECK-LABEL: vp_reduce_fadd:378; CHECK:       # %bb.0: # %entry379; CHECK-NEXT:    li a1, 0380; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma381; CHECK-NEXT:    vmv.s.x v8, zero382; CHECK-NEXT:    li a2, 1024383; CHECK-NEXT:  .LBB9_1: # %vector.body384; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1385; CHECK-NEXT:    vsetvli a3, a2, e32, m2, ta, ma386; CHECK-NEXT:    slli a4, a1, 2387; CHECK-NEXT:    add a4, a0, a4388; CHECK-NEXT:    vle32.v v10, (a4)389; CHECK-NEXT:    sub a2, a2, a3390; CHECK-NEXT:    vfredosum.vs v8, v10, v8391; CHECK-NEXT:    add a1, a1, a3392; CHECK-NEXT:    bnez a2, .LBB9_1393; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup394; CHECK-NEXT:    vfmv.f.s fa0, v8395; CHECK-NEXT:    ret396entry:397  br label %vector.body398 399vector.body:                                      ; preds = %vector.body, %entry400  %trip.count = phi i64 [ 1024, %entry ], [ %remaining.trip.count, %vector.body ]401  %scalar.ind = phi i64 [ 0, %entry ], [ %next.ind, %vector.body ]402  %red.phi = phi float [ 0.000000e+00, %entry ], [ %red, %vector.body ]403  %evl = tail call i32 @llvm.experimental.get.vector.length.i64(i64 %trip.count, i32 4, i1 true)404  %evl2 = zext i32 %evl to i64405  %arrayidx6 = getelementptr inbounds float, ptr %a, i64 %scalar.ind406  %wide.load = tail call <vscale x 4 x float> @llvm.vp.load.nxv4f32.p0(ptr %arrayidx6, <vscale x 4 x i1> splat (i1 true), i32 %evl)407  %red = tail call float @llvm.vp.reduce.fadd.nxv4f32(float %red.phi, <vscale x 4 x float> %wide.load, <vscale x 4 x i1> splat (i1 true), i32 %evl)408  %remaining.trip.count = sub nuw i64 %trip.count, %evl2409  %next.ind = add i64 %scalar.ind, %evl2410  %m = icmp eq i64 %remaining.trip.count, 0411  br i1 %m, label %for.cond.cleanup, label %vector.body412 413for.cond.cleanup:                                 ; preds = %vector.body414  ret float %red415}416 417define float @vp_reduce_fmax(ptr %a) {418; CHECK-LABEL: vp_reduce_fmax:419; CHECK:       # %bb.0: # %entry420; CHECK-NEXT:    li a1, 0421; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma422; CHECK-NEXT:    vmv.s.x v8, zero423; CHECK-NEXT:    li a2, 1024424; CHECK-NEXT:  .LBB10_1: # %vector.body425; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1426; CHECK-NEXT:    vsetvli a3, a2, e32, m2, ta, ma427; CHECK-NEXT:    slli a4, a1, 2428; CHECK-NEXT:    add a4, a0, a4429; CHECK-NEXT:    vle32.v v10, (a4)430; CHECK-NEXT:    sub a2, a2, a3431; CHECK-NEXT:    vfredmax.vs v8, v10, v8432; CHECK-NEXT:    add a1, a1, a3433; CHECK-NEXT:    bnez a2, .LBB10_1434; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup435; CHECK-NEXT:    vfmv.f.s fa0, v8436; CHECK-NEXT:    ret437entry:438  br label %vector.body439 440vector.body:                                      ; preds = %vector.body, %entry441  %trip.count = phi i64 [ 1024, %entry ], [ %remaining.trip.count, %vector.body ]442  %scalar.ind = phi i64 [ 0, %entry ], [ %next.ind, %vector.body ]443  %red.phi = phi float [ 0.000000e+00, %entry ], [ %red, %vector.body ]444  %evl = tail call i32 @llvm.experimental.get.vector.length.i64(i64 %trip.count, i32 4, i1 true)445  %evl2 = zext i32 %evl to i64446  %arrayidx6 = getelementptr inbounds float, ptr %a, i64 %scalar.ind447  %wide.load = tail call <vscale x 4 x float> @llvm.vp.load.nxv4f32.p0(ptr %arrayidx6, <vscale x 4 x i1> splat (i1 true), i32 %evl)448  %red = tail call float @llvm.vp.reduce.fmax.nxv4f32(float %red.phi, <vscale x 4 x float> %wide.load, <vscale x 4 x i1> splat (i1 true), i32 %evl)449  %remaining.trip.count = sub nuw i64 %trip.count, %evl2450  %next.ind = add i64 %scalar.ind, %evl2451  %m = icmp eq i64 %remaining.trip.count, 0452  br i1 %m, label %for.cond.cleanup, label %vector.body453 454for.cond.cleanup:                                 ; preds = %vector.body455  ret float %red456}457 458define float @vp_reduce_fmin(ptr %a) {459; CHECK-LABEL: vp_reduce_fmin:460; CHECK:       # %bb.0: # %entry461; CHECK-NEXT:    li a1, 0462; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma463; CHECK-NEXT:    vmv.s.x v8, zero464; CHECK-NEXT:    li a2, 1024465; CHECK-NEXT:  .LBB11_1: # %vector.body466; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1467; CHECK-NEXT:    vsetvli a3, a2, e32, m2, ta, ma468; CHECK-NEXT:    slli a4, a1, 2469; CHECK-NEXT:    add a4, a0, a4470; CHECK-NEXT:    vle32.v v10, (a4)471; CHECK-NEXT:    sub a2, a2, a3472; CHECK-NEXT:    vfredmin.vs v8, v10, v8473; CHECK-NEXT:    add a1, a1, a3474; CHECK-NEXT:    bnez a2, .LBB11_1475; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup476; CHECK-NEXT:    vfmv.f.s fa0, v8477; CHECK-NEXT:    ret478entry:479  br label %vector.body480 481vector.body:                                      ; preds = %vector.body, %entry482  %trip.count = phi i64 [ 1024, %entry ], [ %remaining.trip.count, %vector.body ]483  %scalar.ind = phi i64 [ 0, %entry ], [ %next.ind, %vector.body ]484  %red.phi = phi float [ 0.000000e+00, %entry ], [ %red, %vector.body ]485  %evl = tail call i32 @llvm.experimental.get.vector.length.i64(i64 %trip.count, i32 4, i1 true)486  %evl2 = zext i32 %evl to i64487  %arrayidx6 = getelementptr inbounds float, ptr %a, i64 %scalar.ind488  %wide.load = tail call <vscale x 4 x float> @llvm.vp.load.nxv4f32.p0(ptr %arrayidx6, <vscale x 4 x i1> splat (i1 true), i32 %evl)489  %red = tail call float @llvm.vp.reduce.fmin.nxv4f32(float %red.phi, <vscale x 4 x float> %wide.load, <vscale x 4 x i1> splat (i1 true), i32 %evl)490  %remaining.trip.count = sub nuw i64 %trip.count, %evl2491  %next.ind = add i64 %scalar.ind, %evl2492  %m = icmp eq i64 %remaining.trip.count, 0493  br i1 %m, label %for.cond.cleanup, label %vector.body494 495for.cond.cleanup:                                 ; preds = %vector.body496  ret float %red497}498