brintos

brintos / llvm-project-archived public Read only

0
0
Text · 240.8 KiB · 5193127 Raw
5983 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=riscv64 -mattr=+m,+v,+f -target-abi=lp64f \3; RUN:     | FileCheck %s4 5define void @sink_splat_mul(ptr nocapture %a, i32 signext %x) {6; CHECK-LABEL: sink_splat_mul:7; CHECK:       # %bb.0: # %entry8; CHECK-NEXT:    lui a2, 19; CHECK-NEXT:    add a2, a0, a210; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma11; CHECK-NEXT:  .LBB0_1: # %vector.body12; CHECK-NEXT:    # =>This Inner Loop Header: Depth=113; CHECK-NEXT:    vle32.v v8, (a0)14; CHECK-NEXT:    vmul.vx v8, v8, a115; CHECK-NEXT:    vse32.v v8, (a0)16; CHECK-NEXT:    addi a0, a0, 1617; CHECK-NEXT:    bne a0, a2, .LBB0_118; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup19; CHECK-NEXT:    ret20entry:21  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 022  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer23  br label %vector.body24 25vector.body:                                      ; preds = %vector.body, %entry26  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]27  %0 = getelementptr inbounds i32, ptr %a, i64 %index28  %wide.load = load <4 x i32>, ptr %0, align 429  %1 = mul <4 x i32> %wide.load, %broadcast.splat30  store <4 x i32> %1, ptr %0, align 431  %index.next = add nuw i64 %index, 432  %2 = icmp eq i64 %index.next, 102433  br i1 %2, label %for.cond.cleanup, label %vector.body34 35for.cond.cleanup:                                 ; preds = %vector.body36  ret void37}38 39define void @sink_splat_add(ptr nocapture %a, i32 signext %x) {40; CHECK-LABEL: sink_splat_add:41; CHECK:       # %bb.0: # %entry42; CHECK-NEXT:    lui a2, 143; CHECK-NEXT:    add a2, a0, a244; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma45; CHECK-NEXT:  .LBB1_1: # %vector.body46; CHECK-NEXT:    # =>This Inner Loop Header: Depth=147; CHECK-NEXT:    vle32.v v8, (a0)48; CHECK-NEXT:    vadd.vx v8, v8, a149; CHECK-NEXT:    vse32.v v8, (a0)50; CHECK-NEXT:    addi a0, a0, 1651; CHECK-NEXT:    bne a0, a2, .LBB1_152; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup53; CHECK-NEXT:    ret54entry:55  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 056  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer57  br label %vector.body58 59vector.body:                                      ; preds = %vector.body, %entry60  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]61  %0 = getelementptr inbounds i32, ptr %a, i64 %index62  %wide.load = load <4 x i32>, ptr %0, align 463  %1 = add <4 x i32> %wide.load, %broadcast.splat64  store <4 x i32> %1, ptr %0, align 465  %index.next = add nuw i64 %index, 466  %2 = icmp eq i64 %index.next, 102467  br i1 %2, label %for.cond.cleanup, label %vector.body68 69for.cond.cleanup:                                 ; preds = %vector.body70  ret void71}72 73define void @sink_splat_sub(ptr nocapture %a, i32 signext %x) {74; CHECK-LABEL: sink_splat_sub:75; CHECK:       # %bb.0: # %entry76; CHECK-NEXT:    lui a2, 177; CHECK-NEXT:    add a2, a0, a278; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma79; CHECK-NEXT:  .LBB2_1: # %vector.body80; CHECK-NEXT:    # =>This Inner Loop Header: Depth=181; CHECK-NEXT:    vle32.v v8, (a0)82; CHECK-NEXT:    vsub.vx v8, v8, a183; CHECK-NEXT:    vse32.v v8, (a0)84; CHECK-NEXT:    addi a0, a0, 1685; CHECK-NEXT:    bne a0, a2, .LBB2_186; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup87; CHECK-NEXT:    ret88entry:89  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 090  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer91  br label %vector.body92 93vector.body:                                      ; preds = %vector.body, %entry94  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]95  %0 = getelementptr inbounds i32, ptr %a, i64 %index96  %wide.load = load <4 x i32>, ptr %0, align 497  %1 = sub <4 x i32> %wide.load, %broadcast.splat98  store <4 x i32> %1, ptr %0, align 499  %index.next = add nuw i64 %index, 4100  %2 = icmp eq i64 %index.next, 1024101  br i1 %2, label %for.cond.cleanup, label %vector.body102 103for.cond.cleanup:                                 ; preds = %vector.body104  ret void105}106 107define void @sink_splat_rsub(ptr nocapture %a, i32 signext %x) {108; CHECK-LABEL: sink_splat_rsub:109; CHECK:       # %bb.0: # %entry110; CHECK-NEXT:    lui a2, 1111; CHECK-NEXT:    add a2, a0, a2112; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma113; CHECK-NEXT:  .LBB3_1: # %vector.body114; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1115; CHECK-NEXT:    vle32.v v8, (a0)116; CHECK-NEXT:    vrsub.vx v8, v8, a1117; CHECK-NEXT:    vse32.v v8, (a0)118; CHECK-NEXT:    addi a0, a0, 16119; CHECK-NEXT:    bne a0, a2, .LBB3_1120; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup121; CHECK-NEXT:    ret122entry:123  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 0124  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer125  br label %vector.body126 127vector.body:                                      ; preds = %vector.body, %entry128  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]129  %0 = getelementptr inbounds i32, ptr %a, i64 %index130  %wide.load = load <4 x i32>, ptr %0, align 4131  %1 = sub <4 x i32> %broadcast.splat, %wide.load132  store <4 x i32> %1, ptr %0, align 4133  %index.next = add nuw i64 %index, 4134  %2 = icmp eq i64 %index.next, 1024135  br i1 %2, label %for.cond.cleanup, label %vector.body136 137for.cond.cleanup:                                 ; preds = %vector.body138  ret void139}140 141define void @sink_splat_and(ptr nocapture %a, i32 signext %x) {142; CHECK-LABEL: sink_splat_and:143; CHECK:       # %bb.0: # %entry144; CHECK-NEXT:    lui a2, 1145; CHECK-NEXT:    add a2, a0, a2146; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma147; CHECK-NEXT:  .LBB4_1: # %vector.body148; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1149; CHECK-NEXT:    vle32.v v8, (a0)150; CHECK-NEXT:    vand.vx v8, v8, a1151; CHECK-NEXT:    vse32.v v8, (a0)152; CHECK-NEXT:    addi a0, a0, 16153; CHECK-NEXT:    bne a0, a2, .LBB4_1154; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup155; CHECK-NEXT:    ret156entry:157  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 0158  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer159  br label %vector.body160 161vector.body:                                      ; preds = %vector.body, %entry162  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]163  %0 = getelementptr inbounds i32, ptr %a, i64 %index164  %wide.load = load <4 x i32>, ptr %0, align 4165  %1 = and <4 x i32> %wide.load, %broadcast.splat166  store <4 x i32> %1, ptr %0, align 4167  %index.next = add nuw i64 %index, 4168  %2 = icmp eq i64 %index.next, 1024169  br i1 %2, label %for.cond.cleanup, label %vector.body170 171for.cond.cleanup:                                 ; preds = %vector.body172  ret void173}174 175define void @sink_splat_or(ptr nocapture %a, i32 signext %x) {176; CHECK-LABEL: sink_splat_or:177; CHECK:       # %bb.0: # %entry178; CHECK-NEXT:    lui a2, 1179; CHECK-NEXT:    add a2, a0, a2180; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma181; CHECK-NEXT:  .LBB5_1: # %vector.body182; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1183; CHECK-NEXT:    vle32.v v8, (a0)184; CHECK-NEXT:    vor.vx v8, v8, a1185; CHECK-NEXT:    vse32.v v8, (a0)186; CHECK-NEXT:    addi a0, a0, 16187; CHECK-NEXT:    bne a0, a2, .LBB5_1188; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup189; CHECK-NEXT:    ret190entry:191  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 0192  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer193  br label %vector.body194 195vector.body:                                      ; preds = %vector.body, %entry196  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]197  %0 = getelementptr inbounds i32, ptr %a, i64 %index198  %wide.load = load <4 x i32>, ptr %0, align 4199  %1 = or <4 x i32> %wide.load, %broadcast.splat200  store <4 x i32> %1, ptr %0, align 4201  %index.next = add nuw i64 %index, 4202  %2 = icmp eq i64 %index.next, 1024203  br i1 %2, label %for.cond.cleanup, label %vector.body204 205for.cond.cleanup:                                 ; preds = %vector.body206  ret void207}208 209define void @sink_splat_xor(ptr nocapture %a, i32 signext %x) {210; CHECK-LABEL: sink_splat_xor:211; CHECK:       # %bb.0: # %entry212; CHECK-NEXT:    lui a2, 1213; CHECK-NEXT:    add a2, a0, a2214; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma215; CHECK-NEXT:  .LBB6_1: # %vector.body216; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1217; CHECK-NEXT:    vle32.v v8, (a0)218; CHECK-NEXT:    vxor.vx v8, v8, a1219; CHECK-NEXT:    vse32.v v8, (a0)220; CHECK-NEXT:    addi a0, a0, 16221; CHECK-NEXT:    bne a0, a2, .LBB6_1222; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup223; CHECK-NEXT:    ret224entry:225  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 0226  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer227  br label %vector.body228 229vector.body:                                      ; preds = %vector.body, %entry230  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]231  %0 = getelementptr inbounds i32, ptr %a, i64 %index232  %wide.load = load <4 x i32>, ptr %0, align 4233  %1 = xor <4 x i32> %wide.load, %broadcast.splat234  store <4 x i32> %1, ptr %0, align 4235  %index.next = add nuw i64 %index, 4236  %2 = icmp eq i64 %index.next, 1024237  br i1 %2, label %for.cond.cleanup, label %vector.body238 239for.cond.cleanup:                                 ; preds = %vector.body240  ret void241}242 243define void @sink_splat_mul_scalable(ptr nocapture %a, i32 signext %x) {244; CHECK-LABEL: sink_splat_mul_scalable:245; CHECK:       # %bb.0: # %entry246; CHECK-NEXT:    csrr a5, vlenb247; CHECK-NEXT:    srli a3, a5, 1248; CHECK-NEXT:    li a2, 1024249; CHECK-NEXT:    bgeu a2, a3, .LBB7_2250; CHECK-NEXT:  # %bb.1:251; CHECK-NEXT:    li a2, 0252; CHECK-NEXT:    j .LBB7_5253; CHECK-NEXT:  .LBB7_2: # %vector.ph254; CHECK-NEXT:    addi a2, a3, -1255; CHECK-NEXT:    andi a4, a2, 1024256; CHECK-NEXT:    xori a2, a4, 1024257; CHECK-NEXT:    slli a5, a5, 1258; CHECK-NEXT:    mv a6, a0259; CHECK-NEXT:    mv a7, a2260; CHECK-NEXT:    vsetvli t0, zero, e32, m2, ta, ma261; CHECK-NEXT:  .LBB7_3: # %vector.body262; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1263; CHECK-NEXT:    vl2re32.v v8, (a6)264; CHECK-NEXT:    sub a7, a7, a3265; CHECK-NEXT:    vmul.vx v8, v8, a1266; CHECK-NEXT:    vs2r.v v8, (a6)267; CHECK-NEXT:    add a6, a6, a5268; CHECK-NEXT:    bnez a7, .LBB7_3269; CHECK-NEXT:  # %bb.4: # %middle.block270; CHECK-NEXT:    beqz a4, .LBB7_7271; CHECK-NEXT:  .LBB7_5: # %for.body.preheader272; CHECK-NEXT:    slli a2, a2, 2273; CHECK-NEXT:    lui a3, 1274; CHECK-NEXT:    add a2, a0, a2275; CHECK-NEXT:    add a0, a0, a3276; CHECK-NEXT:  .LBB7_6: # %for.body277; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1278; CHECK-NEXT:    lw a3, 0(a2)279; CHECK-NEXT:    mul a3, a3, a1280; CHECK-NEXT:    sw a3, 0(a2)281; CHECK-NEXT:    addi a2, a2, 4282; CHECK-NEXT:    bne a2, a0, .LBB7_6283; CHECK-NEXT:  .LBB7_7: # %for.cond.cleanup284; CHECK-NEXT:    ret285entry:286  %0 = call i64 @llvm.vscale.i64()287  %1 = shl i64 %0, 2288  %min.iters.check = icmp ugt i64 %1, 1024289  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph290 291vector.ph:                                        ; preds = %entry292  %2 = call i64 @llvm.vscale.i64()293  %3 = shl i64 %2, 2294  %n.mod.vf = urem i64 1024, %3295  %n.vec = sub nsw i64 1024, %n.mod.vf296  %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %x, i32 0297  %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer298  %4 = call i64 @llvm.vscale.i64()299  %5 = shl i64 %4, 2300  br label %vector.body301 302vector.body:                                      ; preds = %vector.body, %vector.ph303  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]304  %6 = getelementptr inbounds i32, ptr %a, i64 %index305  %wide.load = load <vscale x 4 x i32>, ptr %6, align 4306  %7 = mul <vscale x 4 x i32> %wide.load, %broadcast.splat307  store <vscale x 4 x i32> %7, ptr %6, align 4308  %index.next = add nuw i64 %index, %5309  %8 = icmp eq i64 %index.next, %n.vec310  br i1 %8, label %middle.block, label %vector.body311 312middle.block:                                     ; preds = %vector.body313  %cmp.n = icmp eq i64 %n.mod.vf, 0314  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader315 316for.body.preheader:                               ; preds = %entry, %middle.block317  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]318  br label %for.body319 320for.cond.cleanup:                                 ; preds = %for.body, %middle.block321  ret void322 323for.body:                                         ; preds = %for.body.preheader, %for.body324  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]325  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv326  %9 = load i32, ptr %arrayidx, align 4327  %mul = mul i32 %9, %x328  store i32 %mul, ptr %arrayidx, align 4329  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1330  %cmp.not = icmp eq i64 %indvars.iv.next, 1024331  br i1 %cmp.not, label %for.cond.cleanup, label %for.body332}333 334define void @sink_splat_add_scalable(ptr nocapture %a, i32 signext %x) {335; CHECK-LABEL: sink_splat_add_scalable:336; CHECK:       # %bb.0: # %entry337; CHECK-NEXT:    csrr a5, vlenb338; CHECK-NEXT:    srli a3, a5, 1339; CHECK-NEXT:    li a2, 1024340; CHECK-NEXT:    bgeu a2, a3, .LBB8_2341; CHECK-NEXT:  # %bb.1:342; CHECK-NEXT:    li a2, 0343; CHECK-NEXT:    j .LBB8_5344; CHECK-NEXT:  .LBB8_2: # %vector.ph345; CHECK-NEXT:    addi a2, a3, -1346; CHECK-NEXT:    andi a4, a2, 1024347; CHECK-NEXT:    xori a2, a4, 1024348; CHECK-NEXT:    slli a5, a5, 1349; CHECK-NEXT:    mv a6, a0350; CHECK-NEXT:    mv a7, a2351; CHECK-NEXT:    vsetvli t0, zero, e32, m2, ta, ma352; CHECK-NEXT:  .LBB8_3: # %vector.body353; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1354; CHECK-NEXT:    vl2re32.v v8, (a6)355; CHECK-NEXT:    sub a7, a7, a3356; CHECK-NEXT:    vadd.vx v8, v8, a1357; CHECK-NEXT:    vs2r.v v8, (a6)358; CHECK-NEXT:    add a6, a6, a5359; CHECK-NEXT:    bnez a7, .LBB8_3360; CHECK-NEXT:  # %bb.4: # %middle.block361; CHECK-NEXT:    beqz a4, .LBB8_7362; CHECK-NEXT:  .LBB8_5: # %for.body.preheader363; CHECK-NEXT:    slli a2, a2, 2364; CHECK-NEXT:    lui a3, 1365; CHECK-NEXT:    add a2, a0, a2366; CHECK-NEXT:    add a0, a0, a3367; CHECK-NEXT:  .LBB8_6: # %for.body368; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1369; CHECK-NEXT:    lw a3, 0(a2)370; CHECK-NEXT:    add a3, a3, a1371; CHECK-NEXT:    sw a3, 0(a2)372; CHECK-NEXT:    addi a2, a2, 4373; CHECK-NEXT:    bne a2, a0, .LBB8_6374; CHECK-NEXT:  .LBB8_7: # %for.cond.cleanup375; CHECK-NEXT:    ret376entry:377  %0 = call i64 @llvm.vscale.i64()378  %1 = shl i64 %0, 2379  %min.iters.check = icmp ugt i64 %1, 1024380  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph381 382vector.ph:                                        ; preds = %entry383  %2 = call i64 @llvm.vscale.i64()384  %3 = shl i64 %2, 2385  %n.mod.vf = urem i64 1024, %3386  %n.vec = sub nsw i64 1024, %n.mod.vf387  %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %x, i32 0388  %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer389  %4 = call i64 @llvm.vscale.i64()390  %5 = shl i64 %4, 2391  br label %vector.body392 393vector.body:                                      ; preds = %vector.body, %vector.ph394  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]395  %6 = getelementptr inbounds i32, ptr %a, i64 %index396  %wide.load = load <vscale x 4 x i32>, ptr %6, align 4397  %7 = add <vscale x 4 x i32> %wide.load, %broadcast.splat398  store <vscale x 4 x i32> %7, ptr %6, align 4399  %index.next = add nuw i64 %index, %5400  %8 = icmp eq i64 %index.next, %n.vec401  br i1 %8, label %middle.block, label %vector.body402 403middle.block:                                     ; preds = %vector.body404  %cmp.n = icmp eq i64 %n.mod.vf, 0405  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader406 407for.body.preheader:                               ; preds = %entry, %middle.block408  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]409  br label %for.body410 411for.cond.cleanup:                                 ; preds = %for.body, %middle.block412  ret void413 414for.body:                                         ; preds = %for.body.preheader, %for.body415  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]416  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv417  %9 = load i32, ptr %arrayidx, align 4418  %add = add i32 %9, %x419  store i32 %add, ptr %arrayidx, align 4420  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1421  %cmp.not = icmp eq i64 %indvars.iv.next, 1024422  br i1 %cmp.not, label %for.cond.cleanup, label %for.body423}424 425define void @sink_splat_sub_scalable(ptr nocapture %a, i32 signext %x) {426; CHECK-LABEL: sink_splat_sub_scalable:427; CHECK:       # %bb.0: # %entry428; CHECK-NEXT:    csrr a5, vlenb429; CHECK-NEXT:    srli a3, a5, 1430; CHECK-NEXT:    li a2, 1024431; CHECK-NEXT:    bgeu a2, a3, .LBB9_2432; CHECK-NEXT:  # %bb.1:433; CHECK-NEXT:    li a2, 0434; CHECK-NEXT:    j .LBB9_5435; CHECK-NEXT:  .LBB9_2: # %vector.ph436; CHECK-NEXT:    addi a2, a3, -1437; CHECK-NEXT:    andi a4, a2, 1024438; CHECK-NEXT:    xori a2, a4, 1024439; CHECK-NEXT:    slli a5, a5, 1440; CHECK-NEXT:    mv a6, a0441; CHECK-NEXT:    mv a7, a2442; CHECK-NEXT:    vsetvli t0, zero, e32, m2, ta, ma443; CHECK-NEXT:  .LBB9_3: # %vector.body444; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1445; CHECK-NEXT:    vl2re32.v v8, (a6)446; CHECK-NEXT:    sub a7, a7, a3447; CHECK-NEXT:    vsub.vx v8, v8, a1448; CHECK-NEXT:    vs2r.v v8, (a6)449; CHECK-NEXT:    add a6, a6, a5450; CHECK-NEXT:    bnez a7, .LBB9_3451; CHECK-NEXT:  # %bb.4: # %middle.block452; CHECK-NEXT:    beqz a4, .LBB9_7453; CHECK-NEXT:  .LBB9_5: # %for.body.preheader454; CHECK-NEXT:    slli a2, a2, 2455; CHECK-NEXT:    lui a3, 1456; CHECK-NEXT:    add a2, a0, a2457; CHECK-NEXT:    add a0, a0, a3458; CHECK-NEXT:  .LBB9_6: # %for.body459; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1460; CHECK-NEXT:    lw a3, 0(a2)461; CHECK-NEXT:    add a3, a3, a1462; CHECK-NEXT:    sw a3, 0(a2)463; CHECK-NEXT:    addi a2, a2, 4464; CHECK-NEXT:    bne a2, a0, .LBB9_6465; CHECK-NEXT:  .LBB9_7: # %for.cond.cleanup466; CHECK-NEXT:    ret467entry:468  %0 = call i64 @llvm.vscale.i64()469  %1 = shl i64 %0, 2470  %min.iters.check = icmp ugt i64 %1, 1024471  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph472 473vector.ph:                                        ; preds = %entry474  %2 = call i64 @llvm.vscale.i64()475  %3 = shl i64 %2, 2476  %n.mod.vf = urem i64 1024, %3477  %n.vec = sub nsw i64 1024, %n.mod.vf478  %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %x, i32 0479  %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer480  %4 = call i64 @llvm.vscale.i64()481  %5 = shl i64 %4, 2482  br label %vector.body483 484vector.body:                                      ; preds = %vector.body, %vector.ph485  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]486  %6 = getelementptr inbounds i32, ptr %a, i64 %index487  %wide.load = load <vscale x 4 x i32>, ptr %6, align 4488  %7 = sub <vscale x 4 x i32> %wide.load, %broadcast.splat489  store <vscale x 4 x i32> %7, ptr %6, align 4490  %index.next = add nuw i64 %index, %5491  %8 = icmp eq i64 %index.next, %n.vec492  br i1 %8, label %middle.block, label %vector.body493 494middle.block:                                     ; preds = %vector.body495  %cmp.n = icmp eq i64 %n.mod.vf, 0496  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader497 498for.body.preheader:                               ; preds = %entry, %middle.block499  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]500  br label %for.body501 502for.cond.cleanup:                                 ; preds = %for.body, %middle.block503  ret void504 505for.body:                                         ; preds = %for.body.preheader, %for.body506  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]507  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv508  %9 = load i32, ptr %arrayidx, align 4509  %add = add i32 %9, %x510  store i32 %add, ptr %arrayidx, align 4511  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1512  %cmp.not = icmp eq i64 %indvars.iv.next, 1024513  br i1 %cmp.not, label %for.cond.cleanup, label %for.body514}515 516define void @sink_splat_rsub_scalable(ptr nocapture %a, i32 signext %x) {517; CHECK-LABEL: sink_splat_rsub_scalable:518; CHECK:       # %bb.0: # %entry519; CHECK-NEXT:    csrr a5, vlenb520; CHECK-NEXT:    srli a3, a5, 1521; CHECK-NEXT:    li a2, 1024522; CHECK-NEXT:    bgeu a2, a3, .LBB10_2523; CHECK-NEXT:  # %bb.1:524; CHECK-NEXT:    li a2, 0525; CHECK-NEXT:    j .LBB10_5526; CHECK-NEXT:  .LBB10_2: # %vector.ph527; CHECK-NEXT:    addi a2, a3, -1528; CHECK-NEXT:    andi a4, a2, 1024529; CHECK-NEXT:    xori a2, a4, 1024530; CHECK-NEXT:    slli a5, a5, 1531; CHECK-NEXT:    mv a6, a0532; CHECK-NEXT:    mv a7, a2533; CHECK-NEXT:    vsetvli t0, zero, e32, m2, ta, ma534; CHECK-NEXT:  .LBB10_3: # %vector.body535; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1536; CHECK-NEXT:    vl2re32.v v8, (a6)537; CHECK-NEXT:    sub a7, a7, a3538; CHECK-NEXT:    vrsub.vx v8, v8, a1539; CHECK-NEXT:    vs2r.v v8, (a6)540; CHECK-NEXT:    add a6, a6, a5541; CHECK-NEXT:    bnez a7, .LBB10_3542; CHECK-NEXT:  # %bb.4: # %middle.block543; CHECK-NEXT:    beqz a4, .LBB10_7544; CHECK-NEXT:  .LBB10_5: # %for.body.preheader545; CHECK-NEXT:    slli a2, a2, 2546; CHECK-NEXT:    lui a3, 1547; CHECK-NEXT:    add a2, a0, a2548; CHECK-NEXT:    add a0, a0, a3549; CHECK-NEXT:  .LBB10_6: # %for.body550; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1551; CHECK-NEXT:    lw a3, 0(a2)552; CHECK-NEXT:    sub a3, a1, a3553; CHECK-NEXT:    sw a3, 0(a2)554; CHECK-NEXT:    addi a2, a2, 4555; CHECK-NEXT:    bne a2, a0, .LBB10_6556; CHECK-NEXT:  .LBB10_7: # %for.cond.cleanup557; CHECK-NEXT:    ret558entry:559  %0 = call i64 @llvm.vscale.i64()560  %1 = shl i64 %0, 2561  %min.iters.check = icmp ugt i64 %1, 1024562  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph563 564vector.ph:                                        ; preds = %entry565  %2 = call i64 @llvm.vscale.i64()566  %3 = shl i64 %2, 2567  %n.mod.vf = urem i64 1024, %3568  %n.vec = sub nsw i64 1024, %n.mod.vf569  %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %x, i32 0570  %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer571  %4 = call i64 @llvm.vscale.i64()572  %5 = shl i64 %4, 2573  br label %vector.body574 575vector.body:                                      ; preds = %vector.body, %vector.ph576  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]577  %6 = getelementptr inbounds i32, ptr %a, i64 %index578  %wide.load = load <vscale x 4 x i32>, ptr %6, align 4579  %7 = sub <vscale x 4 x i32> %broadcast.splat, %wide.load580  store <vscale x 4 x i32> %7, ptr %6, align 4581  %index.next = add nuw i64 %index, %5582  %8 = icmp eq i64 %index.next, %n.vec583  br i1 %8, label %middle.block, label %vector.body584 585middle.block:                                     ; preds = %vector.body586  %cmp.n = icmp eq i64 %n.mod.vf, 0587  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader588 589for.body.preheader:                               ; preds = %entry, %middle.block590  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]591  br label %for.body592 593for.cond.cleanup:                                 ; preds = %for.body, %middle.block594  ret void595 596for.body:                                         ; preds = %for.body.preheader, %for.body597  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]598  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv599  %9 = load i32, ptr %arrayidx, align 4600  %add = sub i32 %x, %9601  store i32 %add, ptr %arrayidx, align 4602  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1603  %cmp.not = icmp eq i64 %indvars.iv.next, 1024604  br i1 %cmp.not, label %for.cond.cleanup, label %for.body605}606 607define void @sink_splat_and_scalable(ptr nocapture %a, i32 signext %x) {608; CHECK-LABEL: sink_splat_and_scalable:609; CHECK:       # %bb.0: # %entry610; CHECK-NEXT:    csrr a5, vlenb611; CHECK-NEXT:    srli a3, a5, 1612; CHECK-NEXT:    li a2, 1024613; CHECK-NEXT:    bgeu a2, a3, .LBB11_2614; CHECK-NEXT:  # %bb.1:615; CHECK-NEXT:    li a2, 0616; CHECK-NEXT:    j .LBB11_5617; CHECK-NEXT:  .LBB11_2: # %vector.ph618; CHECK-NEXT:    addi a2, a3, -1619; CHECK-NEXT:    andi a4, a2, 1024620; CHECK-NEXT:    xori a2, a4, 1024621; CHECK-NEXT:    slli a5, a5, 1622; CHECK-NEXT:    mv a6, a0623; CHECK-NEXT:    mv a7, a2624; CHECK-NEXT:    vsetvli t0, zero, e32, m2, ta, ma625; CHECK-NEXT:  .LBB11_3: # %vector.body626; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1627; CHECK-NEXT:    vl2re32.v v8, (a6)628; CHECK-NEXT:    sub a7, a7, a3629; CHECK-NEXT:    vand.vx v8, v8, a1630; CHECK-NEXT:    vs2r.v v8, (a6)631; CHECK-NEXT:    add a6, a6, a5632; CHECK-NEXT:    bnez a7, .LBB11_3633; CHECK-NEXT:  # %bb.4: # %middle.block634; CHECK-NEXT:    beqz a4, .LBB11_7635; CHECK-NEXT:  .LBB11_5: # %for.body.preheader636; CHECK-NEXT:    slli a2, a2, 2637; CHECK-NEXT:    lui a3, 1638; CHECK-NEXT:    add a2, a0, a2639; CHECK-NEXT:    add a0, a0, a3640; CHECK-NEXT:  .LBB11_6: # %for.body641; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1642; CHECK-NEXT:    lw a3, 0(a2)643; CHECK-NEXT:    and a3, a3, a1644; CHECK-NEXT:    sw a3, 0(a2)645; CHECK-NEXT:    addi a2, a2, 4646; CHECK-NEXT:    bne a2, a0, .LBB11_6647; CHECK-NEXT:  .LBB11_7: # %for.cond.cleanup648; CHECK-NEXT:    ret649entry:650  %0 = call i64 @llvm.vscale.i64()651  %1 = shl i64 %0, 2652  %min.iters.check = icmp ugt i64 %1, 1024653  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph654 655vector.ph:                                        ; preds = %entry656  %2 = call i64 @llvm.vscale.i64()657  %3 = shl i64 %2, 2658  %n.mod.vf = urem i64 1024, %3659  %n.vec = sub nsw i64 1024, %n.mod.vf660  %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %x, i32 0661  %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer662  %4 = call i64 @llvm.vscale.i64()663  %5 = shl i64 %4, 2664  br label %vector.body665 666vector.body:                                      ; preds = %vector.body, %vector.ph667  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]668  %6 = getelementptr inbounds i32, ptr %a, i64 %index669  %wide.load = load <vscale x 4 x i32>, ptr %6, align 4670  %7 = and <vscale x 4 x i32> %wide.load, %broadcast.splat671  store <vscale x 4 x i32> %7, ptr %6, align 4672  %index.next = add nuw i64 %index, %5673  %8 = icmp eq i64 %index.next, %n.vec674  br i1 %8, label %middle.block, label %vector.body675 676middle.block:                                     ; preds = %vector.body677  %cmp.n = icmp eq i64 %n.mod.vf, 0678  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader679 680for.body.preheader:                               ; preds = %entry, %middle.block681  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]682  br label %for.body683 684for.cond.cleanup:                                 ; preds = %for.body, %middle.block685  ret void686 687for.body:                                         ; preds = %for.body.preheader, %for.body688  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]689  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv690  %9 = load i32, ptr %arrayidx, align 4691  %and = and i32 %9, %x692  store i32 %and, ptr %arrayidx, align 4693  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1694  %cmp.not = icmp eq i64 %indvars.iv.next, 1024695  br i1 %cmp.not, label %for.cond.cleanup, label %for.body696}697 698define void @sink_splat_or_scalable(ptr nocapture %a, i32 signext %x) {699; CHECK-LABEL: sink_splat_or_scalable:700; CHECK:       # %bb.0: # %entry701; CHECK-NEXT:    csrr a5, vlenb702; CHECK-NEXT:    srli a3, a5, 1703; CHECK-NEXT:    li a2, 1024704; CHECK-NEXT:    bgeu a2, a3, .LBB12_2705; CHECK-NEXT:  # %bb.1:706; CHECK-NEXT:    li a2, 0707; CHECK-NEXT:    j .LBB12_5708; CHECK-NEXT:  .LBB12_2: # %vector.ph709; CHECK-NEXT:    addi a2, a3, -1710; CHECK-NEXT:    andi a4, a2, 1024711; CHECK-NEXT:    xori a2, a4, 1024712; CHECK-NEXT:    slli a5, a5, 1713; CHECK-NEXT:    mv a6, a0714; CHECK-NEXT:    mv a7, a2715; CHECK-NEXT:    vsetvli t0, zero, e32, m2, ta, ma716; CHECK-NEXT:  .LBB12_3: # %vector.body717; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1718; CHECK-NEXT:    vl2re32.v v8, (a6)719; CHECK-NEXT:    sub a7, a7, a3720; CHECK-NEXT:    vor.vx v8, v8, a1721; CHECK-NEXT:    vs2r.v v8, (a6)722; CHECK-NEXT:    add a6, a6, a5723; CHECK-NEXT:    bnez a7, .LBB12_3724; CHECK-NEXT:  # %bb.4: # %middle.block725; CHECK-NEXT:    beqz a4, .LBB12_7726; CHECK-NEXT:  .LBB12_5: # %for.body.preheader727; CHECK-NEXT:    slli a2, a2, 2728; CHECK-NEXT:    lui a3, 1729; CHECK-NEXT:    add a2, a0, a2730; CHECK-NEXT:    add a0, a0, a3731; CHECK-NEXT:  .LBB12_6: # %for.body732; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1733; CHECK-NEXT:    lw a3, 0(a2)734; CHECK-NEXT:    or a3, a3, a1735; CHECK-NEXT:    sw a3, 0(a2)736; CHECK-NEXT:    addi a2, a2, 4737; CHECK-NEXT:    bne a2, a0, .LBB12_6738; CHECK-NEXT:  .LBB12_7: # %for.cond.cleanup739; CHECK-NEXT:    ret740entry:741  %0 = call i64 @llvm.vscale.i64()742  %1 = shl i64 %0, 2743  %min.iters.check = icmp ugt i64 %1, 1024744  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph745 746vector.ph:                                        ; preds = %entry747  %2 = call i64 @llvm.vscale.i64()748  %3 = shl i64 %2, 2749  %n.mod.vf = urem i64 1024, %3750  %n.vec = sub nsw i64 1024, %n.mod.vf751  %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %x, i32 0752  %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer753  %4 = call i64 @llvm.vscale.i64()754  %5 = shl i64 %4, 2755  br label %vector.body756 757vector.body:                                      ; preds = %vector.body, %vector.ph758  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]759  %6 = getelementptr inbounds i32, ptr %a, i64 %index760  %wide.load = load <vscale x 4 x i32>, ptr %6, align 4761  %7 = or <vscale x 4 x i32> %wide.load, %broadcast.splat762  store <vscale x 4 x i32> %7, ptr %6, align 4763  %index.next = add nuw i64 %index, %5764  %8 = icmp eq i64 %index.next, %n.vec765  br i1 %8, label %middle.block, label %vector.body766 767middle.block:                                     ; preds = %vector.body768  %cmp.n = icmp eq i64 %n.mod.vf, 0769  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader770 771for.body.preheader:                               ; preds = %entry, %middle.block772  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]773  br label %for.body774 775for.cond.cleanup:                                 ; preds = %for.body, %middle.block776  ret void777 778for.body:                                         ; preds = %for.body.preheader, %for.body779  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]780  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv781  %9 = load i32, ptr %arrayidx, align 4782  %or = or i32 %9, %x783  store i32 %or, ptr %arrayidx, align 4784  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1785  %cmp.not = icmp eq i64 %indvars.iv.next, 1024786  br i1 %cmp.not, label %for.cond.cleanup, label %for.body787}788 789define void @sink_splat_xor_scalable(ptr nocapture %a, i32 signext %x) {790; CHECK-LABEL: sink_splat_xor_scalable:791; CHECK:       # %bb.0: # %entry792; CHECK-NEXT:    csrr a5, vlenb793; CHECK-NEXT:    srli a3, a5, 1794; CHECK-NEXT:    li a2, 1024795; CHECK-NEXT:    bgeu a2, a3, .LBB13_2796; CHECK-NEXT:  # %bb.1:797; CHECK-NEXT:    li a2, 0798; CHECK-NEXT:    j .LBB13_5799; CHECK-NEXT:  .LBB13_2: # %vector.ph800; CHECK-NEXT:    addi a2, a3, -1801; CHECK-NEXT:    andi a4, a2, 1024802; CHECK-NEXT:    xori a2, a4, 1024803; CHECK-NEXT:    slli a5, a5, 1804; CHECK-NEXT:    mv a6, a0805; CHECK-NEXT:    mv a7, a2806; CHECK-NEXT:    vsetvli t0, zero, e32, m2, ta, ma807; CHECK-NEXT:  .LBB13_3: # %vector.body808; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1809; CHECK-NEXT:    vl2re32.v v8, (a6)810; CHECK-NEXT:    sub a7, a7, a3811; CHECK-NEXT:    vxor.vx v8, v8, a1812; CHECK-NEXT:    vs2r.v v8, (a6)813; CHECK-NEXT:    add a6, a6, a5814; CHECK-NEXT:    bnez a7, .LBB13_3815; CHECK-NEXT:  # %bb.4: # %middle.block816; CHECK-NEXT:    beqz a4, .LBB13_7817; CHECK-NEXT:  .LBB13_5: # %for.body.preheader818; CHECK-NEXT:    slli a2, a2, 2819; CHECK-NEXT:    lui a3, 1820; CHECK-NEXT:    add a2, a0, a2821; CHECK-NEXT:    add a0, a0, a3822; CHECK-NEXT:  .LBB13_6: # %for.body823; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1824; CHECK-NEXT:    lw a3, 0(a2)825; CHECK-NEXT:    xor a3, a3, a1826; CHECK-NEXT:    sw a3, 0(a2)827; CHECK-NEXT:    addi a2, a2, 4828; CHECK-NEXT:    bne a2, a0, .LBB13_6829; CHECK-NEXT:  .LBB13_7: # %for.cond.cleanup830; CHECK-NEXT:    ret831entry:832  %0 = call i64 @llvm.vscale.i64()833  %1 = shl i64 %0, 2834  %min.iters.check = icmp ugt i64 %1, 1024835  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph836 837vector.ph:                                        ; preds = %entry838  %2 = call i64 @llvm.vscale.i64()839  %3 = shl i64 %2, 2840  %n.mod.vf = urem i64 1024, %3841  %n.vec = sub nsw i64 1024, %n.mod.vf842  %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %x, i32 0843  %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer844  %4 = call i64 @llvm.vscale.i64()845  %5 = shl i64 %4, 2846  br label %vector.body847 848vector.body:                                      ; preds = %vector.body, %vector.ph849  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]850  %6 = getelementptr inbounds i32, ptr %a, i64 %index851  %wide.load = load <vscale x 4 x i32>, ptr %6, align 4852  %7 = xor <vscale x 4 x i32> %wide.load, %broadcast.splat853  store <vscale x 4 x i32> %7, ptr %6, align 4854  %index.next = add nuw i64 %index, %5855  %8 = icmp eq i64 %index.next, %n.vec856  br i1 %8, label %middle.block, label %vector.body857 858middle.block:                                     ; preds = %vector.body859  %cmp.n = icmp eq i64 %n.mod.vf, 0860  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader861 862for.body.preheader:                               ; preds = %entry, %middle.block863  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]864  br label %for.body865 866for.cond.cleanup:                                 ; preds = %for.body, %middle.block867  ret void868 869for.body:                                         ; preds = %for.body.preheader, %for.body870  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]871  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv872  %9 = load i32, ptr %arrayidx, align 4873  %xor = xor i32 %9, %x874  store i32 %xor, ptr %arrayidx, align 4875  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1876  %cmp.not = icmp eq i64 %indvars.iv.next, 1024877  br i1 %cmp.not, label %for.cond.cleanup, label %for.body878}879 880define void @sink_splat_shl(ptr nocapture %a, i32 signext %x) {881; CHECK-LABEL: sink_splat_shl:882; CHECK:       # %bb.0: # %entry883; CHECK-NEXT:    lui a2, 1884; CHECK-NEXT:    add a2, a0, a2885; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma886; CHECK-NEXT:  .LBB14_1: # %vector.body887; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1888; CHECK-NEXT:    vle32.v v8, (a0)889; CHECK-NEXT:    vsll.vx v8, v8, a1890; CHECK-NEXT:    vse32.v v8, (a0)891; CHECK-NEXT:    addi a0, a0, 16892; CHECK-NEXT:    bne a0, a2, .LBB14_1893; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup894; CHECK-NEXT:    ret895entry:896  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 0897  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer898  br label %vector.body899 900vector.body:                                      ; preds = %vector.body, %entry901  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]902  %0 = getelementptr inbounds i32, ptr %a, i64 %index903  %wide.load = load <4 x i32>, ptr %0, align 4904  %1 = shl <4 x i32> %wide.load, %broadcast.splat905  store <4 x i32> %1, ptr %0, align 4906  %index.next = add nuw i64 %index, 4907  %2 = icmp eq i64 %index.next, 1024908  br i1 %2, label %for.cond.cleanup, label %vector.body909 910for.cond.cleanup:                                 ; preds = %vector.body911  ret void912}913 914define void @sink_splat_lshr(ptr nocapture %a, i32 signext %x) {915; CHECK-LABEL: sink_splat_lshr:916; CHECK:       # %bb.0: # %entry917; CHECK-NEXT:    lui a2, 1918; CHECK-NEXT:    add a2, a0, a2919; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma920; CHECK-NEXT:  .LBB15_1: # %vector.body921; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1922; CHECK-NEXT:    vle32.v v8, (a0)923; CHECK-NEXT:    vsrl.vx v8, v8, a1924; CHECK-NEXT:    vse32.v v8, (a0)925; CHECK-NEXT:    addi a0, a0, 16926; CHECK-NEXT:    bne a0, a2, .LBB15_1927; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup928; CHECK-NEXT:    ret929entry:930  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 0931  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer932  br label %vector.body933 934vector.body:                                      ; preds = %vector.body, %entry935  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]936  %0 = getelementptr inbounds i32, ptr %a, i64 %index937  %wide.load = load <4 x i32>, ptr %0, align 4938  %1 = lshr <4 x i32> %wide.load, %broadcast.splat939  store <4 x i32> %1, ptr %0, align 4940  %index.next = add nuw i64 %index, 4941  %2 = icmp eq i64 %index.next, 1024942  br i1 %2, label %for.cond.cleanup, label %vector.body943 944for.cond.cleanup:                                 ; preds = %vector.body945  ret void946}947 948define void @sink_splat_ashr(ptr nocapture %a, i32 signext %x) {949; CHECK-LABEL: sink_splat_ashr:950; CHECK:       # %bb.0: # %entry951; CHECK-NEXT:    lui a2, 1952; CHECK-NEXT:    add a2, a0, a2953; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma954; CHECK-NEXT:  .LBB16_1: # %vector.body955; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1956; CHECK-NEXT:    vle32.v v8, (a0)957; CHECK-NEXT:    vsra.vx v8, v8, a1958; CHECK-NEXT:    vse32.v v8, (a0)959; CHECK-NEXT:    addi a0, a0, 16960; CHECK-NEXT:    bne a0, a2, .LBB16_1961; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup962; CHECK-NEXT:    ret963entry:964  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 0965  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer966  br label %vector.body967 968vector.body:                                      ; preds = %vector.body, %entry969  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]970  %0 = getelementptr inbounds i32, ptr %a, i64 %index971  %wide.load = load <4 x i32>, ptr %0, align 4972  %1 = ashr <4 x i32> %wide.load, %broadcast.splat973  store <4 x i32> %1, ptr %0, align 4974  %index.next = add nuw i64 %index, 4975  %2 = icmp eq i64 %index.next, 1024976  br i1 %2, label %for.cond.cleanup, label %vector.body977 978for.cond.cleanup:                                 ; preds = %vector.body979  ret void980}981 982define void @sink_splat_shl_scalable(ptr nocapture %a, i32 signext %x) {983; CHECK-LABEL: sink_splat_shl_scalable:984; CHECK:       # %bb.0: # %entry985; CHECK-NEXT:    csrr a5, vlenb986; CHECK-NEXT:    srli a3, a5, 1987; CHECK-NEXT:    li a2, 1024988; CHECK-NEXT:    bgeu a2, a3, .LBB17_2989; CHECK-NEXT:  # %bb.1:990; CHECK-NEXT:    li a2, 0991; CHECK-NEXT:    j .LBB17_5992; CHECK-NEXT:  .LBB17_2: # %vector.ph993; CHECK-NEXT:    addi a2, a3, -1994; CHECK-NEXT:    andi a4, a2, 1024995; CHECK-NEXT:    xori a2, a4, 1024996; CHECK-NEXT:    slli a5, a5, 1997; CHECK-NEXT:    mv a6, a0998; CHECK-NEXT:    mv a7, a2999; CHECK-NEXT:    vsetvli t0, zero, e32, m2, ta, ma1000; CHECK-NEXT:  .LBB17_3: # %vector.body1001; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11002; CHECK-NEXT:    vl2re32.v v8, (a6)1003; CHECK-NEXT:    sub a7, a7, a31004; CHECK-NEXT:    vsll.vx v8, v8, a11005; CHECK-NEXT:    vs2r.v v8, (a6)1006; CHECK-NEXT:    add a6, a6, a51007; CHECK-NEXT:    bnez a7, .LBB17_31008; CHECK-NEXT:  # %bb.4: # %middle.block1009; CHECK-NEXT:    beqz a4, .LBB17_71010; CHECK-NEXT:  .LBB17_5: # %for.body.preheader1011; CHECK-NEXT:    slli a2, a2, 21012; CHECK-NEXT:    lui a3, 11013; CHECK-NEXT:    add a2, a0, a21014; CHECK-NEXT:    add a0, a0, a31015; CHECK-NEXT:  .LBB17_6: # %for.body1016; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11017; CHECK-NEXT:    lw a3, 0(a2)1018; CHECK-NEXT:    sllw a3, a3, a11019; CHECK-NEXT:    sw a3, 0(a2)1020; CHECK-NEXT:    addi a2, a2, 41021; CHECK-NEXT:    bne a2, a0, .LBB17_61022; CHECK-NEXT:  .LBB17_7: # %for.cond.cleanup1023; CHECK-NEXT:    ret1024entry:1025  %0 = call i64 @llvm.vscale.i64()1026  %1 = shl i64 %0, 21027  %min.iters.check = icmp ugt i64 %1, 10241028  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph1029 1030vector.ph:                                        ; preds = %entry1031  %2 = call i64 @llvm.vscale.i64()1032  %3 = shl i64 %2, 21033  %n.mod.vf = urem i64 1024, %31034  %n.vec = sub nsw i64 1024, %n.mod.vf1035  %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %x, i32 01036  %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1037  %4 = call i64 @llvm.vscale.i64()1038  %5 = shl i64 %4, 21039  br label %vector.body1040 1041vector.body:                                      ; preds = %vector.body, %vector.ph1042  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]1043  %6 = getelementptr inbounds i32, ptr %a, i64 %index1044  %wide.load = load <vscale x 4 x i32>, ptr %6, align 41045  %7 = shl <vscale x 4 x i32> %wide.load, %broadcast.splat1046  store <vscale x 4 x i32> %7, ptr %6, align 41047  %index.next = add nuw i64 %index, %51048  %8 = icmp eq i64 %index.next, %n.vec1049  br i1 %8, label %middle.block, label %vector.body1050 1051middle.block:                                     ; preds = %vector.body1052  %cmp.n = icmp eq i64 %n.mod.vf, 01053  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1054 1055for.body.preheader:                               ; preds = %entry, %middle.block1056  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]1057  br label %for.body1058 1059for.cond.cleanup:                                 ; preds = %for.body, %middle.block1060  ret void1061 1062for.body:                                         ; preds = %for.body.preheader, %for.body1063  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]1064  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv1065  %9 = load i32, ptr %arrayidx, align 41066  %shl = shl i32 %9, %x1067  store i32 %shl, ptr %arrayidx, align 41068  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11069  %cmp.not = icmp eq i64 %indvars.iv.next, 10241070  br i1 %cmp.not, label %for.cond.cleanup, label %for.body1071}1072 1073define void @sink_splat_lshr_scalable(ptr nocapture %a, i32 signext %x) {1074; CHECK-LABEL: sink_splat_lshr_scalable:1075; CHECK:       # %bb.0: # %entry1076; CHECK-NEXT:    csrr a5, vlenb1077; CHECK-NEXT:    srli a3, a5, 11078; CHECK-NEXT:    li a2, 10241079; CHECK-NEXT:    bgeu a2, a3, .LBB18_21080; CHECK-NEXT:  # %bb.1:1081; CHECK-NEXT:    li a2, 01082; CHECK-NEXT:    j .LBB18_51083; CHECK-NEXT:  .LBB18_2: # %vector.ph1084; CHECK-NEXT:    addi a2, a3, -11085; CHECK-NEXT:    andi a4, a2, 10241086; CHECK-NEXT:    xori a2, a4, 10241087; CHECK-NEXT:    slli a5, a5, 11088; CHECK-NEXT:    mv a6, a01089; CHECK-NEXT:    mv a7, a21090; CHECK-NEXT:    vsetvli t0, zero, e32, m2, ta, ma1091; CHECK-NEXT:  .LBB18_3: # %vector.body1092; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11093; CHECK-NEXT:    vl2re32.v v8, (a6)1094; CHECK-NEXT:    sub a7, a7, a31095; CHECK-NEXT:    vsrl.vx v8, v8, a11096; CHECK-NEXT:    vs2r.v v8, (a6)1097; CHECK-NEXT:    add a6, a6, a51098; CHECK-NEXT:    bnez a7, .LBB18_31099; CHECK-NEXT:  # %bb.4: # %middle.block1100; CHECK-NEXT:    beqz a4, .LBB18_71101; CHECK-NEXT:  .LBB18_5: # %for.body.preheader1102; CHECK-NEXT:    slli a2, a2, 21103; CHECK-NEXT:    lui a3, 11104; CHECK-NEXT:    add a2, a0, a21105; CHECK-NEXT:    add a0, a0, a31106; CHECK-NEXT:  .LBB18_6: # %for.body1107; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11108; CHECK-NEXT:    lw a3, 0(a2)1109; CHECK-NEXT:    srlw a3, a3, a11110; CHECK-NEXT:    sw a3, 0(a2)1111; CHECK-NEXT:    addi a2, a2, 41112; CHECK-NEXT:    bne a2, a0, .LBB18_61113; CHECK-NEXT:  .LBB18_7: # %for.cond.cleanup1114; CHECK-NEXT:    ret1115entry:1116  %0 = call i64 @llvm.vscale.i64()1117  %1 = shl i64 %0, 21118  %min.iters.check = icmp ugt i64 %1, 10241119  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph1120 1121vector.ph:                                        ; preds = %entry1122  %2 = call i64 @llvm.vscale.i64()1123  %3 = shl i64 %2, 21124  %n.mod.vf = urem i64 1024, %31125  %n.vec = sub nsw i64 1024, %n.mod.vf1126  %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %x, i32 01127  %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1128  %4 = call i64 @llvm.vscale.i64()1129  %5 = shl i64 %4, 21130  br label %vector.body1131 1132vector.body:                                      ; preds = %vector.body, %vector.ph1133  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]1134  %6 = getelementptr inbounds i32, ptr %a, i64 %index1135  %wide.load = load <vscale x 4 x i32>, ptr %6, align 41136  %7 = lshr <vscale x 4 x i32> %wide.load, %broadcast.splat1137  store <vscale x 4 x i32> %7, ptr %6, align 41138  %index.next = add nuw i64 %index, %51139  %8 = icmp eq i64 %index.next, %n.vec1140  br i1 %8, label %middle.block, label %vector.body1141 1142middle.block:                                     ; preds = %vector.body1143  %cmp.n = icmp eq i64 %n.mod.vf, 01144  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1145 1146for.body.preheader:                               ; preds = %entry, %middle.block1147  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]1148  br label %for.body1149 1150for.cond.cleanup:                                 ; preds = %for.body, %middle.block1151  ret void1152 1153for.body:                                         ; preds = %for.body.preheader, %for.body1154  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]1155  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv1156  %9 = load i32, ptr %arrayidx, align 41157  %lshr = lshr i32 %9, %x1158  store i32 %lshr, ptr %arrayidx, align 41159  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11160  %cmp.not = icmp eq i64 %indvars.iv.next, 10241161  br i1 %cmp.not, label %for.cond.cleanup, label %for.body1162}1163 1164define void @sink_splat_ashr_scalable(ptr nocapture %a) {1165; CHECK-LABEL: sink_splat_ashr_scalable:1166; CHECK:       # %bb.0: # %entry1167; CHECK-NEXT:    csrr a4, vlenb1168; CHECK-NEXT:    srli a2, a4, 11169; CHECK-NEXT:    li a1, 10241170; CHECK-NEXT:    bgeu a1, a2, .LBB19_21171; CHECK-NEXT:  # %bb.1:1172; CHECK-NEXT:    li a1, 01173; CHECK-NEXT:    j .LBB19_51174; CHECK-NEXT:  .LBB19_2: # %vector.ph1175; CHECK-NEXT:    addi a1, a2, -11176; CHECK-NEXT:    andi a3, a1, 10241177; CHECK-NEXT:    xori a1, a3, 10241178; CHECK-NEXT:    slli a4, a4, 11179; CHECK-NEXT:    mv a5, a01180; CHECK-NEXT:    mv a6, a11181; CHECK-NEXT:    vsetvli a7, zero, e32, m2, ta, ma1182; CHECK-NEXT:  .LBB19_3: # %vector.body1183; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11184; CHECK-NEXT:    vl2re32.v v8, (a5)1185; CHECK-NEXT:    sub a6, a6, a21186; CHECK-NEXT:    vsra.vi v8, v8, 21187; CHECK-NEXT:    vs2r.v v8, (a5)1188; CHECK-NEXT:    add a5, a5, a41189; CHECK-NEXT:    bnez a6, .LBB19_31190; CHECK-NEXT:  # %bb.4: # %middle.block1191; CHECK-NEXT:    beqz a3, .LBB19_71192; CHECK-NEXT:  .LBB19_5: # %for.body.preheader1193; CHECK-NEXT:    slli a1, a1, 21194; CHECK-NEXT:    lui a2, 11195; CHECK-NEXT:    add a1, a0, a11196; CHECK-NEXT:    add a0, a0, a21197; CHECK-NEXT:  .LBB19_6: # %for.body1198; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11199; CHECK-NEXT:    lw a2, 0(a1)1200; CHECK-NEXT:    srli a2, a2, 21201; CHECK-NEXT:    sw a2, 0(a1)1202; CHECK-NEXT:    addi a1, a1, 41203; CHECK-NEXT:    bne a1, a0, .LBB19_61204; CHECK-NEXT:  .LBB19_7: # %for.cond.cleanup1205; CHECK-NEXT:    ret1206entry:1207  %0 = call i64 @llvm.vscale.i64()1208  %1 = shl i64 %0, 21209  %min.iters.check = icmp ugt i64 %1, 10241210  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph1211 1212vector.ph:                                        ; preds = %entry1213  %2 = call i64 @llvm.vscale.i64()1214  %3 = shl i64 %2, 21215  %n.mod.vf = urem i64 1024, %31216  %n.vec = sub nsw i64 1024, %n.mod.vf1217  %4 = call i64 @llvm.vscale.i64()1218  %5 = shl i64 %4, 21219  br label %vector.body1220 1221vector.body:                                      ; preds = %vector.body, %vector.ph1222  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]1223  %6 = getelementptr inbounds i32, ptr %a, i64 %index1224  %wide.load = load <vscale x 4 x i32>, ptr %6, align 41225  %7 = ashr <vscale x 4 x i32> %wide.load, splat (i32 2)1226  store <vscale x 4 x i32> %7, ptr %6, align 41227  %index.next = add nuw i64 %index, %51228  %8 = icmp eq i64 %index.next, %n.vec1229  br i1 %8, label %middle.block, label %vector.body1230 1231middle.block:                                     ; preds = %vector.body1232  %cmp.n = icmp eq i64 %n.mod.vf, 01233  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1234 1235for.body.preheader:                               ; preds = %entry, %middle.block1236  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]1237  br label %for.body1238 1239for.cond.cleanup:                                 ; preds = %for.body, %middle.block1240  ret void1241 1242for.body:                                         ; preds = %for.body.preheader, %for.body1243  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]1244  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv1245  %9 = load i32, ptr %arrayidx, align 41246  %ashr = ashr i32 %9, 21247  store i32 %ashr, ptr %arrayidx, align 41248  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11249  %cmp.not = icmp eq i64 %indvars.iv.next, 10241250  br i1 %cmp.not, label %for.cond.cleanup, label %for.body1251}1252 1253define void @sink_splat_fmul(ptr nocapture %a, float %x) {1254; CHECK-LABEL: sink_splat_fmul:1255; CHECK:       # %bb.0: # %entry1256; CHECK-NEXT:    lui a1, 11257; CHECK-NEXT:    add a1, a0, a11258; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1259; CHECK-NEXT:  .LBB20_1: # %vector.body1260; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11261; CHECK-NEXT:    vle32.v v8, (a0)1262; CHECK-NEXT:    vfmul.vf v8, v8, fa01263; CHECK-NEXT:    vse32.v v8, (a0)1264; CHECK-NEXT:    addi a0, a0, 161265; CHECK-NEXT:    bne a0, a1, .LBB20_11266; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup1267; CHECK-NEXT:    ret1268entry:1269  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 01270  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer1271  br label %vector.body1272 1273vector.body:                                      ; preds = %vector.body, %entry1274  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]1275  %0 = getelementptr inbounds float, ptr %a, i64 %index1276  %wide.load = load <4 x float>, ptr %0, align 41277  %1 = fmul <4 x float> %wide.load, %broadcast.splat1278  store <4 x float> %1, ptr %0, align 41279  %index.next = add nuw i64 %index, 41280  %2 = icmp eq i64 %index.next, 10241281  br i1 %2, label %for.cond.cleanup, label %vector.body1282 1283for.cond.cleanup:                                 ; preds = %vector.body1284  ret void1285}1286 1287define void @sink_splat_fdiv(ptr nocapture %a, float %x) {1288; CHECK-LABEL: sink_splat_fdiv:1289; CHECK:       # %bb.0: # %entry1290; CHECK-NEXT:    lui a1, 11291; CHECK-NEXT:    add a1, a0, a11292; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1293; CHECK-NEXT:  .LBB21_1: # %vector.body1294; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11295; CHECK-NEXT:    vle32.v v8, (a0)1296; CHECK-NEXT:    vfdiv.vf v8, v8, fa01297; CHECK-NEXT:    vse32.v v8, (a0)1298; CHECK-NEXT:    addi a0, a0, 161299; CHECK-NEXT:    bne a0, a1, .LBB21_11300; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup1301; CHECK-NEXT:    ret1302entry:1303  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 01304  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer1305  br label %vector.body1306 1307vector.body:                                      ; preds = %vector.body, %entry1308  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]1309  %0 = getelementptr inbounds float, ptr %a, i64 %index1310  %wide.load = load <4 x float>, ptr %0, align 41311  %1 = fdiv <4 x float> %wide.load, %broadcast.splat1312  store <4 x float> %1, ptr %0, align 41313  %index.next = add nuw i64 %index, 41314  %2 = icmp eq i64 %index.next, 10241315  br i1 %2, label %for.cond.cleanup, label %vector.body1316 1317for.cond.cleanup:                                 ; preds = %vector.body1318  ret void1319}1320 1321define void @sink_splat_frdiv(ptr nocapture %a, float %x) {1322; CHECK-LABEL: sink_splat_frdiv:1323; CHECK:       # %bb.0: # %entry1324; CHECK-NEXT:    lui a1, 11325; CHECK-NEXT:    add a1, a0, a11326; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1327; CHECK-NEXT:  .LBB22_1: # %vector.body1328; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11329; CHECK-NEXT:    vle32.v v8, (a0)1330; CHECK-NEXT:    vfrdiv.vf v8, v8, fa01331; CHECK-NEXT:    vse32.v v8, (a0)1332; CHECK-NEXT:    addi a0, a0, 161333; CHECK-NEXT:    bne a0, a1, .LBB22_11334; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup1335; CHECK-NEXT:    ret1336entry:1337  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 01338  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer1339  br label %vector.body1340 1341vector.body:                                      ; preds = %vector.body, %entry1342  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]1343  %0 = getelementptr inbounds float, ptr %a, i64 %index1344  %wide.load = load <4 x float>, ptr %0, align 41345  %1 = fdiv <4 x float> %broadcast.splat, %wide.load1346  store <4 x float> %1, ptr %0, align 41347  %index.next = add nuw i64 %index, 41348  %2 = icmp eq i64 %index.next, 10241349  br i1 %2, label %for.cond.cleanup, label %vector.body1350 1351for.cond.cleanup:                                 ; preds = %vector.body1352  ret void1353}1354 1355define void @sink_splat_fadd(ptr nocapture %a, float %x) {1356; CHECK-LABEL: sink_splat_fadd:1357; CHECK:       # %bb.0: # %entry1358; CHECK-NEXT:    lui a1, 11359; CHECK-NEXT:    add a1, a0, a11360; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1361; CHECK-NEXT:  .LBB23_1: # %vector.body1362; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11363; CHECK-NEXT:    vle32.v v8, (a0)1364; CHECK-NEXT:    vfadd.vf v8, v8, fa01365; CHECK-NEXT:    vse32.v v8, (a0)1366; CHECK-NEXT:    addi a0, a0, 161367; CHECK-NEXT:    bne a0, a1, .LBB23_11368; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup1369; CHECK-NEXT:    ret1370entry:1371  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 01372  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer1373  br label %vector.body1374 1375vector.body:                                      ; preds = %vector.body, %entry1376  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]1377  %0 = getelementptr inbounds float, ptr %a, i64 %index1378  %wide.load = load <4 x float>, ptr %0, align 41379  %1 = fadd <4 x float> %wide.load, %broadcast.splat1380  store <4 x float> %1, ptr %0, align 41381  %index.next = add nuw i64 %index, 41382  %2 = icmp eq i64 %index.next, 10241383  br i1 %2, label %for.cond.cleanup, label %vector.body1384 1385for.cond.cleanup:                                 ; preds = %vector.body1386  ret void1387}1388 1389define void @sink_splat_fsub(ptr nocapture %a, float %x) {1390; CHECK-LABEL: sink_splat_fsub:1391; CHECK:       # %bb.0: # %entry1392; CHECK-NEXT:    lui a1, 11393; CHECK-NEXT:    add a1, a0, a11394; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1395; CHECK-NEXT:  .LBB24_1: # %vector.body1396; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11397; CHECK-NEXT:    vle32.v v8, (a0)1398; CHECK-NEXT:    vfsub.vf v8, v8, fa01399; CHECK-NEXT:    vse32.v v8, (a0)1400; CHECK-NEXT:    addi a0, a0, 161401; CHECK-NEXT:    bne a0, a1, .LBB24_11402; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup1403; CHECK-NEXT:    ret1404entry:1405  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 01406  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer1407  br label %vector.body1408 1409vector.body:                                      ; preds = %vector.body, %entry1410  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]1411  %0 = getelementptr inbounds float, ptr %a, i64 %index1412  %wide.load = load <4 x float>, ptr %0, align 41413  %1 = fsub <4 x float> %wide.load, %broadcast.splat1414  store <4 x float> %1, ptr %0, align 41415  %index.next = add nuw i64 %index, 41416  %2 = icmp eq i64 %index.next, 10241417  br i1 %2, label %for.cond.cleanup, label %vector.body1418 1419for.cond.cleanup:                                 ; preds = %vector.body1420  ret void1421}1422 1423define void @sink_splat_frsub(ptr nocapture %a, float %x) {1424; CHECK-LABEL: sink_splat_frsub:1425; CHECK:       # %bb.0: # %entry1426; CHECK-NEXT:    lui a1, 11427; CHECK-NEXT:    add a1, a0, a11428; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1429; CHECK-NEXT:  .LBB25_1: # %vector.body1430; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11431; CHECK-NEXT:    vle32.v v8, (a0)1432; CHECK-NEXT:    vfrsub.vf v8, v8, fa01433; CHECK-NEXT:    vse32.v v8, (a0)1434; CHECK-NEXT:    addi a0, a0, 161435; CHECK-NEXT:    bne a0, a1, .LBB25_11436; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup1437; CHECK-NEXT:    ret1438entry:1439  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 01440  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer1441  br label %vector.body1442 1443vector.body:                                      ; preds = %vector.body, %entry1444  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]1445  %0 = getelementptr inbounds float, ptr %a, i64 %index1446  %wide.load = load <4 x float>, ptr %0, align 41447  %1 = fsub <4 x float> %broadcast.splat, %wide.load1448  store <4 x float> %1, ptr %0, align 41449  %index.next = add nuw i64 %index, 41450  %2 = icmp eq i64 %index.next, 10241451  br i1 %2, label %for.cond.cleanup, label %vector.body1452 1453for.cond.cleanup:                                 ; preds = %vector.body1454  ret void1455}1456 1457define void @sink_splat_fmul_scalable(ptr nocapture %a, float %x) {1458; CHECK-LABEL: sink_splat_fmul_scalable:1459; CHECK:       # %bb.0: # %entry1460; CHECK-NEXT:    csrr a1, vlenb1461; CHECK-NEXT:    srli a3, a1, 21462; CHECK-NEXT:    li a2, 10241463; CHECK-NEXT:    bgeu a2, a3, .LBB26_21464; CHECK-NEXT:  # %bb.1:1465; CHECK-NEXT:    li a2, 01466; CHECK-NEXT:    j .LBB26_51467; CHECK-NEXT:  .LBB26_2: # %vector.ph1468; CHECK-NEXT:    addi a2, a3, -11469; CHECK-NEXT:    andi a4, a2, 10241470; CHECK-NEXT:    xori a2, a4, 10241471; CHECK-NEXT:    mv a5, a01472; CHECK-NEXT:    mv a6, a21473; CHECK-NEXT:    vsetvli a7, zero, e32, m1, ta, ma1474; CHECK-NEXT:  .LBB26_3: # %vector.body1475; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11476; CHECK-NEXT:    vl1re32.v v8, (a5)1477; CHECK-NEXT:    sub a6, a6, a31478; CHECK-NEXT:    vfmul.vf v8, v8, fa01479; CHECK-NEXT:    vs1r.v v8, (a5)1480; CHECK-NEXT:    add a5, a5, a11481; CHECK-NEXT:    bnez a6, .LBB26_31482; CHECK-NEXT:  # %bb.4: # %middle.block1483; CHECK-NEXT:    beqz a4, .LBB26_71484; CHECK-NEXT:  .LBB26_5: # %for.body.preheader1485; CHECK-NEXT:    slli a1, a2, 21486; CHECK-NEXT:    lui a2, 11487; CHECK-NEXT:    add a1, a0, a11488; CHECK-NEXT:    add a0, a0, a21489; CHECK-NEXT:  .LBB26_6: # %for.body1490; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11491; CHECK-NEXT:    flw fa5, 0(a1)1492; CHECK-NEXT:    fmul.s fa5, fa5, fa01493; CHECK-NEXT:    fsw fa5, 0(a1)1494; CHECK-NEXT:    addi a1, a1, 41495; CHECK-NEXT:    bne a1, a0, .LBB26_61496; CHECK-NEXT:  .LBB26_7: # %for.cond.cleanup1497; CHECK-NEXT:    ret1498entry:1499  %0 = call i64 @llvm.vscale.i64()1500  %1 = shl i64 %0, 11501  %min.iters.check = icmp ugt i64 %1, 10241502  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph1503 1504vector.ph:                                        ; preds = %entry1505  %2 = call i64 @llvm.vscale.i64()1506  %3 = shl i64 %2, 11507  %n.mod.vf = urem i64 1024, %31508  %n.vec = sub nsw i64 1024, %n.mod.vf1509  %broadcast.splatinsert = insertelement <vscale x 2 x float> poison, float %x, i32 01510  %broadcast.splat = shufflevector <vscale x 2 x float> %broadcast.splatinsert, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1511  %4 = call i64 @llvm.vscale.i64()1512  %5 = shl i64 %4, 11513  br label %vector.body1514 1515vector.body:                                      ; preds = %vector.body, %vector.ph1516  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]1517  %6 = getelementptr inbounds float, ptr %a, i64 %index1518  %wide.load = load <vscale x 2 x float>, ptr %6, align 41519  %7 = fmul <vscale x 2 x float> %wide.load, %broadcast.splat1520  store <vscale x 2 x float> %7, ptr %6, align 41521  %index.next = add nuw i64 %index, %51522  %8 = icmp eq i64 %index.next, %n.vec1523  br i1 %8, label %middle.block, label %vector.body1524 1525middle.block:                                     ; preds = %vector.body1526  %cmp.n = icmp eq i64 %n.mod.vf, 01527  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1528 1529for.body.preheader:                               ; preds = %entry, %middle.block1530  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]1531  br label %for.body1532 1533for.cond.cleanup:                                 ; preds = %for.body, %middle.block1534  ret void1535 1536for.body:                                         ; preds = %for.body.preheader, %for.body1537  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]1538  %arrayidx = getelementptr inbounds float, ptr %a, i64 %indvars.iv1539  %9 = load float, ptr %arrayidx, align 41540  %mul = fmul float %9, %x1541  store float %mul, ptr %arrayidx, align 41542  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11543  %cmp.not = icmp eq i64 %indvars.iv.next, 10241544  br i1 %cmp.not, label %for.cond.cleanup, label %for.body1545}1546 1547define void @sink_splat_fdiv_scalable(ptr nocapture %a, float %x) {1548; CHECK-LABEL: sink_splat_fdiv_scalable:1549; CHECK:       # %bb.0: # %entry1550; CHECK-NEXT:    csrr a1, vlenb1551; CHECK-NEXT:    srli a3, a1, 21552; CHECK-NEXT:    li a2, 10241553; CHECK-NEXT:    bgeu a2, a3, .LBB27_21554; CHECK-NEXT:  # %bb.1:1555; CHECK-NEXT:    li a2, 01556; CHECK-NEXT:    j .LBB27_51557; CHECK-NEXT:  .LBB27_2: # %vector.ph1558; CHECK-NEXT:    addi a2, a3, -11559; CHECK-NEXT:    andi a4, a2, 10241560; CHECK-NEXT:    xori a2, a4, 10241561; CHECK-NEXT:    mv a5, a01562; CHECK-NEXT:    mv a6, a21563; CHECK-NEXT:    vsetvli a7, zero, e32, m1, ta, ma1564; CHECK-NEXT:  .LBB27_3: # %vector.body1565; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11566; CHECK-NEXT:    vl1re32.v v8, (a5)1567; CHECK-NEXT:    vfdiv.vf v8, v8, fa01568; CHECK-NEXT:    sub a6, a6, a31569; CHECK-NEXT:    vs1r.v v8, (a5)1570; CHECK-NEXT:    add a5, a5, a11571; CHECK-NEXT:    bnez a6, .LBB27_31572; CHECK-NEXT:  # %bb.4: # %middle.block1573; CHECK-NEXT:    beqz a4, .LBB27_71574; CHECK-NEXT:  .LBB27_5: # %for.body.preheader1575; CHECK-NEXT:    slli a1, a2, 21576; CHECK-NEXT:    lui a2, 11577; CHECK-NEXT:    add a1, a0, a11578; CHECK-NEXT:    add a0, a0, a21579; CHECK-NEXT:  .LBB27_6: # %for.body1580; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11581; CHECK-NEXT:    flw fa5, 0(a1)1582; CHECK-NEXT:    fdiv.s fa5, fa5, fa01583; CHECK-NEXT:    fsw fa5, 0(a1)1584; CHECK-NEXT:    addi a1, a1, 41585; CHECK-NEXT:    bne a1, a0, .LBB27_61586; CHECK-NEXT:  .LBB27_7: # %for.cond.cleanup1587; CHECK-NEXT:    ret1588entry:1589  %0 = call i64 @llvm.vscale.i64()1590  %1 = shl i64 %0, 11591  %min.iters.check = icmp ugt i64 %1, 10241592  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph1593 1594vector.ph:                                        ; preds = %entry1595  %2 = call i64 @llvm.vscale.i64()1596  %3 = shl i64 %2, 11597  %n.mod.vf = urem i64 1024, %31598  %n.vec = sub nsw i64 1024, %n.mod.vf1599  %broadcast.splatinsert = insertelement <vscale x 2 x float> poison, float %x, i32 01600  %broadcast.splat = shufflevector <vscale x 2 x float> %broadcast.splatinsert, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1601  %4 = call i64 @llvm.vscale.i64()1602  %5 = shl i64 %4, 11603  br label %vector.body1604 1605vector.body:                                      ; preds = %vector.body, %vector.ph1606  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]1607  %6 = getelementptr inbounds float, ptr %a, i64 %index1608  %wide.load = load <vscale x 2 x float>, ptr %6, align 41609  %7 = fdiv <vscale x 2 x float> %wide.load, %broadcast.splat1610  store <vscale x 2 x float> %7, ptr %6, align 41611  %index.next = add nuw i64 %index, %51612  %8 = icmp eq i64 %index.next, %n.vec1613  br i1 %8, label %middle.block, label %vector.body1614 1615middle.block:                                     ; preds = %vector.body1616  %cmp.n = icmp eq i64 %n.mod.vf, 01617  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1618 1619for.body.preheader:                               ; preds = %entry, %middle.block1620  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]1621  br label %for.body1622 1623for.cond.cleanup:                                 ; preds = %for.body, %middle.block1624  ret void1625 1626for.body:                                         ; preds = %for.body.preheader, %for.body1627  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]1628  %arrayidx = getelementptr inbounds float, ptr %a, i64 %indvars.iv1629  %9 = load float, ptr %arrayidx, align 41630  %mul = fdiv float %9, %x1631  store float %mul, ptr %arrayidx, align 41632  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11633  %cmp.not = icmp eq i64 %indvars.iv.next, 10241634  br i1 %cmp.not, label %for.cond.cleanup, label %for.body1635}1636 1637define void @sink_splat_frdiv_scalable(ptr nocapture %a, float %x) {1638; CHECK-LABEL: sink_splat_frdiv_scalable:1639; CHECK:       # %bb.0: # %entry1640; CHECK-NEXT:    csrr a1, vlenb1641; CHECK-NEXT:    srli a3, a1, 21642; CHECK-NEXT:    li a2, 10241643; CHECK-NEXT:    bgeu a2, a3, .LBB28_21644; CHECK-NEXT:  # %bb.1:1645; CHECK-NEXT:    li a2, 01646; CHECK-NEXT:    j .LBB28_51647; CHECK-NEXT:  .LBB28_2: # %vector.ph1648; CHECK-NEXT:    addi a2, a3, -11649; CHECK-NEXT:    andi a4, a2, 10241650; CHECK-NEXT:    xori a2, a4, 10241651; CHECK-NEXT:    mv a5, a01652; CHECK-NEXT:    mv a6, a21653; CHECK-NEXT:    vsetvli a7, zero, e32, m1, ta, ma1654; CHECK-NEXT:  .LBB28_3: # %vector.body1655; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11656; CHECK-NEXT:    vl1re32.v v8, (a5)1657; CHECK-NEXT:    vfrdiv.vf v8, v8, fa01658; CHECK-NEXT:    sub a6, a6, a31659; CHECK-NEXT:    vs1r.v v8, (a5)1660; CHECK-NEXT:    add a5, a5, a11661; CHECK-NEXT:    bnez a6, .LBB28_31662; CHECK-NEXT:  # %bb.4: # %middle.block1663; CHECK-NEXT:    beqz a4, .LBB28_71664; CHECK-NEXT:  .LBB28_5: # %for.body.preheader1665; CHECK-NEXT:    slli a1, a2, 21666; CHECK-NEXT:    lui a2, 11667; CHECK-NEXT:    add a1, a0, a11668; CHECK-NEXT:    add a0, a0, a21669; CHECK-NEXT:  .LBB28_6: # %for.body1670; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11671; CHECK-NEXT:    flw fa5, 0(a1)1672; CHECK-NEXT:    fdiv.s fa5, fa0, fa51673; CHECK-NEXT:    fsw fa5, 0(a1)1674; CHECK-NEXT:    addi a1, a1, 41675; CHECK-NEXT:    bne a1, a0, .LBB28_61676; CHECK-NEXT:  .LBB28_7: # %for.cond.cleanup1677; CHECK-NEXT:    ret1678entry:1679  %0 = call i64 @llvm.vscale.i64()1680  %1 = shl i64 %0, 11681  %min.iters.check = icmp ugt i64 %1, 10241682  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph1683 1684vector.ph:                                        ; preds = %entry1685  %2 = call i64 @llvm.vscale.i64()1686  %3 = shl i64 %2, 11687  %n.mod.vf = urem i64 1024, %31688  %n.vec = sub nsw i64 1024, %n.mod.vf1689  %broadcast.splatinsert = insertelement <vscale x 2 x float> poison, float %x, i32 01690  %broadcast.splat = shufflevector <vscale x 2 x float> %broadcast.splatinsert, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1691  %4 = call i64 @llvm.vscale.i64()1692  %5 = shl i64 %4, 11693  br label %vector.body1694 1695vector.body:                                      ; preds = %vector.body, %vector.ph1696  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]1697  %6 = getelementptr inbounds float, ptr %a, i64 %index1698  %wide.load = load <vscale x 2 x float>, ptr %6, align 41699  %7 = fdiv <vscale x 2 x float> %broadcast.splat, %wide.load1700  store <vscale x 2 x float> %7, ptr %6, align 41701  %index.next = add nuw i64 %index, %51702  %8 = icmp eq i64 %index.next, %n.vec1703  br i1 %8, label %middle.block, label %vector.body1704 1705middle.block:                                     ; preds = %vector.body1706  %cmp.n = icmp eq i64 %n.mod.vf, 01707  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1708 1709for.body.preheader:                               ; preds = %entry, %middle.block1710  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]1711  br label %for.body1712 1713for.cond.cleanup:                                 ; preds = %for.body, %middle.block1714  ret void1715 1716for.body:                                         ; preds = %for.body.preheader, %for.body1717  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]1718  %arrayidx = getelementptr inbounds float, ptr %a, i64 %indvars.iv1719  %9 = load float, ptr %arrayidx, align 41720  %mul = fdiv float %x, %91721  store float %mul, ptr %arrayidx, align 41722  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11723  %cmp.not = icmp eq i64 %indvars.iv.next, 10241724  br i1 %cmp.not, label %for.cond.cleanup, label %for.body1725}1726 1727define void @sink_splat_fadd_scalable(ptr nocapture %a, float %x) {1728; CHECK-LABEL: sink_splat_fadd_scalable:1729; CHECK:       # %bb.0: # %entry1730; CHECK-NEXT:    csrr a1, vlenb1731; CHECK-NEXT:    srli a3, a1, 21732; CHECK-NEXT:    li a2, 10241733; CHECK-NEXT:    bgeu a2, a3, .LBB29_21734; CHECK-NEXT:  # %bb.1:1735; CHECK-NEXT:    li a2, 01736; CHECK-NEXT:    j .LBB29_51737; CHECK-NEXT:  .LBB29_2: # %vector.ph1738; CHECK-NEXT:    addi a2, a3, -11739; CHECK-NEXT:    andi a4, a2, 10241740; CHECK-NEXT:    xori a2, a4, 10241741; CHECK-NEXT:    mv a5, a01742; CHECK-NEXT:    mv a6, a21743; CHECK-NEXT:    vsetvli a7, zero, e32, m1, ta, ma1744; CHECK-NEXT:  .LBB29_3: # %vector.body1745; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11746; CHECK-NEXT:    vl1re32.v v8, (a5)1747; CHECK-NEXT:    sub a6, a6, a31748; CHECK-NEXT:    vfadd.vf v8, v8, fa01749; CHECK-NEXT:    vs1r.v v8, (a5)1750; CHECK-NEXT:    add a5, a5, a11751; CHECK-NEXT:    bnez a6, .LBB29_31752; CHECK-NEXT:  # %bb.4: # %middle.block1753; CHECK-NEXT:    beqz a4, .LBB29_71754; CHECK-NEXT:  .LBB29_5: # %for.body.preheader1755; CHECK-NEXT:    slli a1, a2, 21756; CHECK-NEXT:    lui a2, 11757; CHECK-NEXT:    add a1, a0, a11758; CHECK-NEXT:    add a0, a0, a21759; CHECK-NEXT:  .LBB29_6: # %for.body1760; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11761; CHECK-NEXT:    flw fa5, 0(a1)1762; CHECK-NEXT:    fadd.s fa5, fa5, fa01763; CHECK-NEXT:    fsw fa5, 0(a1)1764; CHECK-NEXT:    addi a1, a1, 41765; CHECK-NEXT:    bne a1, a0, .LBB29_61766; CHECK-NEXT:  .LBB29_7: # %for.cond.cleanup1767; CHECK-NEXT:    ret1768entry:1769  %0 = call i64 @llvm.vscale.i64()1770  %1 = shl i64 %0, 11771  %min.iters.check = icmp ugt i64 %1, 10241772  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph1773 1774vector.ph:                                        ; preds = %entry1775  %2 = call i64 @llvm.vscale.i64()1776  %3 = shl i64 %2, 11777  %n.mod.vf = urem i64 1024, %31778  %n.vec = sub nsw i64 1024, %n.mod.vf1779  %broadcast.splatinsert = insertelement <vscale x 2 x float> poison, float %x, i32 01780  %broadcast.splat = shufflevector <vscale x 2 x float> %broadcast.splatinsert, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1781  %4 = call i64 @llvm.vscale.i64()1782  %5 = shl i64 %4, 11783  br label %vector.body1784 1785vector.body:                                      ; preds = %vector.body, %vector.ph1786  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]1787  %6 = getelementptr inbounds float, ptr %a, i64 %index1788  %wide.load = load <vscale x 2 x float>, ptr %6, align 41789  %7 = fadd <vscale x 2 x float> %wide.load, %broadcast.splat1790  store <vscale x 2 x float> %7, ptr %6, align 41791  %index.next = add nuw i64 %index, %51792  %8 = icmp eq i64 %index.next, %n.vec1793  br i1 %8, label %middle.block, label %vector.body1794 1795middle.block:                                     ; preds = %vector.body1796  %cmp.n = icmp eq i64 %n.mod.vf, 01797  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1798 1799for.body.preheader:                               ; preds = %entry, %middle.block1800  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]1801  br label %for.body1802 1803for.cond.cleanup:                                 ; preds = %for.body, %middle.block1804  ret void1805 1806for.body:                                         ; preds = %for.body.preheader, %for.body1807  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]1808  %arrayidx = getelementptr inbounds float, ptr %a, i64 %indvars.iv1809  %9 = load float, ptr %arrayidx, align 41810  %mul = fadd float %9, %x1811  store float %mul, ptr %arrayidx, align 41812  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11813  %cmp.not = icmp eq i64 %indvars.iv.next, 10241814  br i1 %cmp.not, label %for.cond.cleanup, label %for.body1815}1816 1817define void @sink_splat_fsub_scalable(ptr nocapture %a, float %x) {1818; CHECK-LABEL: sink_splat_fsub_scalable:1819; CHECK:       # %bb.0: # %entry1820; CHECK-NEXT:    csrr a1, vlenb1821; CHECK-NEXT:    srli a3, a1, 21822; CHECK-NEXT:    li a2, 10241823; CHECK-NEXT:    bgeu a2, a3, .LBB30_21824; CHECK-NEXT:  # %bb.1:1825; CHECK-NEXT:    li a2, 01826; CHECK-NEXT:    j .LBB30_51827; CHECK-NEXT:  .LBB30_2: # %vector.ph1828; CHECK-NEXT:    addi a2, a3, -11829; CHECK-NEXT:    andi a4, a2, 10241830; CHECK-NEXT:    xori a2, a4, 10241831; CHECK-NEXT:    mv a5, a01832; CHECK-NEXT:    mv a6, a21833; CHECK-NEXT:    vsetvli a7, zero, e32, m1, ta, ma1834; CHECK-NEXT:  .LBB30_3: # %vector.body1835; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11836; CHECK-NEXT:    vl1re32.v v8, (a5)1837; CHECK-NEXT:    sub a6, a6, a31838; CHECK-NEXT:    vfsub.vf v8, v8, fa01839; CHECK-NEXT:    vs1r.v v8, (a5)1840; CHECK-NEXT:    add a5, a5, a11841; CHECK-NEXT:    bnez a6, .LBB30_31842; CHECK-NEXT:  # %bb.4: # %middle.block1843; CHECK-NEXT:    beqz a4, .LBB30_71844; CHECK-NEXT:  .LBB30_5: # %for.body.preheader1845; CHECK-NEXT:    slli a1, a2, 21846; CHECK-NEXT:    lui a2, 11847; CHECK-NEXT:    add a1, a0, a11848; CHECK-NEXT:    add a0, a0, a21849; CHECK-NEXT:  .LBB30_6: # %for.body1850; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11851; CHECK-NEXT:    flw fa5, 0(a1)1852; CHECK-NEXT:    fsub.s fa5, fa5, fa01853; CHECK-NEXT:    fsw fa5, 0(a1)1854; CHECK-NEXT:    addi a1, a1, 41855; CHECK-NEXT:    bne a1, a0, .LBB30_61856; CHECK-NEXT:  .LBB30_7: # %for.cond.cleanup1857; CHECK-NEXT:    ret1858entry:1859  %0 = call i64 @llvm.vscale.i64()1860  %1 = shl i64 %0, 11861  %min.iters.check = icmp ugt i64 %1, 10241862  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph1863 1864vector.ph:                                        ; preds = %entry1865  %2 = call i64 @llvm.vscale.i64()1866  %3 = shl i64 %2, 11867  %n.mod.vf = urem i64 1024, %31868  %n.vec = sub nsw i64 1024, %n.mod.vf1869  %broadcast.splatinsert = insertelement <vscale x 2 x float> poison, float %x, i32 01870  %broadcast.splat = shufflevector <vscale x 2 x float> %broadcast.splatinsert, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1871  %4 = call i64 @llvm.vscale.i64()1872  %5 = shl i64 %4, 11873  br label %vector.body1874 1875vector.body:                                      ; preds = %vector.body, %vector.ph1876  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]1877  %6 = getelementptr inbounds float, ptr %a, i64 %index1878  %wide.load = load <vscale x 2 x float>, ptr %6, align 41879  %7 = fsub <vscale x 2 x float> %wide.load, %broadcast.splat1880  store <vscale x 2 x float> %7, ptr %6, align 41881  %index.next = add nuw i64 %index, %51882  %8 = icmp eq i64 %index.next, %n.vec1883  br i1 %8, label %middle.block, label %vector.body1884 1885middle.block:                                     ; preds = %vector.body1886  %cmp.n = icmp eq i64 %n.mod.vf, 01887  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1888 1889for.body.preheader:                               ; preds = %entry, %middle.block1890  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]1891  br label %for.body1892 1893for.cond.cleanup:                                 ; preds = %for.body, %middle.block1894  ret void1895 1896for.body:                                         ; preds = %for.body.preheader, %for.body1897  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]1898  %arrayidx = getelementptr inbounds float, ptr %a, i64 %indvars.iv1899  %9 = load float, ptr %arrayidx, align 41900  %mul = fsub float %9, %x1901  store float %mul, ptr %arrayidx, align 41902  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11903  %cmp.not = icmp eq i64 %indvars.iv.next, 10241904  br i1 %cmp.not, label %for.cond.cleanup, label %for.body1905}1906 1907define void @sink_splat_frsub_scalable(ptr nocapture %a, float %x) {1908; CHECK-LABEL: sink_splat_frsub_scalable:1909; CHECK:       # %bb.0: # %entry1910; CHECK-NEXT:    csrr a1, vlenb1911; CHECK-NEXT:    srli a3, a1, 21912; CHECK-NEXT:    li a2, 10241913; CHECK-NEXT:    bgeu a2, a3, .LBB31_21914; CHECK-NEXT:  # %bb.1:1915; CHECK-NEXT:    li a2, 01916; CHECK-NEXT:    j .LBB31_51917; CHECK-NEXT:  .LBB31_2: # %vector.ph1918; CHECK-NEXT:    addi a2, a3, -11919; CHECK-NEXT:    andi a4, a2, 10241920; CHECK-NEXT:    xori a2, a4, 10241921; CHECK-NEXT:    mv a5, a01922; CHECK-NEXT:    mv a6, a21923; CHECK-NEXT:    vsetvli a7, zero, e32, m1, ta, ma1924; CHECK-NEXT:  .LBB31_3: # %vector.body1925; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11926; CHECK-NEXT:    vl1re32.v v8, (a5)1927; CHECK-NEXT:    sub a6, a6, a31928; CHECK-NEXT:    vfrsub.vf v8, v8, fa01929; CHECK-NEXT:    vs1r.v v8, (a5)1930; CHECK-NEXT:    add a5, a5, a11931; CHECK-NEXT:    bnez a6, .LBB31_31932; CHECK-NEXT:  # %bb.4: # %middle.block1933; CHECK-NEXT:    beqz a4, .LBB31_71934; CHECK-NEXT:  .LBB31_5: # %for.body.preheader1935; CHECK-NEXT:    slli a1, a2, 21936; CHECK-NEXT:    lui a2, 11937; CHECK-NEXT:    add a1, a0, a11938; CHECK-NEXT:    add a0, a0, a21939; CHECK-NEXT:  .LBB31_6: # %for.body1940; CHECK-NEXT:    # =>This Inner Loop Header: Depth=11941; CHECK-NEXT:    flw fa5, 0(a1)1942; CHECK-NEXT:    fsub.s fa5, fa0, fa51943; CHECK-NEXT:    fsw fa5, 0(a1)1944; CHECK-NEXT:    addi a1, a1, 41945; CHECK-NEXT:    bne a1, a0, .LBB31_61946; CHECK-NEXT:  .LBB31_7: # %for.cond.cleanup1947; CHECK-NEXT:    ret1948entry:1949  %0 = call i64 @llvm.vscale.i64()1950  %1 = shl i64 %0, 11951  %min.iters.check = icmp ugt i64 %1, 10241952  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph1953 1954vector.ph:                                        ; preds = %entry1955  %2 = call i64 @llvm.vscale.i64()1956  %3 = shl i64 %2, 11957  %n.mod.vf = urem i64 1024, %31958  %n.vec = sub nsw i64 1024, %n.mod.vf1959  %broadcast.splatinsert = insertelement <vscale x 2 x float> poison, float %x, i32 01960  %broadcast.splat = shufflevector <vscale x 2 x float> %broadcast.splatinsert, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1961  %4 = call i64 @llvm.vscale.i64()1962  %5 = shl i64 %4, 11963  br label %vector.body1964 1965vector.body:                                      ; preds = %vector.body, %vector.ph1966  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]1967  %6 = getelementptr inbounds float, ptr %a, i64 %index1968  %wide.load = load <vscale x 2 x float>, ptr %6, align 41969  %7 = fsub <vscale x 2 x float> %broadcast.splat, %wide.load1970  store <vscale x 2 x float> %7, ptr %6, align 41971  %index.next = add nuw i64 %index, %51972  %8 = icmp eq i64 %index.next, %n.vec1973  br i1 %8, label %middle.block, label %vector.body1974 1975middle.block:                                     ; preds = %vector.body1976  %cmp.n = icmp eq i64 %n.mod.vf, 01977  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader1978 1979for.body.preheader:                               ; preds = %entry, %middle.block1980  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]1981  br label %for.body1982 1983for.cond.cleanup:                                 ; preds = %for.body, %middle.block1984  ret void1985 1986for.body:                                         ; preds = %for.body.preheader, %for.body1987  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]1988  %arrayidx = getelementptr inbounds float, ptr %a, i64 %indvars.iv1989  %9 = load float, ptr %arrayidx, align 41990  %mul = fsub float %x, %91991  store float %mul, ptr %arrayidx, align 41992  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 11993  %cmp.not = icmp eq i64 %indvars.iv.next, 10241994  br i1 %cmp.not, label %for.cond.cleanup, label %for.body1995}1996 1997define void @sink_splat_fma(ptr noalias nocapture %a, ptr nocapture readonly %b, float %x) {1998; CHECK-LABEL: sink_splat_fma:1999; CHECK:       # %bb.0: # %entry2000; CHECK-NEXT:    lui a2, 12001; CHECK-NEXT:    add a2, a1, a22002; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2003; CHECK-NEXT:  .LBB32_1: # %vector.body2004; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12005; CHECK-NEXT:    vle32.v v8, (a0)2006; CHECK-NEXT:    vle32.v v9, (a1)2007; CHECK-NEXT:    addi a1, a1, 162008; CHECK-NEXT:    vfmacc.vf v9, fa0, v82009; CHECK-NEXT:    vse32.v v9, (a0)2010; CHECK-NEXT:    addi a0, a0, 162011; CHECK-NEXT:    bne a1, a2, .LBB32_12012; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup2013; CHECK-NEXT:    ret2014entry:2015  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 02016  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer2017  br label %vector.body2018 2019vector.body:                                      ; preds = %vector.body, %entry2020  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]2021  %0 = getelementptr inbounds float, ptr %a, i64 %index2022  %wide.load = load <4 x float>, ptr %0, align 42023  %1 = getelementptr inbounds float, ptr %b, i64 %index2024  %wide.load12 = load <4 x float>, ptr %1, align 42025  %2 = call <4 x float> @llvm.fma.v4f32(<4 x float> %wide.load, <4 x float> %broadcast.splat, <4 x float> %wide.load12)2026  store <4 x float> %2, ptr %0, align 42027  %index.next = add nuw i64 %index, 42028  %3 = icmp eq i64 %index.next, 10242029  br i1 %3, label %for.cond.cleanup, label %vector.body2030 2031for.cond.cleanup:                                 ; preds = %vector.body2032  ret void2033}2034 2035define void @sink_splat_fma_commute(ptr noalias nocapture %a, ptr nocapture readonly %b, float %x) {2036; CHECK-LABEL: sink_splat_fma_commute:2037; CHECK:       # %bb.0: # %entry2038; CHECK-NEXT:    lui a2, 12039; CHECK-NEXT:    add a2, a1, a22040; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2041; CHECK-NEXT:  .LBB33_1: # %vector.body2042; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12043; CHECK-NEXT:    vle32.v v8, (a0)2044; CHECK-NEXT:    vle32.v v9, (a1)2045; CHECK-NEXT:    addi a1, a1, 162046; CHECK-NEXT:    vfmacc.vf v9, fa0, v82047; CHECK-NEXT:    vse32.v v9, (a0)2048; CHECK-NEXT:    addi a0, a0, 162049; CHECK-NEXT:    bne a1, a2, .LBB33_12050; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup2051; CHECK-NEXT:    ret2052entry:2053  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 02054  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer2055  br label %vector.body2056 2057vector.body:                                      ; preds = %vector.body, %entry2058  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]2059  %0 = getelementptr inbounds float, ptr %a, i64 %index2060  %wide.load = load <4 x float>, ptr %0, align 42061  %1 = getelementptr inbounds float, ptr %b, i64 %index2062  %wide.load12 = load <4 x float>, ptr %1, align 42063  %2 = call <4 x float> @llvm.fma.v4f32(<4 x float> %broadcast.splat, <4 x float> %wide.load, <4 x float> %wide.load12)2064  store <4 x float> %2, ptr %0, align 42065  %index.next = add nuw i64 %index, 42066  %3 = icmp eq i64 %index.next, 10242067  br i1 %3, label %for.cond.cleanup, label %vector.body2068 2069for.cond.cleanup:                                 ; preds = %vector.body2070  ret void2071}2072 2073define void @sink_splat_fma_scalable(ptr noalias nocapture %a, ptr noalias nocapture readonly %b, float %x) {2074; CHECK-LABEL: sink_splat_fma_scalable:2075; CHECK:       # %bb.0: # %entry2076; CHECK-NEXT:    csrr a2, vlenb2077; CHECK-NEXT:    srli a4, a2, 22078; CHECK-NEXT:    li a3, 10242079; CHECK-NEXT:    bgeu a3, a4, .LBB34_22080; CHECK-NEXT:  # %bb.1:2081; CHECK-NEXT:    li a3, 02082; CHECK-NEXT:    j .LBB34_52083; CHECK-NEXT:  .LBB34_2: # %vector.ph2084; CHECK-NEXT:    addi a3, a4, -12085; CHECK-NEXT:    andi a5, a3, 10242086; CHECK-NEXT:    xori a3, a5, 10242087; CHECK-NEXT:    mv a6, a02088; CHECK-NEXT:    mv a7, a12089; CHECK-NEXT:    mv t0, a32090; CHECK-NEXT:    vsetvli t1, zero, e32, m1, ta, ma2091; CHECK-NEXT:  .LBB34_3: # %vector.body2092; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12093; CHECK-NEXT:    vl1re32.v v8, (a6)2094; CHECK-NEXT:    vl1re32.v v9, (a7)2095; CHECK-NEXT:    sub t0, t0, a42096; CHECK-NEXT:    add a7, a7, a22097; CHECK-NEXT:    vfmacc.vf v9, fa0, v82098; CHECK-NEXT:    vs1r.v v9, (a6)2099; CHECK-NEXT:    add a6, a6, a22100; CHECK-NEXT:    bnez t0, .LBB34_32101; CHECK-NEXT:  # %bb.4: # %middle.block2102; CHECK-NEXT:    beqz a5, .LBB34_72103; CHECK-NEXT:  .LBB34_5: # %for.body.preheader2104; CHECK-NEXT:    slli a2, a3, 22105; CHECK-NEXT:    lui a3, 12106; CHECK-NEXT:    add a0, a0, a22107; CHECK-NEXT:    add a2, a1, a22108; CHECK-NEXT:    add a1, a1, a32109; CHECK-NEXT:  .LBB34_6: # %for.body2110; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12111; CHECK-NEXT:    flw fa5, 0(a0)2112; CHECK-NEXT:    flw fa4, 0(a2)2113; CHECK-NEXT:    addi a2, a2, 42114; CHECK-NEXT:    fmadd.s fa5, fa5, fa0, fa42115; CHECK-NEXT:    fsw fa5, 0(a0)2116; CHECK-NEXT:    addi a0, a0, 42117; CHECK-NEXT:    bne a2, a1, .LBB34_62118; CHECK-NEXT:  .LBB34_7: # %for.cond.cleanup2119; CHECK-NEXT:    ret2120entry:2121  %0 = call i64 @llvm.vscale.i64()2122  %1 = shl i64 %0, 12123  %min.iters.check = icmp ugt i64 %1, 10242124  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph2125 2126vector.ph:                                        ; preds = %entry2127  %2 = call i64 @llvm.vscale.i64()2128  %3 = shl i64 %2, 12129  %n.mod.vf = urem i64 1024, %32130  %n.vec = sub nsw i64 1024, %n.mod.vf2131  %broadcast.splatinsert = insertelement <vscale x 2 x float> poison, float %x, i32 02132  %broadcast.splat = shufflevector <vscale x 2 x float> %broadcast.splatinsert, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer2133  %4 = call i64 @llvm.vscale.i64()2134  %5 = shl i64 %4, 12135  br label %vector.body2136 2137vector.body:                                      ; preds = %vector.body, %vector.ph2138  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]2139  %6 = getelementptr inbounds float, ptr %a, i64 %index2140  %wide.load = load <vscale x 2 x float>, ptr %6, align 42141  %7 = getelementptr inbounds float, ptr %b, i64 %index2142  %wide.load12 = load <vscale x 2 x float>, ptr %7, align 42143  %8 = call <vscale x 2 x float> @llvm.fma.nxv2f32(<vscale x 2 x float> %wide.load, <vscale x 2 x float> %broadcast.splat, <vscale x 2 x float> %wide.load12)2144  store <vscale x 2 x float> %8, ptr %6, align 42145  %index.next = add nuw i64 %index, %52146  %9 = icmp eq i64 %index.next, %n.vec2147  br i1 %9, label %middle.block, label %vector.body2148 2149middle.block:                                     ; preds = %vector.body2150  %cmp.n = icmp eq i64 %n.mod.vf, 02151  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader2152 2153for.body.preheader:                               ; preds = %entry, %middle.block2154  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]2155  br label %for.body2156 2157for.cond.cleanup:                                 ; preds = %for.body, %middle.block2158  ret void2159 2160for.body:                                         ; preds = %for.body.preheader, %for.body2161  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]2162  %arrayidx = getelementptr inbounds float, ptr %a, i64 %indvars.iv2163  %10 = load float, ptr %arrayidx, align 42164  %arrayidx2 = getelementptr inbounds float, ptr %b, i64 %indvars.iv2165  %11 = load float, ptr %arrayidx2, align 42166  %12 = tail call float @llvm.fma.f32(float %10, float %x, float %11)2167  store float %12, ptr %arrayidx, align 42168  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 12169  %cmp.not = icmp eq i64 %indvars.iv.next, 10242170  br i1 %cmp.not, label %for.cond.cleanup, label %for.body2171}2172 2173define void @sink_splat_fma_commute_scalable(ptr noalias nocapture %a, ptr noalias nocapture readonly %b, float %x) {2174; CHECK-LABEL: sink_splat_fma_commute_scalable:2175; CHECK:       # %bb.0: # %entry2176; CHECK-NEXT:    csrr a2, vlenb2177; CHECK-NEXT:    srli a4, a2, 22178; CHECK-NEXT:    li a3, 10242179; CHECK-NEXT:    bgeu a3, a4, .LBB35_22180; CHECK-NEXT:  # %bb.1:2181; CHECK-NEXT:    li a3, 02182; CHECK-NEXT:    j .LBB35_52183; CHECK-NEXT:  .LBB35_2: # %vector.ph2184; CHECK-NEXT:    addi a3, a4, -12185; CHECK-NEXT:    andi a5, a3, 10242186; CHECK-NEXT:    xori a3, a5, 10242187; CHECK-NEXT:    mv a6, a02188; CHECK-NEXT:    mv a7, a12189; CHECK-NEXT:    mv t0, a32190; CHECK-NEXT:    vsetvli t1, zero, e32, m1, ta, ma2191; CHECK-NEXT:  .LBB35_3: # %vector.body2192; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12193; CHECK-NEXT:    vl1re32.v v8, (a6)2194; CHECK-NEXT:    vl1re32.v v9, (a7)2195; CHECK-NEXT:    sub t0, t0, a42196; CHECK-NEXT:    add a7, a7, a22197; CHECK-NEXT:    vfmacc.vf v9, fa0, v82198; CHECK-NEXT:    vs1r.v v9, (a6)2199; CHECK-NEXT:    add a6, a6, a22200; CHECK-NEXT:    bnez t0, .LBB35_32201; CHECK-NEXT:  # %bb.4: # %middle.block2202; CHECK-NEXT:    beqz a5, .LBB35_72203; CHECK-NEXT:  .LBB35_5: # %for.body.preheader2204; CHECK-NEXT:    slli a2, a3, 22205; CHECK-NEXT:    lui a3, 12206; CHECK-NEXT:    add a0, a0, a22207; CHECK-NEXT:    add a2, a1, a22208; CHECK-NEXT:    add a1, a1, a32209; CHECK-NEXT:  .LBB35_6: # %for.body2210; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12211; CHECK-NEXT:    flw fa5, 0(a0)2212; CHECK-NEXT:    flw fa4, 0(a2)2213; CHECK-NEXT:    addi a2, a2, 42214; CHECK-NEXT:    fmadd.s fa5, fa0, fa5, fa42215; CHECK-NEXT:    fsw fa5, 0(a0)2216; CHECK-NEXT:    addi a0, a0, 42217; CHECK-NEXT:    bne a2, a1, .LBB35_62218; CHECK-NEXT:  .LBB35_7: # %for.cond.cleanup2219; CHECK-NEXT:    ret2220entry:2221  %0 = call i64 @llvm.vscale.i64()2222  %1 = shl i64 %0, 12223  %min.iters.check = icmp ugt i64 %1, 10242224  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph2225 2226vector.ph:                                        ; preds = %entry2227  %2 = call i64 @llvm.vscale.i64()2228  %3 = shl i64 %2, 12229  %n.mod.vf = urem i64 1024, %32230  %n.vec = sub nsw i64 1024, %n.mod.vf2231  %broadcast.splatinsert = insertelement <vscale x 2 x float> poison, float %x, i32 02232  %broadcast.splat = shufflevector <vscale x 2 x float> %broadcast.splatinsert, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer2233  %4 = call i64 @llvm.vscale.i64()2234  %5 = shl i64 %4, 12235  br label %vector.body2236 2237vector.body:                                      ; preds = %vector.body, %vector.ph2238  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]2239  %6 = getelementptr inbounds float, ptr %a, i64 %index2240  %wide.load = load <vscale x 2 x float>, ptr %6, align 42241  %7 = getelementptr inbounds float, ptr %b, i64 %index2242  %wide.load12 = load <vscale x 2 x float>, ptr %7, align 42243  %8 = call <vscale x 2 x float> @llvm.fma.nxv2f32(<vscale x 2 x float> %broadcast.splat, <vscale x 2 x float> %wide.load, <vscale x 2 x float> %wide.load12)2244  store <vscale x 2 x float> %8, ptr %6, align 42245  %index.next = add nuw i64 %index, %52246  %9 = icmp eq i64 %index.next, %n.vec2247  br i1 %9, label %middle.block, label %vector.body2248 2249middle.block:                                     ; preds = %vector.body2250  %cmp.n = icmp eq i64 %n.mod.vf, 02251  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader2252 2253for.body.preheader:                               ; preds = %entry, %middle.block2254  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]2255  br label %for.body2256 2257for.cond.cleanup:                                 ; preds = %for.body, %middle.block2258  ret void2259 2260for.body:                                         ; preds = %for.body.preheader, %for.body2261  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]2262  %arrayidx = getelementptr inbounds float, ptr %a, i64 %indvars.iv2263  %10 = load float, ptr %arrayidx, align 42264  %arrayidx2 = getelementptr inbounds float, ptr %b, i64 %indvars.iv2265  %11 = load float, ptr %arrayidx2, align 42266  %12 = tail call float @llvm.fma.f32(float %x, float %10, float %11)2267  store float %12, ptr %arrayidx, align 42268  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 12269  %cmp.not = icmp eq i64 %indvars.iv.next, 10242270  br i1 %cmp.not, label %for.cond.cleanup, label %for.body2271}2272 2273define void @sink_splat_icmp(ptr nocapture %x, i32 signext %y) {2274; CHECK-LABEL: sink_splat_icmp:2275; CHECK:       # %bb.0: # %entry2276; CHECK-NEXT:    lui a2, 12277; CHECK-NEXT:    add a2, a0, a22278; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2279; CHECK-NEXT:    vmv.v.i v8, 02280; CHECK-NEXT:  .LBB36_1: # %vector.body2281; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12282; CHECK-NEXT:    vle32.v v9, (a0)2283; CHECK-NEXT:    vmseq.vx v0, v9, a12284; CHECK-NEXT:    vse32.v v8, (a0), v0.t2285; CHECK-NEXT:    addi a0, a0, 162286; CHECK-NEXT:    bne a0, a2, .LBB36_12287; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup2288; CHECK-NEXT:    ret2289entry:2290  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %y, i32 02291  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer2292  br label %vector.body2293 2294vector.body:                                      ; preds = %vector.body, %entry2295  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]2296  %0 = getelementptr inbounds i32, ptr %x, i64 %index2297  %wide.load = load <4 x i32>, ptr %0, align 42298  %1 = icmp eq <4 x i32> %wide.load, %broadcast.splat2299  call void @llvm.masked.store.v4i32.p0(<4 x i32> zeroinitializer, ptr %0, i32 4, <4 x i1> %1)2300  %index.next = add nuw i64 %index, 42301  %2 = icmp eq i64 %index.next, 10242302  br i1 %2, label %for.cond.cleanup, label %vector.body2303 2304for.cond.cleanup:                                 ; preds = %vector.body2305  ret void2306}2307 2308define void @sink_splat_fcmp(ptr nocapture %x, float %y) {2309; CHECK-LABEL: sink_splat_fcmp:2310; CHECK:       # %bb.0: # %entry2311; CHECK-NEXT:    lui a1, 12312; CHECK-NEXT:    add a1, a0, a12313; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2314; CHECK-NEXT:    vmv.v.i v8, 02315; CHECK-NEXT:  .LBB37_1: # %vector.body2316; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12317; CHECK-NEXT:    vle32.v v9, (a0)2318; CHECK-NEXT:    vmfeq.vf v0, v9, fa02319; CHECK-NEXT:    vse32.v v8, (a0), v0.t2320; CHECK-NEXT:    addi a0, a0, 162321; CHECK-NEXT:    bne a0, a1, .LBB37_12322; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup2323; CHECK-NEXT:    ret2324entry:2325  %broadcast.splatinsert = insertelement <4 x float> poison, float %y, i32 02326  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer2327  br label %vector.body2328 2329vector.body:                                      ; preds = %vector.body, %entry2330  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]2331  %0 = getelementptr inbounds float, ptr %x, i64 %index2332  %wide.load = load <4 x float>, ptr %0, align 42333  %1 = fcmp fast oeq <4 x float> %wide.load, %broadcast.splat2334  call void @llvm.masked.store.v4f32.p0(<4 x float> zeroinitializer, ptr %0, i32 4, <4 x i1> %1)2335  %index.next = add nuw i64 %index, 42336  %2 = icmp eq i64 %index.next, 10242337  br i1 %2, label %for.cond.cleanup, label %vector.body2338 2339for.cond.cleanup:                                 ; preds = %vector.body2340  ret void2341}2342 2343define void @sink_splat_udiv(ptr nocapture %a, i32 signext %x) {2344; CHECK-LABEL: sink_splat_udiv:2345; CHECK:       # %bb.0: # %entry2346; CHECK-NEXT:    lui a2, 12347; CHECK-NEXT:    add a2, a0, a22348; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2349; CHECK-NEXT:  .LBB38_1: # %vector.body2350; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12351; CHECK-NEXT:    vle32.v v8, (a0)2352; CHECK-NEXT:    vdivu.vx v8, v8, a12353; CHECK-NEXT:    vse32.v v8, (a0)2354; CHECK-NEXT:    addi a0, a0, 162355; CHECK-NEXT:    bne a0, a2, .LBB38_12356; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup2357; CHECK-NEXT:    ret2358entry:2359  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 02360  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer2361  br label %vector.body2362 2363vector.body:                                      ; preds = %vector.body, %entry2364  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]2365  %0 = getelementptr inbounds i32, ptr %a, i64 %index2366  %wide.load = load <4 x i32>, ptr %0, align 42367  %1 = udiv <4 x i32> %wide.load, %broadcast.splat2368  store <4 x i32> %1, ptr %0, align 42369  %index.next = add nuw i64 %index, 42370  %2 = icmp eq i64 %index.next, 10242371  br i1 %2, label %for.cond.cleanup, label %vector.body2372 2373for.cond.cleanup:                                 ; preds = %vector.body2374  ret void2375}2376 2377define void @sink_splat_sdiv(ptr nocapture %a, i32 signext %x) {2378; CHECK-LABEL: sink_splat_sdiv:2379; CHECK:       # %bb.0: # %entry2380; CHECK-NEXT:    lui a2, 12381; CHECK-NEXT:    add a2, a0, a22382; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2383; CHECK-NEXT:  .LBB39_1: # %vector.body2384; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12385; CHECK-NEXT:    vle32.v v8, (a0)2386; CHECK-NEXT:    vdiv.vx v8, v8, a12387; CHECK-NEXT:    vse32.v v8, (a0)2388; CHECK-NEXT:    addi a0, a0, 162389; CHECK-NEXT:    bne a0, a2, .LBB39_12390; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup2391; CHECK-NEXT:    ret2392entry:2393  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 02394  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer2395  br label %vector.body2396 2397vector.body:                                      ; preds = %vector.body, %entry2398  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]2399  %0 = getelementptr inbounds i32, ptr %a, i64 %index2400  %wide.load = load <4 x i32>, ptr %0, align 42401  %1 = sdiv <4 x i32> %wide.load, %broadcast.splat2402  store <4 x i32> %1, ptr %0, align 42403  %index.next = add nuw i64 %index, 42404  %2 = icmp eq i64 %index.next, 10242405  br i1 %2, label %for.cond.cleanup, label %vector.body2406 2407for.cond.cleanup:                                 ; preds = %vector.body2408  ret void2409}2410 2411define void @sink_splat_urem(ptr nocapture %a, i32 signext %x) {2412; CHECK-LABEL: sink_splat_urem:2413; CHECK:       # %bb.0: # %entry2414; CHECK-NEXT:    lui a2, 12415; CHECK-NEXT:    add a2, a0, a22416; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2417; CHECK-NEXT:  .LBB40_1: # %vector.body2418; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12419; CHECK-NEXT:    vle32.v v8, (a0)2420; CHECK-NEXT:    vremu.vx v8, v8, a12421; CHECK-NEXT:    vse32.v v8, (a0)2422; CHECK-NEXT:    addi a0, a0, 162423; CHECK-NEXT:    bne a0, a2, .LBB40_12424; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup2425; CHECK-NEXT:    ret2426entry:2427  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 02428  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer2429  br label %vector.body2430 2431vector.body:                                      ; preds = %vector.body, %entry2432  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]2433  %0 = getelementptr inbounds i32, ptr %a, i64 %index2434  %wide.load = load <4 x i32>, ptr %0, align 42435  %1 = urem <4 x i32> %wide.load, %broadcast.splat2436  store <4 x i32> %1, ptr %0, align 42437  %index.next = add nuw i64 %index, 42438  %2 = icmp eq i64 %index.next, 10242439  br i1 %2, label %for.cond.cleanup, label %vector.body2440 2441for.cond.cleanup:                                 ; preds = %vector.body2442  ret void2443}2444 2445define void @sink_splat_srem(ptr nocapture %a, i32 signext %x) {2446; CHECK-LABEL: sink_splat_srem:2447; CHECK:       # %bb.0: # %entry2448; CHECK-NEXT:    lui a2, 12449; CHECK-NEXT:    add a2, a0, a22450; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2451; CHECK-NEXT:  .LBB41_1: # %vector.body2452; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12453; CHECK-NEXT:    vle32.v v8, (a0)2454; CHECK-NEXT:    vrem.vx v8, v8, a12455; CHECK-NEXT:    vse32.v v8, (a0)2456; CHECK-NEXT:    addi a0, a0, 162457; CHECK-NEXT:    bne a0, a2, .LBB41_12458; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup2459; CHECK-NEXT:    ret2460entry:2461  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 02462  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer2463  br label %vector.body2464 2465vector.body:                                      ; preds = %vector.body, %entry2466  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]2467  %0 = getelementptr inbounds i32, ptr %a, i64 %index2468  %wide.load = load <4 x i32>, ptr %0, align 42469  %1 = srem <4 x i32> %wide.load, %broadcast.splat2470  store <4 x i32> %1, ptr %0, align 42471  %index.next = add nuw i64 %index, 42472  %2 = icmp eq i64 %index.next, 10242473  br i1 %2, label %for.cond.cleanup, label %vector.body2474 2475for.cond.cleanup:                                 ; preds = %vector.body2476  ret void2477}2478 2479define void @sink_splat_udiv_scalable(ptr nocapture %a, i32 signext %x) {2480; CHECK-LABEL: sink_splat_udiv_scalable:2481; CHECK:       # %bb.0: # %entry2482; CHECK-NEXT:    csrr a5, vlenb2483; CHECK-NEXT:    srli a3, a5, 12484; CHECK-NEXT:    li a2, 10242485; CHECK-NEXT:    bgeu a2, a3, .LBB42_22486; CHECK-NEXT:  # %bb.1:2487; CHECK-NEXT:    li a2, 02488; CHECK-NEXT:    j .LBB42_52489; CHECK-NEXT:  .LBB42_2: # %vector.ph2490; CHECK-NEXT:    addi a2, a3, -12491; CHECK-NEXT:    andi a4, a2, 10242492; CHECK-NEXT:    xori a2, a4, 10242493; CHECK-NEXT:    slli a5, a5, 12494; CHECK-NEXT:    mv a6, a02495; CHECK-NEXT:    mv a7, a22496; CHECK-NEXT:    vsetvli t0, zero, e32, m2, ta, ma2497; CHECK-NEXT:  .LBB42_3: # %vector.body2498; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12499; CHECK-NEXT:    vl2re32.v v8, (a6)2500; CHECK-NEXT:    vdivu.vx v8, v8, a12501; CHECK-NEXT:    sub a7, a7, a32502; CHECK-NEXT:    vs2r.v v8, (a6)2503; CHECK-NEXT:    add a6, a6, a52504; CHECK-NEXT:    bnez a7, .LBB42_32505; CHECK-NEXT:  # %bb.4: # %middle.block2506; CHECK-NEXT:    beqz a4, .LBB42_72507; CHECK-NEXT:  .LBB42_5: # %for.body.preheader2508; CHECK-NEXT:    slli a2, a2, 22509; CHECK-NEXT:    lui a3, 12510; CHECK-NEXT:    add a2, a0, a22511; CHECK-NEXT:    add a0, a0, a32512; CHECK-NEXT:  .LBB42_6: # %for.body2513; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12514; CHECK-NEXT:    lw a3, 0(a2)2515; CHECK-NEXT:    divuw a3, a3, a12516; CHECK-NEXT:    sw a3, 0(a2)2517; CHECK-NEXT:    addi a2, a2, 42518; CHECK-NEXT:    bne a2, a0, .LBB42_62519; CHECK-NEXT:  .LBB42_7: # %for.cond.cleanup2520; CHECK-NEXT:    ret2521entry:2522  %0 = call i64 @llvm.vscale.i64()2523  %1 = shl i64 %0, 22524  %min.iters.check = icmp ugt i64 %1, 10242525  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph2526 2527vector.ph:                                        ; preds = %entry2528  %2 = call i64 @llvm.vscale.i64()2529  %3 = shl i64 %2, 22530  %n.mod.vf = urem i64 1024, %32531  %n.vec = sub nsw i64 1024, %n.mod.vf2532  %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %x, i32 02533  %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer2534  %4 = call i64 @llvm.vscale.i64()2535  %5 = shl i64 %4, 22536  br label %vector.body2537 2538vector.body:                                      ; preds = %vector.body, %vector.ph2539  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]2540  %6 = getelementptr inbounds i32, ptr %a, i64 %index2541  %wide.load = load <vscale x 4 x i32>, ptr %6, align 42542  %7 = udiv <vscale x 4 x i32> %wide.load, %broadcast.splat2543  store <vscale x 4 x i32> %7, ptr %6, align 42544  %index.next = add nuw i64 %index, %52545  %8 = icmp eq i64 %index.next, %n.vec2546  br i1 %8, label %middle.block, label %vector.body2547 2548middle.block:                                     ; preds = %vector.body2549  %cmp.n = icmp eq i64 %n.mod.vf, 02550  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader2551 2552for.body.preheader:                               ; preds = %entry, %middle.block2553  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]2554  br label %for.body2555 2556for.cond.cleanup:                                 ; preds = %for.body, %middle.block2557  ret void2558 2559for.body:                                         ; preds = %for.body.preheader, %for.body2560  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]2561  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv2562  %9 = load i32, ptr %arrayidx, align 42563  %div = udiv i32 %9, %x2564  store i32 %div, ptr %arrayidx, align 42565  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 12566  %cmp.not = icmp eq i64 %indvars.iv.next, 10242567  br i1 %cmp.not, label %for.cond.cleanup, label %for.body2568}2569 2570define void @sink_splat_sdiv_scalable(ptr nocapture %a, i32 signext %x) {2571; CHECK-LABEL: sink_splat_sdiv_scalable:2572; CHECK:       # %bb.0: # %entry2573; CHECK-NEXT:    csrr a5, vlenb2574; CHECK-NEXT:    srli a3, a5, 12575; CHECK-NEXT:    li a2, 10242576; CHECK-NEXT:    bgeu a2, a3, .LBB43_22577; CHECK-NEXT:  # %bb.1:2578; CHECK-NEXT:    li a2, 02579; CHECK-NEXT:    j .LBB43_52580; CHECK-NEXT:  .LBB43_2: # %vector.ph2581; CHECK-NEXT:    addi a2, a3, -12582; CHECK-NEXT:    andi a4, a2, 10242583; CHECK-NEXT:    xori a2, a4, 10242584; CHECK-NEXT:    slli a5, a5, 12585; CHECK-NEXT:    mv a6, a02586; CHECK-NEXT:    mv a7, a22587; CHECK-NEXT:    vsetvli t0, zero, e32, m2, ta, ma2588; CHECK-NEXT:  .LBB43_3: # %vector.body2589; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12590; CHECK-NEXT:    vl2re32.v v8, (a6)2591; CHECK-NEXT:    vdiv.vx v8, v8, a12592; CHECK-NEXT:    sub a7, a7, a32593; CHECK-NEXT:    vs2r.v v8, (a6)2594; CHECK-NEXT:    add a6, a6, a52595; CHECK-NEXT:    bnez a7, .LBB43_32596; CHECK-NEXT:  # %bb.4: # %middle.block2597; CHECK-NEXT:    beqz a4, .LBB43_72598; CHECK-NEXT:  .LBB43_5: # %for.body.preheader2599; CHECK-NEXT:    slli a2, a2, 22600; CHECK-NEXT:    lui a3, 12601; CHECK-NEXT:    add a2, a0, a22602; CHECK-NEXT:    add a0, a0, a32603; CHECK-NEXT:  .LBB43_6: # %for.body2604; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12605; CHECK-NEXT:    lw a3, 0(a2)2606; CHECK-NEXT:    divw a3, a3, a12607; CHECK-NEXT:    sw a3, 0(a2)2608; CHECK-NEXT:    addi a2, a2, 42609; CHECK-NEXT:    bne a2, a0, .LBB43_62610; CHECK-NEXT:  .LBB43_7: # %for.cond.cleanup2611; CHECK-NEXT:    ret2612entry:2613  %0 = call i64 @llvm.vscale.i64()2614  %1 = shl i64 %0, 22615  %min.iters.check = icmp ugt i64 %1, 10242616  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph2617 2618vector.ph:                                        ; preds = %entry2619  %2 = call i64 @llvm.vscale.i64()2620  %3 = shl i64 %2, 22621  %n.mod.vf = urem i64 1024, %32622  %n.vec = sub nsw i64 1024, %n.mod.vf2623  %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %x, i32 02624  %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer2625  %4 = call i64 @llvm.vscale.i64()2626  %5 = shl i64 %4, 22627  br label %vector.body2628 2629vector.body:                                      ; preds = %vector.body, %vector.ph2630  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]2631  %6 = getelementptr inbounds i32, ptr %a, i64 %index2632  %wide.load = load <vscale x 4 x i32>, ptr %6, align 42633  %7 = sdiv <vscale x 4 x i32> %wide.load, %broadcast.splat2634  store <vscale x 4 x i32> %7, ptr %6, align 42635  %index.next = add nuw i64 %index, %52636  %8 = icmp eq i64 %index.next, %n.vec2637  br i1 %8, label %middle.block, label %vector.body2638 2639middle.block:                                     ; preds = %vector.body2640  %cmp.n = icmp eq i64 %n.mod.vf, 02641  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader2642 2643for.body.preheader:                               ; preds = %entry, %middle.block2644  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]2645  br label %for.body2646 2647for.cond.cleanup:                                 ; preds = %for.body, %middle.block2648  ret void2649 2650for.body:                                         ; preds = %for.body.preheader, %for.body2651  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]2652  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv2653  %9 = load i32, ptr %arrayidx, align 42654  %div = sdiv i32 %9, %x2655  store i32 %div, ptr %arrayidx, align 42656  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 12657  %cmp.not = icmp eq i64 %indvars.iv.next, 10242658  br i1 %cmp.not, label %for.cond.cleanup, label %for.body2659}2660 2661define void @sink_splat_urem_scalable(ptr nocapture %a, i32 signext %x) {2662; CHECK-LABEL: sink_splat_urem_scalable:2663; CHECK:       # %bb.0: # %entry2664; CHECK-NEXT:    csrr a5, vlenb2665; CHECK-NEXT:    srli a3, a5, 12666; CHECK-NEXT:    li a2, 10242667; CHECK-NEXT:    bgeu a2, a3, .LBB44_22668; CHECK-NEXT:  # %bb.1:2669; CHECK-NEXT:    li a2, 02670; CHECK-NEXT:    j .LBB44_52671; CHECK-NEXT:  .LBB44_2: # %vector.ph2672; CHECK-NEXT:    addi a2, a3, -12673; CHECK-NEXT:    andi a4, a2, 10242674; CHECK-NEXT:    xori a2, a4, 10242675; CHECK-NEXT:    slli a5, a5, 12676; CHECK-NEXT:    mv a6, a02677; CHECK-NEXT:    mv a7, a22678; CHECK-NEXT:    vsetvli t0, zero, e32, m2, ta, ma2679; CHECK-NEXT:  .LBB44_3: # %vector.body2680; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12681; CHECK-NEXT:    vl2re32.v v8, (a6)2682; CHECK-NEXT:    vremu.vx v8, v8, a12683; CHECK-NEXT:    sub a7, a7, a32684; CHECK-NEXT:    vs2r.v v8, (a6)2685; CHECK-NEXT:    add a6, a6, a52686; CHECK-NEXT:    bnez a7, .LBB44_32687; CHECK-NEXT:  # %bb.4: # %middle.block2688; CHECK-NEXT:    beqz a4, .LBB44_72689; CHECK-NEXT:  .LBB44_5: # %for.body.preheader2690; CHECK-NEXT:    slli a2, a2, 22691; CHECK-NEXT:    lui a3, 12692; CHECK-NEXT:    add a2, a0, a22693; CHECK-NEXT:    add a0, a0, a32694; CHECK-NEXT:  .LBB44_6: # %for.body2695; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12696; CHECK-NEXT:    lw a3, 0(a2)2697; CHECK-NEXT:    remuw a3, a3, a12698; CHECK-NEXT:    sw a3, 0(a2)2699; CHECK-NEXT:    addi a2, a2, 42700; CHECK-NEXT:    bne a2, a0, .LBB44_62701; CHECK-NEXT:  .LBB44_7: # %for.cond.cleanup2702; CHECK-NEXT:    ret2703entry:2704  %0 = call i64 @llvm.vscale.i64()2705  %1 = shl i64 %0, 22706  %min.iters.check = icmp ugt i64 %1, 10242707  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph2708 2709vector.ph:                                        ; preds = %entry2710  %2 = call i64 @llvm.vscale.i64()2711  %3 = shl i64 %2, 22712  %n.mod.vf = urem i64 1024, %32713  %n.vec = sub nsw i64 1024, %n.mod.vf2714  %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %x, i32 02715  %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer2716  %4 = call i64 @llvm.vscale.i64()2717  %5 = shl i64 %4, 22718  br label %vector.body2719 2720vector.body:                                      ; preds = %vector.body, %vector.ph2721  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]2722  %6 = getelementptr inbounds i32, ptr %a, i64 %index2723  %wide.load = load <vscale x 4 x i32>, ptr %6, align 42724  %7 = urem <vscale x 4 x i32> %wide.load, %broadcast.splat2725  store <vscale x 4 x i32> %7, ptr %6, align 42726  %index.next = add nuw i64 %index, %52727  %8 = icmp eq i64 %index.next, %n.vec2728  br i1 %8, label %middle.block, label %vector.body2729 2730middle.block:                                     ; preds = %vector.body2731  %cmp.n = icmp eq i64 %n.mod.vf, 02732  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader2733 2734for.body.preheader:                               ; preds = %entry, %middle.block2735  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]2736  br label %for.body2737 2738for.cond.cleanup:                                 ; preds = %for.body, %middle.block2739  ret void2740 2741for.body:                                         ; preds = %for.body.preheader, %for.body2742  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]2743  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv2744  %9 = load i32, ptr %arrayidx, align 42745  %rem = urem i32 %9, %x2746  store i32 %rem, ptr %arrayidx, align 42747  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 12748  %cmp.not = icmp eq i64 %indvars.iv.next, 10242749  br i1 %cmp.not, label %for.cond.cleanup, label %for.body2750}2751 2752define void @sink_splat_srem_scalable(ptr nocapture %a, i32 signext %x) {2753; CHECK-LABEL: sink_splat_srem_scalable:2754; CHECK:       # %bb.0: # %entry2755; CHECK-NEXT:    csrr a5, vlenb2756; CHECK-NEXT:    srli a3, a5, 12757; CHECK-NEXT:    li a2, 10242758; CHECK-NEXT:    bgeu a2, a3, .LBB45_22759; CHECK-NEXT:  # %bb.1:2760; CHECK-NEXT:    li a2, 02761; CHECK-NEXT:    j .LBB45_52762; CHECK-NEXT:  .LBB45_2: # %vector.ph2763; CHECK-NEXT:    addi a2, a3, -12764; CHECK-NEXT:    andi a4, a2, 10242765; CHECK-NEXT:    xori a2, a4, 10242766; CHECK-NEXT:    slli a5, a5, 12767; CHECK-NEXT:    mv a6, a02768; CHECK-NEXT:    mv a7, a22769; CHECK-NEXT:    vsetvli t0, zero, e32, m2, ta, ma2770; CHECK-NEXT:  .LBB45_3: # %vector.body2771; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12772; CHECK-NEXT:    vl2re32.v v8, (a6)2773; CHECK-NEXT:    vrem.vx v8, v8, a12774; CHECK-NEXT:    sub a7, a7, a32775; CHECK-NEXT:    vs2r.v v8, (a6)2776; CHECK-NEXT:    add a6, a6, a52777; CHECK-NEXT:    bnez a7, .LBB45_32778; CHECK-NEXT:  # %bb.4: # %middle.block2779; CHECK-NEXT:    beqz a4, .LBB45_72780; CHECK-NEXT:  .LBB45_5: # %for.body.preheader2781; CHECK-NEXT:    slli a2, a2, 22782; CHECK-NEXT:    lui a3, 12783; CHECK-NEXT:    add a2, a0, a22784; CHECK-NEXT:    add a0, a0, a32785; CHECK-NEXT:  .LBB45_6: # %for.body2786; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12787; CHECK-NEXT:    lw a3, 0(a2)2788; CHECK-NEXT:    remw a3, a3, a12789; CHECK-NEXT:    sw a3, 0(a2)2790; CHECK-NEXT:    addi a2, a2, 42791; CHECK-NEXT:    bne a2, a0, .LBB45_62792; CHECK-NEXT:  .LBB45_7: # %for.cond.cleanup2793; CHECK-NEXT:    ret2794entry:2795  %0 = call i64 @llvm.vscale.i64()2796  %1 = shl i64 %0, 22797  %min.iters.check = icmp ugt i64 %1, 10242798  br i1 %min.iters.check, label %for.body.preheader, label %vector.ph2799 2800vector.ph:                                        ; preds = %entry2801  %2 = call i64 @llvm.vscale.i64()2802  %3 = shl i64 %2, 22803  %n.mod.vf = urem i64 1024, %32804  %n.vec = sub nsw i64 1024, %n.mod.vf2805  %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %x, i32 02806  %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer2807  %4 = call i64 @llvm.vscale.i64()2808  %5 = shl i64 %4, 22809  br label %vector.body2810 2811vector.body:                                      ; preds = %vector.body, %vector.ph2812  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]2813  %6 = getelementptr inbounds i32, ptr %a, i64 %index2814  %wide.load = load <vscale x 4 x i32>, ptr %6, align 42815  %7 = srem <vscale x 4 x i32> %wide.load, %broadcast.splat2816  store <vscale x 4 x i32> %7, ptr %6, align 42817  %index.next = add nuw i64 %index, %52818  %8 = icmp eq i64 %index.next, %n.vec2819  br i1 %8, label %middle.block, label %vector.body2820 2821middle.block:                                     ; preds = %vector.body2822  %cmp.n = icmp eq i64 %n.mod.vf, 02823  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader2824 2825for.body.preheader:                               ; preds = %entry, %middle.block2826  %indvars.iv.ph = phi i64 [ 0, %entry ], [ %n.vec, %middle.block ]2827  br label %for.body2828 2829for.cond.cleanup:                                 ; preds = %for.body, %middle.block2830  ret void2831 2832for.body:                                         ; preds = %for.body.preheader, %for.body2833  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ %indvars.iv.ph, %for.body.preheader ]2834  %arrayidx = getelementptr inbounds i32, ptr %a, i64 %indvars.iv2835  %9 = load i32, ptr %arrayidx, align 42836  %rem = srem i32 %9, %x2837  store i32 %rem, ptr %arrayidx, align 42838  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 12839  %cmp.not = icmp eq i64 %indvars.iv.next, 10242840  br i1 %cmp.not, label %for.cond.cleanup, label %for.body2841}2842 2843define void @sink_splat_min(ptr nocapture %a, i32 signext %x) {2844; CHECK-LABEL: sink_splat_min:2845; CHECK:       # %bb.0: # %entry2846; CHECK-NEXT:    li a2, 10242847; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2848; CHECK-NEXT:  .LBB46_1: # %vector.body2849; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12850; CHECK-NEXT:    vle32.v v8, (a0)2851; CHECK-NEXT:    addi a2, a2, 42852; CHECK-NEXT:    vmin.vx v8, v8, a12853; CHECK-NEXT:    vse32.v v8, (a0)2854; CHECK-NEXT:    addi a0, a0, -162855; CHECK-NEXT:    bnez a2, .LBB46_12856; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup2857; CHECK-NEXT:    ret2858entry:2859  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 02860  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer2861  br label %vector.body2862 2863vector.body:                                      ; preds = %vector.body, %entry2864  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]2865  %0 = getelementptr inbounds i32, ptr %a, i64 %index2866  %wide.load = load <4 x i32>, ptr %0, align 42867  %1 = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat)2868  store <4 x i32> %1, ptr %0, align 42869  %index.next = sub nuw i64 %index, 42870  %2 = icmp eq i64 %index.next, 10242871  br i1 %2, label %for.cond.cleanup, label %vector.body2872 2873for.cond.cleanup:                                 ; preds = %vector.body2874  ret void2875}2876 2877define void @sink_splat_min_commute(ptr nocapture %a, i32 signext %x) {2878; CHECK-LABEL: sink_splat_min_commute:2879; CHECK:       # %bb.0: # %entry2880; CHECK-NEXT:    li a2, 10242881; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2882; CHECK-NEXT:  .LBB47_1: # %vector.body2883; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12884; CHECK-NEXT:    vle32.v v8, (a0)2885; CHECK-NEXT:    addi a2, a2, 42886; CHECK-NEXT:    vmin.vx v8, v8, a12887; CHECK-NEXT:    vse32.v v8, (a0)2888; CHECK-NEXT:    addi a0, a0, -162889; CHECK-NEXT:    bnez a2, .LBB47_12890; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup2891; CHECK-NEXT:    ret2892entry:2893  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 02894  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer2895  br label %vector.body2896 2897vector.body:                                      ; preds = %vector.body, %entry2898  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]2899  %0 = getelementptr inbounds i32, ptr %a, i64 %index2900  %wide.load = load <4 x i32>, ptr %0, align 42901  %1 = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load)2902  store <4 x i32> %1, ptr %0, align 42903  %index.next = sub nuw i64 %index, 42904  %2 = icmp eq i64 %index.next, 10242905  br i1 %2, label %for.cond.cleanup, label %vector.body2906 2907for.cond.cleanup:                                 ; preds = %vector.body2908  ret void2909}2910 2911define void @sink_splat_max(ptr nocapture %a, i32 signext %x) {2912; CHECK-LABEL: sink_splat_max:2913; CHECK:       # %bb.0: # %entry2914; CHECK-NEXT:    li a2, 10242915; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2916; CHECK-NEXT:  .LBB48_1: # %vector.body2917; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12918; CHECK-NEXT:    vle32.v v8, (a0)2919; CHECK-NEXT:    addi a2, a2, 42920; CHECK-NEXT:    vmax.vx v8, v8, a12921; CHECK-NEXT:    vse32.v v8, (a0)2922; CHECK-NEXT:    addi a0, a0, -162923; CHECK-NEXT:    bnez a2, .LBB48_12924; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup2925; CHECK-NEXT:    ret2926entry:2927  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 02928  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer2929  br label %vector.body2930 2931vector.body:                                      ; preds = %vector.body, %entry2932  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]2933  %0 = getelementptr inbounds i32, ptr %a, i64 %index2934  %wide.load = load <4 x i32>, ptr %0, align 42935  %1 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat)2936  store <4 x i32> %1, ptr %0, align 42937  %index.next = sub nuw i64 %index, 42938  %2 = icmp eq i64 %index.next, 10242939  br i1 %2, label %for.cond.cleanup, label %vector.body2940 2941for.cond.cleanup:                                 ; preds = %vector.body2942  ret void2943}2944 2945define void @sink_splat_max_commute(ptr nocapture %a, i32 signext %x) {2946; CHECK-LABEL: sink_splat_max_commute:2947; CHECK:       # %bb.0: # %entry2948; CHECK-NEXT:    li a2, 10242949; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2950; CHECK-NEXT:  .LBB49_1: # %vector.body2951; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12952; CHECK-NEXT:    vle32.v v8, (a0)2953; CHECK-NEXT:    addi a2, a2, 42954; CHECK-NEXT:    vmax.vx v8, v8, a12955; CHECK-NEXT:    vse32.v v8, (a0)2956; CHECK-NEXT:    addi a0, a0, -162957; CHECK-NEXT:    bnez a2, .LBB49_12958; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup2959; CHECK-NEXT:    ret2960entry:2961  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 02962  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer2963  br label %vector.body2964 2965vector.body:                                      ; preds = %vector.body, %entry2966  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]2967  %0 = getelementptr inbounds i32, ptr %a, i64 %index2968  %wide.load = load <4 x i32>, ptr %0, align 42969  %1 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load)2970  store <4 x i32> %1, ptr %0, align 42971  %index.next = sub nuw i64 %index, 42972  %2 = icmp eq i64 %index.next, 10242973  br i1 %2, label %for.cond.cleanup, label %vector.body2974 2975for.cond.cleanup:                                 ; preds = %vector.body2976  ret void2977}2978 2979define void @sink_splat_umin(ptr nocapture %a, i32 signext %x) {2980; CHECK-LABEL: sink_splat_umin:2981; CHECK:       # %bb.0: # %entry2982; CHECK-NEXT:    li a2, 10242983; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma2984; CHECK-NEXT:  .LBB50_1: # %vector.body2985; CHECK-NEXT:    # =>This Inner Loop Header: Depth=12986; CHECK-NEXT:    vle32.v v8, (a0)2987; CHECK-NEXT:    addi a2, a2, 42988; CHECK-NEXT:    vminu.vx v8, v8, a12989; CHECK-NEXT:    vse32.v v8, (a0)2990; CHECK-NEXT:    addi a0, a0, -162991; CHECK-NEXT:    bnez a2, .LBB50_12992; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup2993; CHECK-NEXT:    ret2994entry:2995  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 02996  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer2997  br label %vector.body2998 2999vector.body:                                      ; preds = %vector.body, %entry3000  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3001  %0 = getelementptr inbounds i32, ptr %a, i64 %index3002  %wide.load = load <4 x i32>, ptr %0, align 43003  %1 = call <4 x i32> @llvm.umin.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat)3004  store <4 x i32> %1, ptr %0, align 43005  %index.next = sub nuw i64 %index, 43006  %2 = icmp eq i64 %index.next, 10243007  br i1 %2, label %for.cond.cleanup, label %vector.body3008 3009for.cond.cleanup:                                 ; preds = %vector.body3010  ret void3011}3012 3013define void @sink_splat_umin_commute(ptr nocapture %a, i32 signext %x) {3014; CHECK-LABEL: sink_splat_umin_commute:3015; CHECK:       # %bb.0: # %entry3016; CHECK-NEXT:    li a2, 10243017; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3018; CHECK-NEXT:  .LBB51_1: # %vector.body3019; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13020; CHECK-NEXT:    vle32.v v8, (a0)3021; CHECK-NEXT:    addi a2, a2, 43022; CHECK-NEXT:    vminu.vx v8, v8, a13023; CHECK-NEXT:    vse32.v v8, (a0)3024; CHECK-NEXT:    addi a0, a0, -163025; CHECK-NEXT:    bnez a2, .LBB51_13026; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3027; CHECK-NEXT:    ret3028entry:3029  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03030  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3031  br label %vector.body3032 3033vector.body:                                      ; preds = %vector.body, %entry3034  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3035  %0 = getelementptr inbounds i32, ptr %a, i64 %index3036  %wide.load = load <4 x i32>, ptr %0, align 43037  %1 = call <4 x i32> @llvm.umin.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load)3038  store <4 x i32> %1, ptr %0, align 43039  %index.next = sub nuw i64 %index, 43040  %2 = icmp eq i64 %index.next, 10243041  br i1 %2, label %for.cond.cleanup, label %vector.body3042 3043for.cond.cleanup:                                 ; preds = %vector.body3044  ret void3045}3046 3047define void @sink_splat_umax(ptr nocapture %a, i32 signext %x) {3048; CHECK-LABEL: sink_splat_umax:3049; CHECK:       # %bb.0: # %entry3050; CHECK-NEXT:    li a2, 10243051; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3052; CHECK-NEXT:  .LBB52_1: # %vector.body3053; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13054; CHECK-NEXT:    vle32.v v8, (a0)3055; CHECK-NEXT:    addi a2, a2, 43056; CHECK-NEXT:    vmaxu.vx v8, v8, a13057; CHECK-NEXT:    vse32.v v8, (a0)3058; CHECK-NEXT:    addi a0, a0, -163059; CHECK-NEXT:    bnez a2, .LBB52_13060; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3061; CHECK-NEXT:    ret3062entry:3063  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03064  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3065  br label %vector.body3066 3067vector.body:                                      ; preds = %vector.body, %entry3068  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3069  %0 = getelementptr inbounds i32, ptr %a, i64 %index3070  %wide.load = load <4 x i32>, ptr %0, align 43071  %1 = call <4 x i32> @llvm.umax.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat)3072  store <4 x i32> %1, ptr %0, align 43073  %index.next = sub nuw i64 %index, 43074  %2 = icmp eq i64 %index.next, 10243075  br i1 %2, label %for.cond.cleanup, label %vector.body3076 3077for.cond.cleanup:                                 ; preds = %vector.body3078  ret void3079}3080 3081define void @sink_splat_umax_commute(ptr nocapture %a, i32 signext %x) {3082; CHECK-LABEL: sink_splat_umax_commute:3083; CHECK:       # %bb.0: # %entry3084; CHECK-NEXT:    li a2, 10243085; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3086; CHECK-NEXT:  .LBB53_1: # %vector.body3087; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13088; CHECK-NEXT:    vle32.v v8, (a0)3089; CHECK-NEXT:    addi a2, a2, 43090; CHECK-NEXT:    vmaxu.vx v8, v8, a13091; CHECK-NEXT:    vse32.v v8, (a0)3092; CHECK-NEXT:    addi a0, a0, -163093; CHECK-NEXT:    bnez a2, .LBB53_13094; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3095; CHECK-NEXT:    ret3096entry:3097  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03098  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3099  br label %vector.body3100 3101vector.body:                                      ; preds = %vector.body, %entry3102  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3103  %0 = getelementptr inbounds i32, ptr %a, i64 %index3104  %wide.load = load <4 x i32>, ptr %0, align 43105  %1 = call <4 x i32> @llvm.umax.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load)3106  store <4 x i32> %1, ptr %0, align 43107  %index.next = sub nuw i64 %index, 43108  %2 = icmp eq i64 %index.next, 10243109  br i1 %2, label %for.cond.cleanup, label %vector.body3110 3111for.cond.cleanup:                                 ; preds = %vector.body3112  ret void3113}3114 3115define void @sink_splat_sadd_sat(ptr nocapture %a, i32 signext %x) {3116; CHECK-LABEL: sink_splat_sadd_sat:3117; CHECK:       # %bb.0: # %entry3118; CHECK-NEXT:    lui a2, 13119; CHECK-NEXT:    add a2, a0, a23120; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3121; CHECK-NEXT:  .LBB54_1: # %vector.body3122; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13123; CHECK-NEXT:    vle32.v v8, (a0)3124; CHECK-NEXT:    vsadd.vx v8, v8, a13125; CHECK-NEXT:    vse32.v v8, (a0)3126; CHECK-NEXT:    addi a0, a0, 163127; CHECK-NEXT:    bne a0, a2, .LBB54_13128; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3129; CHECK-NEXT:    ret3130entry:3131  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03132  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3133  br label %vector.body3134 3135vector.body:                                      ; preds = %vector.body, %entry3136  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3137  %0 = getelementptr inbounds i32, ptr %a, i64 %index3138  %wide.load = load <4 x i32>, ptr %0, align 43139  %1 = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat)3140  store <4 x i32> %1, ptr %0, align 43141  %index.next = add nuw i64 %index, 43142  %2 = icmp eq i64 %index.next, 10243143  br i1 %2, label %for.cond.cleanup, label %vector.body3144 3145for.cond.cleanup:                                 ; preds = %vector.body3146  ret void3147}3148 3149define void @sink_splat_sadd_sat_commute(ptr nocapture %a, i32 signext %x) {3150; CHECK-LABEL: sink_splat_sadd_sat_commute:3151; CHECK:       # %bb.0: # %entry3152; CHECK-NEXT:    lui a2, 13153; CHECK-NEXT:    add a2, a0, a23154; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3155; CHECK-NEXT:  .LBB55_1: # %vector.body3156; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13157; CHECK-NEXT:    vle32.v v8, (a0)3158; CHECK-NEXT:    vsadd.vx v8, v8, a13159; CHECK-NEXT:    vse32.v v8, (a0)3160; CHECK-NEXT:    addi a0, a0, 163161; CHECK-NEXT:    bne a0, a2, .LBB55_13162; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3163; CHECK-NEXT:    ret3164entry:3165  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03166  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3167  br label %vector.body3168 3169vector.body:                                      ; preds = %vector.body, %entry3170  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3171  %0 = getelementptr inbounds i32, ptr %a, i64 %index3172  %wide.load = load <4 x i32>, ptr %0, align 43173  %1 = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load)3174  store <4 x i32> %1, ptr %0, align 43175  %index.next = add nuw i64 %index, 43176  %2 = icmp eq i64 %index.next, 10243177  br i1 %2, label %for.cond.cleanup, label %vector.body3178 3179for.cond.cleanup:                                 ; preds = %vector.body3180  ret void3181}3182 3183define void @sink_splat_ssub_sat(ptr nocapture %a, i32 signext %x) {3184; CHECK-LABEL: sink_splat_ssub_sat:3185; CHECK:       # %bb.0: # %entry3186; CHECK-NEXT:    li a2, 10243187; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3188; CHECK-NEXT:  .LBB56_1: # %vector.body3189; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13190; CHECK-NEXT:    vle32.v v8, (a0)3191; CHECK-NEXT:    addi a2, a2, 43192; CHECK-NEXT:    vssub.vx v8, v8, a13193; CHECK-NEXT:    vse32.v v8, (a0)3194; CHECK-NEXT:    addi a0, a0, -163195; CHECK-NEXT:    bnez a2, .LBB56_13196; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3197; CHECK-NEXT:    ret3198entry:3199  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03200  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3201  br label %vector.body3202 3203vector.body:                                      ; preds = %vector.body, %entry3204  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3205  %0 = getelementptr inbounds i32, ptr %a, i64 %index3206  %wide.load = load <4 x i32>, ptr %0, align 43207  %1 = call <4 x i32> @llvm.ssub.sat.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat)3208  store <4 x i32> %1, ptr %0, align 43209  %index.next = sub nuw i64 %index, 43210  %2 = icmp eq i64 %index.next, 10243211  br i1 %2, label %for.cond.cleanup, label %vector.body3212 3213for.cond.cleanup:                                 ; preds = %vector.body3214  ret void3215}3216 3217define void @sink_splat_uadd_sat(ptr nocapture %a, i32 signext %x) {3218; CHECK-LABEL: sink_splat_uadd_sat:3219; CHECK:       # %bb.0: # %entry3220; CHECK-NEXT:    lui a2, 13221; CHECK-NEXT:    add a2, a0, a23222; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3223; CHECK-NEXT:  .LBB57_1: # %vector.body3224; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13225; CHECK-NEXT:    vle32.v v8, (a0)3226; CHECK-NEXT:    vsaddu.vx v8, v8, a13227; CHECK-NEXT:    vse32.v v8, (a0)3228; CHECK-NEXT:    addi a0, a0, 163229; CHECK-NEXT:    bne a0, a2, .LBB57_13230; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3231; CHECK-NEXT:    ret3232entry:3233  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03234  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3235  br label %vector.body3236 3237vector.body:                                      ; preds = %vector.body, %entry3238  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3239  %0 = getelementptr inbounds i32, ptr %a, i64 %index3240  %wide.load = load <4 x i32>, ptr %0, align 43241  %1 = call <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat)3242  store <4 x i32> %1, ptr %0, align 43243  %index.next = add nuw i64 %index, 43244  %2 = icmp eq i64 %index.next, 10243245  br i1 %2, label %for.cond.cleanup, label %vector.body3246 3247for.cond.cleanup:                                 ; preds = %vector.body3248  ret void3249}3250 3251define void @sink_splat_uadd_sat_commute(ptr nocapture %a, i32 signext %x) {3252; CHECK-LABEL: sink_splat_uadd_sat_commute:3253; CHECK:       # %bb.0: # %entry3254; CHECK-NEXT:    lui a2, 13255; CHECK-NEXT:    add a2, a0, a23256; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3257; CHECK-NEXT:  .LBB58_1: # %vector.body3258; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13259; CHECK-NEXT:    vle32.v v8, (a0)3260; CHECK-NEXT:    vsaddu.vx v8, v8, a13261; CHECK-NEXT:    vse32.v v8, (a0)3262; CHECK-NEXT:    addi a0, a0, 163263; CHECK-NEXT:    bne a0, a2, .LBB58_13264; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3265; CHECK-NEXT:    ret3266entry:3267  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03268  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3269  br label %vector.body3270 3271vector.body:                                      ; preds = %vector.body, %entry3272  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3273  %0 = getelementptr inbounds i32, ptr %a, i64 %index3274  %wide.load = load <4 x i32>, ptr %0, align 43275  %1 = call <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load)3276  store <4 x i32> %1, ptr %0, align 43277  %index.next = add nuw i64 %index, 43278  %2 = icmp eq i64 %index.next, 10243279  br i1 %2, label %for.cond.cleanup, label %vector.body3280 3281for.cond.cleanup:                                 ; preds = %vector.body3282  ret void3283}3284 3285define void @sink_splat_usub_sat(ptr nocapture %a, i32 signext %x) {3286; CHECK-LABEL: sink_splat_usub_sat:3287; CHECK:       # %bb.0: # %entry3288; CHECK-NEXT:    li a2, 10243289; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3290; CHECK-NEXT:  .LBB59_1: # %vector.body3291; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13292; CHECK-NEXT:    vle32.v v8, (a0)3293; CHECK-NEXT:    addi a2, a2, 43294; CHECK-NEXT:    vssubu.vx v8, v8, a13295; CHECK-NEXT:    vse32.v v8, (a0)3296; CHECK-NEXT:    addi a0, a0, -163297; CHECK-NEXT:    bnez a2, .LBB59_13298; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3299; CHECK-NEXT:    ret3300entry:3301  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03302  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3303  br label %vector.body3304 3305vector.body:                                      ; preds = %vector.body, %entry3306  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3307  %0 = getelementptr inbounds i32, ptr %a, i64 %index3308  %wide.load = load <4 x i32>, ptr %0, align 43309  %1 = call <4 x i32> @llvm.usub.sat.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat)3310  store <4 x i32> %1, ptr %0, align 43311  %index.next = sub nuw i64 %index, 43312  %2 = icmp eq i64 %index.next, 10243313  br i1 %2, label %for.cond.cleanup, label %vector.body3314 3315for.cond.cleanup:                                 ; preds = %vector.body3316  ret void3317}3318 3319define void @sink_splat_vp_mul(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {3320; CHECK-LABEL: sink_splat_vp_mul:3321; CHECK:       # %bb.0: # %entry3322; CHECK-NEXT:    lui a3, 13323; CHECK-NEXT:    add a3, a0, a33324; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3325; CHECK-NEXT:  .LBB60_1: # %vector.body3326; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13327; CHECK-NEXT:    vle32.v v8, (a0)3328; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma3329; CHECK-NEXT:    vmul.vx v8, v8, a1, v0.t3330; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3331; CHECK-NEXT:    vse32.v v8, (a0)3332; CHECK-NEXT:    addi a0, a0, 163333; CHECK-NEXT:    bne a0, a3, .LBB60_13334; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3335; CHECK-NEXT:    ret3336entry:3337  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03338  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3339  br label %vector.body3340 3341vector.body:                                      ; preds = %vector.body, %entry3342  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3343  %0 = getelementptr inbounds i32, ptr %a, i64 %index3344  %wide.load = load <4 x i32>, ptr %0, align 43345  %1 = call <4 x i32> @llvm.vp.mul.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)3346  store <4 x i32> %1, ptr %0, align 43347  %index.next = add nuw i64 %index, 43348  %2 = icmp eq i64 %index.next, 10243349  br i1 %2, label %for.cond.cleanup, label %vector.body3350 3351for.cond.cleanup:                                 ; preds = %vector.body3352  ret void3353}3354 3355define void @sink_splat_vp_add(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {3356; CHECK-LABEL: sink_splat_vp_add:3357; CHECK:       # %bb.0: # %entry3358; CHECK-NEXT:    lui a3, 13359; CHECK-NEXT:    add a3, a0, a33360; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3361; CHECK-NEXT:  .LBB61_1: # %vector.body3362; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13363; CHECK-NEXT:    vle32.v v8, (a0)3364; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma3365; CHECK-NEXT:    vadd.vx v8, v8, a1, v0.t3366; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3367; CHECK-NEXT:    vse32.v v8, (a0)3368; CHECK-NEXT:    addi a0, a0, 163369; CHECK-NEXT:    bne a0, a3, .LBB61_13370; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3371; CHECK-NEXT:    ret3372entry:3373  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03374  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3375  br label %vector.body3376 3377vector.body:                                      ; preds = %vector.body, %entry3378  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3379  %0 = getelementptr inbounds i32, ptr %a, i64 %index3380  %wide.load = load <4 x i32>, ptr %0, align 43381  %1 = call <4 x i32> @llvm.vp.add.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)3382  store <4 x i32> %1, ptr %0, align 43383  %index.next = add nuw i64 %index, 43384  %2 = icmp eq i64 %index.next, 10243385  br i1 %2, label %for.cond.cleanup, label %vector.body3386 3387for.cond.cleanup:                                 ; preds = %vector.body3388  ret void3389}3390 3391define void @sink_splat_vp_add_commute(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {3392; CHECK-LABEL: sink_splat_vp_add_commute:3393; CHECK:       # %bb.0: # %entry3394; CHECK-NEXT:    lui a3, 13395; CHECK-NEXT:    add a3, a0, a33396; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3397; CHECK-NEXT:  .LBB62_1: # %vector.body3398; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13399; CHECK-NEXT:    vle32.v v8, (a0)3400; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma3401; CHECK-NEXT:    vadd.vx v8, v8, a1, v0.t3402; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3403; CHECK-NEXT:    vse32.v v8, (a0)3404; CHECK-NEXT:    addi a0, a0, 163405; CHECK-NEXT:    bne a0, a3, .LBB62_13406; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3407; CHECK-NEXT:    ret3408entry:3409  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03410  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3411  br label %vector.body3412 3413vector.body:                                      ; preds = %vector.body, %entry3414  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3415  %0 = getelementptr inbounds i32, ptr %a, i64 %index3416  %wide.load = load <4 x i32>, ptr %0, align 43417  %1 = call <4 x i32> @llvm.vp.add.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load, <4 x i1> %m, i32 %vl)3418  store <4 x i32> %1, ptr %0, align 43419  %index.next = add nuw i64 %index, 43420  %2 = icmp eq i64 %index.next, 10243421  br i1 %2, label %for.cond.cleanup, label %vector.body3422 3423for.cond.cleanup:                                 ; preds = %vector.body3424  ret void3425}3426 3427define void @sink_splat_vp_sub(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {3428; CHECK-LABEL: sink_splat_vp_sub:3429; CHECK:       # %bb.0: # %entry3430; CHECK-NEXT:    lui a3, 13431; CHECK-NEXT:    add a3, a0, a33432; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3433; CHECK-NEXT:  .LBB63_1: # %vector.body3434; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13435; CHECK-NEXT:    vle32.v v8, (a0)3436; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma3437; CHECK-NEXT:    vsub.vx v8, v8, a1, v0.t3438; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3439; CHECK-NEXT:    vse32.v v8, (a0)3440; CHECK-NEXT:    addi a0, a0, 163441; CHECK-NEXT:    bne a0, a3, .LBB63_13442; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3443; CHECK-NEXT:    ret3444entry:3445  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03446  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3447  br label %vector.body3448 3449vector.body:                                      ; preds = %vector.body, %entry3450  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3451  %0 = getelementptr inbounds i32, ptr %a, i64 %index3452  %wide.load = load <4 x i32>, ptr %0, align 43453  %1 = call <4 x i32> @llvm.vp.sub.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)3454  store <4 x i32> %1, ptr %0, align 43455  %index.next = add nuw i64 %index, 43456  %2 = icmp eq i64 %index.next, 10243457  br i1 %2, label %for.cond.cleanup, label %vector.body3458 3459for.cond.cleanup:                                 ; preds = %vector.body3460  ret void3461}3462 3463define void @sink_splat_vp_rsub(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {3464; CHECK-LABEL: sink_splat_vp_rsub:3465; CHECK:       # %bb.0: # %entry3466; CHECK-NEXT:    lui a3, 13467; CHECK-NEXT:    add a3, a0, a33468; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3469; CHECK-NEXT:  .LBB64_1: # %vector.body3470; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13471; CHECK-NEXT:    vle32.v v8, (a0)3472; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma3473; CHECK-NEXT:    vrsub.vx v8, v8, a1, v0.t3474; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3475; CHECK-NEXT:    vse32.v v8, (a0)3476; CHECK-NEXT:    addi a0, a0, 163477; CHECK-NEXT:    bne a0, a3, .LBB64_13478; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3479; CHECK-NEXT:    ret3480entry:3481  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03482  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3483  br label %vector.body3484 3485vector.body:                                      ; preds = %vector.body, %entry3486  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3487  %0 = getelementptr inbounds i32, ptr %a, i64 %index3488  %wide.load = load <4 x i32>, ptr %0, align 43489  %1 = call <4 x i32> @llvm.vp.sub.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load, <4 x i1> %m, i32 %vl)3490  store <4 x i32> %1, ptr %0, align 43491  %index.next = add nuw i64 %index, 43492  %2 = icmp eq i64 %index.next, 10243493  br i1 %2, label %for.cond.cleanup, label %vector.body3494 3495for.cond.cleanup:                                 ; preds = %vector.body3496  ret void3497}3498 3499define void @sink_splat_vp_shl(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {3500; CHECK-LABEL: sink_splat_vp_shl:3501; CHECK:       # %bb.0: # %entry3502; CHECK-NEXT:    lui a3, 13503; CHECK-NEXT:    add a3, a0, a33504; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3505; CHECK-NEXT:  .LBB65_1: # %vector.body3506; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13507; CHECK-NEXT:    vle32.v v8, (a0)3508; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma3509; CHECK-NEXT:    vsll.vx v8, v8, a1, v0.t3510; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3511; CHECK-NEXT:    vse32.v v8, (a0)3512; CHECK-NEXT:    addi a0, a0, 163513; CHECK-NEXT:    bne a0, a3, .LBB65_13514; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3515; CHECK-NEXT:    ret3516entry:3517  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03518  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3519  br label %vector.body3520 3521vector.body:                                      ; preds = %vector.body, %entry3522  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3523  %0 = getelementptr inbounds i32, ptr %a, i64 %index3524  %wide.load = load <4 x i32>, ptr %0, align 43525  %1 = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)3526  store <4 x i32> %1, ptr %0, align 43527  %index.next = add nuw i64 %index, 43528  %2 = icmp eq i64 %index.next, 10243529  br i1 %2, label %for.cond.cleanup, label %vector.body3530 3531for.cond.cleanup:                                 ; preds = %vector.body3532  ret void3533}3534 3535define void @sink_splat_vp_lshr(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {3536; CHECK-LABEL: sink_splat_vp_lshr:3537; CHECK:       # %bb.0: # %entry3538; CHECK-NEXT:    lui a3, 13539; CHECK-NEXT:    add a3, a0, a33540; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3541; CHECK-NEXT:  .LBB66_1: # %vector.body3542; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13543; CHECK-NEXT:    vle32.v v8, (a0)3544; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma3545; CHECK-NEXT:    vsrl.vx v8, v8, a1, v0.t3546; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3547; CHECK-NEXT:    vse32.v v8, (a0)3548; CHECK-NEXT:    addi a0, a0, 163549; CHECK-NEXT:    bne a0, a3, .LBB66_13550; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3551; CHECK-NEXT:    ret3552entry:3553  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03554  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3555  br label %vector.body3556 3557vector.body:                                      ; preds = %vector.body, %entry3558  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3559  %0 = getelementptr inbounds i32, ptr %a, i64 %index3560  %wide.load = load <4 x i32>, ptr %0, align 43561  %1 = call <4 x i32> @llvm.vp.lshr.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)3562  store <4 x i32> %1, ptr %0, align 43563  %index.next = add nuw i64 %index, 43564  %2 = icmp eq i64 %index.next, 10243565  br i1 %2, label %for.cond.cleanup, label %vector.body3566 3567for.cond.cleanup:                                 ; preds = %vector.body3568  ret void3569}3570 3571define void @sink_splat_vp_ashr(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {3572; CHECK-LABEL: sink_splat_vp_ashr:3573; CHECK:       # %bb.0: # %entry3574; CHECK-NEXT:    lui a3, 13575; CHECK-NEXT:    add a3, a0, a33576; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3577; CHECK-NEXT:  .LBB67_1: # %vector.body3578; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13579; CHECK-NEXT:    vle32.v v8, (a0)3580; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma3581; CHECK-NEXT:    vsra.vx v8, v8, a1, v0.t3582; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3583; CHECK-NEXT:    vse32.v v8, (a0)3584; CHECK-NEXT:    addi a0, a0, 163585; CHECK-NEXT:    bne a0, a3, .LBB67_13586; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3587; CHECK-NEXT:    ret3588entry:3589  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03590  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3591  br label %vector.body3592 3593vector.body:                                      ; preds = %vector.body, %entry3594  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3595  %0 = getelementptr inbounds i32, ptr %a, i64 %index3596  %wide.load = load <4 x i32>, ptr %0, align 43597  %1 = call <4 x i32> @llvm.vp.ashr.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)3598  store <4 x i32> %1, ptr %0, align 43599  %index.next = add nuw i64 %index, 43600  %2 = icmp eq i64 %index.next, 10243601  br i1 %2, label %for.cond.cleanup, label %vector.body3602 3603for.cond.cleanup:                                 ; preds = %vector.body3604  ret void3605}3606 3607define void @sink_splat_vp_fmul(ptr nocapture %a, float %x, <4 x i1> %m, i32 zeroext %vl) {3608; CHECK-LABEL: sink_splat_vp_fmul:3609; CHECK:       # %bb.0: # %entry3610; CHECK-NEXT:    lui a2, 13611; CHECK-NEXT:    add a2, a0, a23612; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3613; CHECK-NEXT:  .LBB68_1: # %vector.body3614; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13615; CHECK-NEXT:    vle32.v v8, (a0)3616; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma3617; CHECK-NEXT:    vfmul.vf v8, v8, fa0, v0.t3618; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3619; CHECK-NEXT:    vse32.v v8, (a0)3620; CHECK-NEXT:    addi a0, a0, 163621; CHECK-NEXT:    bne a0, a2, .LBB68_13622; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3623; CHECK-NEXT:    ret3624entry:3625  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 03626  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer3627  br label %vector.body3628 3629vector.body:                                      ; preds = %vector.body, %entry3630  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3631  %0 = getelementptr inbounds float, ptr %a, i64 %index3632  %wide.load = load <4 x float>, ptr %0, align 43633  %1 = call <4 x float> @llvm.vp.fmul.v4i32(<4 x float> %wide.load, <4 x float> %broadcast.splat, <4 x i1> %m, i32 %vl)3634  store <4 x float> %1, ptr %0, align 43635  %index.next = add nuw i64 %index, 43636  %2 = icmp eq i64 %index.next, 10243637  br i1 %2, label %for.cond.cleanup, label %vector.body3638 3639for.cond.cleanup:                                 ; preds = %vector.body3640  ret void3641}3642 3643define void @sink_splat_vp_fdiv(ptr nocapture %a, float %x, <4 x i1> %m, i32 zeroext %vl) {3644; CHECK-LABEL: sink_splat_vp_fdiv:3645; CHECK:       # %bb.0: # %entry3646; CHECK-NEXT:    lui a2, 13647; CHECK-NEXT:    add a2, a0, a23648; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3649; CHECK-NEXT:  .LBB69_1: # %vector.body3650; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13651; CHECK-NEXT:    vle32.v v8, (a0)3652; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma3653; CHECK-NEXT:    vfdiv.vf v8, v8, fa0, v0.t3654; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3655; CHECK-NEXT:    vse32.v v8, (a0)3656; CHECK-NEXT:    addi a0, a0, 163657; CHECK-NEXT:    bne a0, a2, .LBB69_13658; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3659; CHECK-NEXT:    ret3660entry:3661  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 03662  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer3663  br label %vector.body3664 3665vector.body:                                      ; preds = %vector.body, %entry3666  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3667  %0 = getelementptr inbounds float, ptr %a, i64 %index3668  %wide.load = load <4 x float>, ptr %0, align 43669  %1 = call <4 x float> @llvm.vp.fdiv.v4i32(<4 x float> %wide.load, <4 x float> %broadcast.splat, <4 x i1> %m, i32 %vl)3670  store <4 x float> %1, ptr %0, align 43671  %index.next = add nuw i64 %index, 43672  %2 = icmp eq i64 %index.next, 10243673  br i1 %2, label %for.cond.cleanup, label %vector.body3674 3675for.cond.cleanup:                                 ; preds = %vector.body3676  ret void3677}3678 3679define void @sink_splat_vp_frdiv(ptr nocapture %a, float %x, <4 x i1> %m, i32 zeroext %vl) {3680; CHECK-LABEL: sink_splat_vp_frdiv:3681; CHECK:       # %bb.0: # %entry3682; CHECK-NEXT:    lui a2, 13683; CHECK-NEXT:    add a2, a0, a23684; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3685; CHECK-NEXT:  .LBB70_1: # %vector.body3686; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13687; CHECK-NEXT:    vle32.v v8, (a0)3688; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma3689; CHECK-NEXT:    vfrdiv.vf v8, v8, fa0, v0.t3690; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3691; CHECK-NEXT:    vse32.v v8, (a0)3692; CHECK-NEXT:    addi a0, a0, 163693; CHECK-NEXT:    bne a0, a2, .LBB70_13694; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3695; CHECK-NEXT:    ret3696entry:3697  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 03698  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer3699  br label %vector.body3700 3701vector.body:                                      ; preds = %vector.body, %entry3702  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3703  %0 = getelementptr inbounds float, ptr %a, i64 %index3704  %wide.load = load <4 x float>, ptr %0, align 43705  %1 = call <4 x float> @llvm.vp.fdiv.v4i32(<4 x float> %broadcast.splat, <4 x float> %wide.load, <4 x i1> %m, i32 %vl)3706  store <4 x float> %1, ptr %0, align 43707  %index.next = add nuw i64 %index, 43708  %2 = icmp eq i64 %index.next, 10243709  br i1 %2, label %for.cond.cleanup, label %vector.body3710 3711for.cond.cleanup:                                 ; preds = %vector.body3712  ret void3713}3714 3715define void @sink_splat_vp_fadd(ptr nocapture %a, float %x, <4 x i1> %m, i32 zeroext %vl) {3716; CHECK-LABEL: sink_splat_vp_fadd:3717; CHECK:       # %bb.0: # %entry3718; CHECK-NEXT:    lui a2, 13719; CHECK-NEXT:    add a2, a0, a23720; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3721; CHECK-NEXT:  .LBB71_1: # %vector.body3722; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13723; CHECK-NEXT:    vle32.v v8, (a0)3724; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma3725; CHECK-NEXT:    vfadd.vf v8, v8, fa0, v0.t3726; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3727; CHECK-NEXT:    vse32.v v8, (a0)3728; CHECK-NEXT:    addi a0, a0, 163729; CHECK-NEXT:    bne a0, a2, .LBB71_13730; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3731; CHECK-NEXT:    ret3732entry:3733  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 03734  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer3735  br label %vector.body3736 3737vector.body:                                      ; preds = %vector.body, %entry3738  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3739  %0 = getelementptr inbounds float, ptr %a, i64 %index3740  %wide.load = load <4 x float>, ptr %0, align 43741  %1 = call <4 x float> @llvm.vp.fadd.v4i32(<4 x float> %wide.load, <4 x float> %broadcast.splat, <4 x i1> %m, i32 %vl)3742  store <4 x float> %1, ptr %0, align 43743  %index.next = add nuw i64 %index, 43744  %2 = icmp eq i64 %index.next, 10243745  br i1 %2, label %for.cond.cleanup, label %vector.body3746 3747for.cond.cleanup:                                 ; preds = %vector.body3748  ret void3749}3750 3751define void @sink_splat_vp_fsub(ptr nocapture %a, float %x, <4 x i1> %m, i32 zeroext %vl) {3752; CHECK-LABEL: sink_splat_vp_fsub:3753; CHECK:       # %bb.0: # %entry3754; CHECK-NEXT:    lui a2, 13755; CHECK-NEXT:    add a2, a0, a23756; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3757; CHECK-NEXT:  .LBB72_1: # %vector.body3758; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13759; CHECK-NEXT:    vle32.v v8, (a0)3760; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma3761; CHECK-NEXT:    vfsub.vf v8, v8, fa0, v0.t3762; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3763; CHECK-NEXT:    vse32.v v8, (a0)3764; CHECK-NEXT:    addi a0, a0, 163765; CHECK-NEXT:    bne a0, a2, .LBB72_13766; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3767; CHECK-NEXT:    ret3768entry:3769  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 03770  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer3771  br label %vector.body3772 3773vector.body:                                      ; preds = %vector.body, %entry3774  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3775  %0 = getelementptr inbounds float, ptr %a, i64 %index3776  %wide.load = load <4 x float>, ptr %0, align 43777  %1 = call <4 x float> @llvm.vp.fsub.v4i32(<4 x float> %wide.load, <4 x float> %broadcast.splat, <4 x i1> %m, i32 %vl)3778  store <4 x float> %1, ptr %0, align 43779  %index.next = add nuw i64 %index, 43780  %2 = icmp eq i64 %index.next, 10243781  br i1 %2, label %for.cond.cleanup, label %vector.body3782 3783for.cond.cleanup:                                 ; preds = %vector.body3784  ret void3785}3786 3787define void @sink_splat_vp_frsub(ptr nocapture %a, float %x, <4 x i1> %m, i32 zeroext %vl) {3788; CHECK-LABEL: sink_splat_vp_frsub:3789; CHECK:       # %bb.0: # %entry3790; CHECK-NEXT:    lui a2, 13791; CHECK-NEXT:    add a2, a0, a23792; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3793; CHECK-NEXT:  .LBB73_1: # %vector.body3794; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13795; CHECK-NEXT:    vle32.v v8, (a0)3796; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma3797; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t3798; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3799; CHECK-NEXT:    vse32.v v8, (a0)3800; CHECK-NEXT:    addi a0, a0, 163801; CHECK-NEXT:    bne a0, a2, .LBB73_13802; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3803; CHECK-NEXT:    ret3804entry:3805  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 03806  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer3807  br label %vector.body3808 3809vector.body:                                      ; preds = %vector.body, %entry3810  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3811  %0 = getelementptr inbounds float, ptr %a, i64 %index3812  %wide.load = load <4 x float>, ptr %0, align 43813  %1 = call <4 x float> @llvm.vp.fsub.v4i32(<4 x float> %broadcast.splat, <4 x float> %wide.load, <4 x i1> %m, i32 %vl)3814  store <4 x float> %1, ptr %0, align 43815  %index.next = add nuw i64 %index, 43816  %2 = icmp eq i64 %index.next, 10243817  br i1 %2, label %for.cond.cleanup, label %vector.body3818 3819for.cond.cleanup:                                 ; preds = %vector.body3820  ret void3821}3822 3823define void @sink_splat_vp_udiv(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {3824; CHECK-LABEL: sink_splat_vp_udiv:3825; CHECK:       # %bb.0: # %entry3826; CHECK-NEXT:    lui a3, 13827; CHECK-NEXT:    add a3, a0, a33828; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3829; CHECK-NEXT:  .LBB74_1: # %vector.body3830; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13831; CHECK-NEXT:    vle32.v v8, (a0)3832; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma3833; CHECK-NEXT:    vdivu.vx v8, v8, a1, v0.t3834; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3835; CHECK-NEXT:    vse32.v v8, (a0)3836; CHECK-NEXT:    addi a0, a0, 163837; CHECK-NEXT:    bne a0, a3, .LBB74_13838; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3839; CHECK-NEXT:    ret3840entry:3841  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03842  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3843  br label %vector.body3844 3845vector.body:                                      ; preds = %vector.body, %entry3846  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3847  %0 = getelementptr inbounds i32, ptr %a, i64 %index3848  %wide.load = load <4 x i32>, ptr %0, align 43849  %1 = call <4 x i32> @llvm.vp.udiv.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)3850  store <4 x i32> %1, ptr %0, align 43851  %index.next = add nuw i64 %index, 43852  %2 = icmp eq i64 %index.next, 10243853  br i1 %2, label %for.cond.cleanup, label %vector.body3854 3855for.cond.cleanup:                                 ; preds = %vector.body3856  ret void3857}3858 3859define void @sink_splat_vp_sdiv(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {3860; CHECK-LABEL: sink_splat_vp_sdiv:3861; CHECK:       # %bb.0: # %entry3862; CHECK-NEXT:    lui a3, 13863; CHECK-NEXT:    add a3, a0, a33864; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3865; CHECK-NEXT:  .LBB75_1: # %vector.body3866; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13867; CHECK-NEXT:    vle32.v v8, (a0)3868; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma3869; CHECK-NEXT:    vdiv.vx v8, v8, a1, v0.t3870; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3871; CHECK-NEXT:    vse32.v v8, (a0)3872; CHECK-NEXT:    addi a0, a0, 163873; CHECK-NEXT:    bne a0, a3, .LBB75_13874; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3875; CHECK-NEXT:    ret3876entry:3877  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03878  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3879  br label %vector.body3880 3881vector.body:                                      ; preds = %vector.body, %entry3882  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3883  %0 = getelementptr inbounds i32, ptr %a, i64 %index3884  %wide.load = load <4 x i32>, ptr %0, align 43885  %1 = call <4 x i32> @llvm.vp.sdiv.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)3886  store <4 x i32> %1, ptr %0, align 43887  %index.next = add nuw i64 %index, 43888  %2 = icmp eq i64 %index.next, 10243889  br i1 %2, label %for.cond.cleanup, label %vector.body3890 3891for.cond.cleanup:                                 ; preds = %vector.body3892  ret void3893}3894 3895define void @sink_splat_vp_urem(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {3896; CHECK-LABEL: sink_splat_vp_urem:3897; CHECK:       # %bb.0: # %entry3898; CHECK-NEXT:    lui a3, 13899; CHECK-NEXT:    add a3, a0, a33900; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3901; CHECK-NEXT:  .LBB76_1: # %vector.body3902; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13903; CHECK-NEXT:    vle32.v v8, (a0)3904; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma3905; CHECK-NEXT:    vremu.vx v8, v8, a1, v0.t3906; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3907; CHECK-NEXT:    vse32.v v8, (a0)3908; CHECK-NEXT:    addi a0, a0, 163909; CHECK-NEXT:    bne a0, a3, .LBB76_13910; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3911; CHECK-NEXT:    ret3912entry:3913  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03914  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3915  br label %vector.body3916 3917vector.body:                                      ; preds = %vector.body, %entry3918  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3919  %0 = getelementptr inbounds i32, ptr %a, i64 %index3920  %wide.load = load <4 x i32>, ptr %0, align 43921  %1 = call <4 x i32> @llvm.vp.urem.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)3922  store <4 x i32> %1, ptr %0, align 43923  %index.next = add nuw i64 %index, 43924  %2 = icmp eq i64 %index.next, 10243925  br i1 %2, label %for.cond.cleanup, label %vector.body3926 3927for.cond.cleanup:                                 ; preds = %vector.body3928  ret void3929}3930 3931define void @sink_splat_vp_srem(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {3932; CHECK-LABEL: sink_splat_vp_srem:3933; CHECK:       # %bb.0: # %entry3934; CHECK-NEXT:    lui a3, 13935; CHECK-NEXT:    add a3, a0, a33936; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3937; CHECK-NEXT:  .LBB77_1: # %vector.body3938; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13939; CHECK-NEXT:    vle32.v v8, (a0)3940; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma3941; CHECK-NEXT:    vrem.vx v8, v8, a1, v0.t3942; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3943; CHECK-NEXT:    vse32.v v8, (a0)3944; CHECK-NEXT:    addi a0, a0, 163945; CHECK-NEXT:    bne a0, a3, .LBB77_13946; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3947; CHECK-NEXT:    ret3948entry:3949  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03950  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3951  br label %vector.body3952 3953vector.body:                                      ; preds = %vector.body, %entry3954  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3955  %0 = getelementptr inbounds i32, ptr %a, i64 %index3956  %wide.load = load <4 x i32>, ptr %0, align 43957  %1 = call <4 x i32> @llvm.vp.srem.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)3958  store <4 x i32> %1, ptr %0, align 43959  %index.next = add nuw i64 %index, 43960  %2 = icmp eq i64 %index.next, 10243961  br i1 %2, label %for.cond.cleanup, label %vector.body3962 3963for.cond.cleanup:                                 ; preds = %vector.body3964  ret void3965}3966 3967; Check that we don't sink a splat operand that has no chance of being folded.3968 3969define void @sink_splat_vp_srem_commute(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {3970; CHECK-LABEL: sink_splat_vp_srem_commute:3971; CHECK:       # %bb.0: # %entry3972; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3973; CHECK-NEXT:    vmv.v.x v8, a13974; CHECK-NEXT:    lui a1, 13975; CHECK-NEXT:    add a1, a0, a13976; CHECK-NEXT:  .LBB78_1: # %vector.body3977; CHECK-NEXT:    # =>This Inner Loop Header: Depth=13978; CHECK-NEXT:    vle32.v v9, (a0)3979; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma3980; CHECK-NEXT:    vrem.vv v9, v8, v9, v0.t3981; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma3982; CHECK-NEXT:    vse32.v v9, (a0)3983; CHECK-NEXT:    addi a0, a0, 163984; CHECK-NEXT:    bne a0, a1, .LBB78_13985; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup3986; CHECK-NEXT:    ret3987entry:3988  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 03989  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer3990  br label %vector.body3991 3992vector.body:                                      ; preds = %vector.body, %entry3993  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]3994  %0 = getelementptr inbounds i32, ptr %a, i64 %index3995  %wide.load = load <4 x i32>, ptr %0, align 43996  %1 = call <4 x i32> @llvm.vp.srem.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load, <4 x i1> %m, i32 %vl)3997  store <4 x i32> %1, ptr %0, align 43998  %index.next = add nuw i64 %index, 43999  %2 = icmp eq i64 %index.next, 10244000  br i1 %2, label %for.cond.cleanup, label %vector.body4001 4002for.cond.cleanup:                                 ; preds = %vector.body4003  ret void4004}4005 4006define void @sink_splat_vp_fma(ptr noalias nocapture %a, ptr nocapture readonly %b, float %x, <4 x i1> %m, i32 zeroext %vl) {4007; CHECK-LABEL: sink_splat_vp_fma:4008; CHECK:       # %bb.0: # %entry4009; CHECK-NEXT:    lui a3, 14010; CHECK-NEXT:    add a3, a1, a34011; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4012; CHECK-NEXT:  .LBB79_1: # %vector.body4013; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14014; CHECK-NEXT:    vle32.v v8, (a0)4015; CHECK-NEXT:    vle32.v v9, (a1)4016; CHECK-NEXT:    addi a1, a1, 164017; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma4018; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t4019; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4020; CHECK-NEXT:    vse32.v v8, (a0)4021; CHECK-NEXT:    addi a0, a0, 164022; CHECK-NEXT:    bne a1, a3, .LBB79_14023; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4024; CHECK-NEXT:    ret4025entry:4026  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 04027  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer4028  br label %vector.body4029 4030vector.body:                                      ; preds = %vector.body, %entry4031  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4032  %0 = getelementptr inbounds float, ptr %a, i64 %index4033  %wide.load = load <4 x float>, ptr %0, align 44034  %1 = getelementptr inbounds float, ptr %b, i64 %index4035  %wide.load12 = load <4 x float>, ptr %1, align 44036  %2 = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %wide.load, <4 x float> %broadcast.splat, <4 x float> %wide.load12, <4 x i1> %m, i32 %vl)4037  store <4 x float> %2, ptr %0, align 44038  %index.next = add nuw i64 %index, 44039  %3 = icmp eq i64 %index.next, 10244040  br i1 %3, label %for.cond.cleanup, label %vector.body4041 4042for.cond.cleanup:                                 ; preds = %vector.body4043  ret void4044}4045 4046define void @sink_splat_vp_fma_commute(ptr noalias nocapture %a, ptr nocapture readonly %b, float %x, <4 x i1> %m, i32 zeroext %vl) {4047; CHECK-LABEL: sink_splat_vp_fma_commute:4048; CHECK:       # %bb.0: # %entry4049; CHECK-NEXT:    lui a3, 14050; CHECK-NEXT:    add a3, a1, a34051; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4052; CHECK-NEXT:  .LBB80_1: # %vector.body4053; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14054; CHECK-NEXT:    vle32.v v8, (a0)4055; CHECK-NEXT:    vle32.v v9, (a1)4056; CHECK-NEXT:    addi a1, a1, 164057; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma4058; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t4059; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4060; CHECK-NEXT:    vse32.v v8, (a0)4061; CHECK-NEXT:    addi a0, a0, 164062; CHECK-NEXT:    bne a1, a3, .LBB80_14063; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4064; CHECK-NEXT:    ret4065entry:4066  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 04067  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer4068  br label %vector.body4069 4070vector.body:                                      ; preds = %vector.body, %entry4071  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4072  %0 = getelementptr inbounds float, ptr %a, i64 %index4073  %wide.load = load <4 x float>, ptr %0, align 44074  %1 = getelementptr inbounds float, ptr %b, i64 %index4075  %wide.load12 = load <4 x float>, ptr %1, align 44076  %2 = call <4 x float> @llvm.vp.fma.v4f32(<4 x float> %broadcast.splat, <4 x float> %wide.load, <4 x float> %wide.load12, <4 x i1> %m, i32 %vl)4077  store <4 x float> %2, ptr %0, align 44078  %index.next = add nuw i64 %index, 44079  %3 = icmp eq i64 %index.next, 10244080  br i1 %3, label %for.cond.cleanup, label %vector.body4081 4082for.cond.cleanup:                                 ; preds = %vector.body4083  ret void4084}4085 4086define void @sink_splat_mul_lmul2(ptr nocapture %a, i64 signext %x) {4087; CHECK-LABEL: sink_splat_mul_lmul2:4088; CHECK:       # %bb.0: # %entry4089; CHECK-NEXT:    lui a2, 24090; CHECK-NEXT:    add a2, a0, a24091; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma4092; CHECK-NEXT:  .LBB81_1: # %vector.body4093; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14094; CHECK-NEXT:    vle64.v v8, (a0)4095; CHECK-NEXT:    vmul.vx v8, v8, a14096; CHECK-NEXT:    vse64.v v8, (a0)4097; CHECK-NEXT:    addi a0, a0, 324098; CHECK-NEXT:    bne a0, a2, .LBB81_14099; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4100; CHECK-NEXT:    ret4101entry:4102  %broadcast.splatinsert = insertelement <4 x i64> poison, i64 %x, i64 04103  %broadcast.splat = shufflevector <4 x i64> %broadcast.splatinsert, <4 x i64> poison, <4 x i32> zeroinitializer4104  br label %vector.body4105 4106vector.body:                                      ; preds = %vector.body, %entry4107  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4108  %0 = getelementptr inbounds i64, ptr %a, i64 %index4109  %wide.load = load <4 x i64>, ptr %0, align 84110  %1 = mul <4 x i64> %wide.load, %broadcast.splat4111  store <4 x i64> %1, ptr %0, align 84112  %index.next = add nuw i64 %index, 44113  %2 = icmp eq i64 %index.next, 10244114  br i1 %2, label %for.cond.cleanup, label %vector.body4115 4116for.cond.cleanup:                                 ; preds = %vector.body4117  ret void4118}4119 4120define void @sink_splat_add_lmul2(ptr nocapture %a, i64 signext %x) {4121; CHECK-LABEL: sink_splat_add_lmul2:4122; CHECK:       # %bb.0: # %entry4123; CHECK-NEXT:    lui a2, 24124; CHECK-NEXT:    add a2, a0, a24125; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma4126; CHECK-NEXT:  .LBB82_1: # %vector.body4127; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14128; CHECK-NEXT:    vle64.v v8, (a0)4129; CHECK-NEXT:    vadd.vx v8, v8, a14130; CHECK-NEXT:    vse64.v v8, (a0)4131; CHECK-NEXT:    addi a0, a0, 324132; CHECK-NEXT:    bne a0, a2, .LBB82_14133; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4134; CHECK-NEXT:    ret4135entry:4136  %broadcast.splatinsert = insertelement <4 x i64> poison, i64 %x, i64 04137  %broadcast.splat = shufflevector <4 x i64> %broadcast.splatinsert, <4 x i64> poison, <4 x i32> zeroinitializer4138  br label %vector.body4139 4140vector.body:                                      ; preds = %vector.body, %entry4141  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4142  %0 = getelementptr inbounds i64, ptr %a, i64 %index4143  %wide.load = load <4 x i64>, ptr %0, align 84144  %1 = add <4 x i64> %wide.load, %broadcast.splat4145  store <4 x i64> %1, ptr %0, align 84146  %index.next = add nuw i64 %index, 44147  %2 = icmp eq i64 %index.next, 10244148  br i1 %2, label %for.cond.cleanup, label %vector.body4149 4150for.cond.cleanup:                                 ; preds = %vector.body4151  ret void4152}4153 4154define void @sink_splat_sub_lmul2(ptr nocapture %a, i64 signext %x) {4155; CHECK-LABEL: sink_splat_sub_lmul2:4156; CHECK:       # %bb.0: # %entry4157; CHECK-NEXT:    lui a2, 24158; CHECK-NEXT:    add a2, a0, a24159; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma4160; CHECK-NEXT:  .LBB83_1: # %vector.body4161; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14162; CHECK-NEXT:    vle64.v v8, (a0)4163; CHECK-NEXT:    vsub.vx v8, v8, a14164; CHECK-NEXT:    vse64.v v8, (a0)4165; CHECK-NEXT:    addi a0, a0, 324166; CHECK-NEXT:    bne a0, a2, .LBB83_14167; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4168; CHECK-NEXT:    ret4169entry:4170  %broadcast.splatinsert = insertelement <4 x i64> poison, i64 %x, i64 04171  %broadcast.splat = shufflevector <4 x i64> %broadcast.splatinsert, <4 x i64> poison, <4 x i32> zeroinitializer4172  br label %vector.body4173 4174vector.body:                                      ; preds = %vector.body, %entry4175  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4176  %0 = getelementptr inbounds i64, ptr %a, i64 %index4177  %wide.load = load <4 x i64>, ptr %0, align 84178  %1 = sub <4 x i64> %wide.load, %broadcast.splat4179  store <4 x i64> %1, ptr %0, align 84180  %index.next = add nuw i64 %index, 44181  %2 = icmp eq i64 %index.next, 10244182  br i1 %2, label %for.cond.cleanup, label %vector.body4183 4184for.cond.cleanup:                                 ; preds = %vector.body4185  ret void4186}4187 4188define void @sink_splat_rsub_lmul2(ptr nocapture %a, i64 signext %x) {4189; CHECK-LABEL: sink_splat_rsub_lmul2:4190; CHECK:       # %bb.0: # %entry4191; CHECK-NEXT:    lui a2, 24192; CHECK-NEXT:    add a2, a0, a24193; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma4194; CHECK-NEXT:  .LBB84_1: # %vector.body4195; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14196; CHECK-NEXT:    vle64.v v8, (a0)4197; CHECK-NEXT:    vrsub.vx v8, v8, a14198; CHECK-NEXT:    vse64.v v8, (a0)4199; CHECK-NEXT:    addi a0, a0, 324200; CHECK-NEXT:    bne a0, a2, .LBB84_14201; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4202; CHECK-NEXT:    ret4203entry:4204  %broadcast.splatinsert = insertelement <4 x i64> poison, i64 %x, i64 04205  %broadcast.splat = shufflevector <4 x i64> %broadcast.splatinsert, <4 x i64> poison, <4 x i32> zeroinitializer4206  br label %vector.body4207 4208vector.body:                                      ; preds = %vector.body, %entry4209  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4210  %0 = getelementptr inbounds i64, ptr %a, i64 %index4211  %wide.load = load <4 x i64>, ptr %0, align 84212  %1 = sub <4 x i64> %broadcast.splat, %wide.load4213  store <4 x i64> %1, ptr %0, align 84214  %index.next = add nuw i64 %index, 44215  %2 = icmp eq i64 %index.next, 10244216  br i1 %2, label %for.cond.cleanup, label %vector.body4217 4218for.cond.cleanup:                                 ; preds = %vector.body4219  ret void4220}4221 4222define void @sink_splat_and_lmul2(ptr nocapture %a, i64 signext %x) {4223; CHECK-LABEL: sink_splat_and_lmul2:4224; CHECK:       # %bb.0: # %entry4225; CHECK-NEXT:    lui a2, 24226; CHECK-NEXT:    add a2, a0, a24227; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma4228; CHECK-NEXT:  .LBB85_1: # %vector.body4229; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14230; CHECK-NEXT:    vle64.v v8, (a0)4231; CHECK-NEXT:    vand.vx v8, v8, a14232; CHECK-NEXT:    vse64.v v8, (a0)4233; CHECK-NEXT:    addi a0, a0, 324234; CHECK-NEXT:    bne a0, a2, .LBB85_14235; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4236; CHECK-NEXT:    ret4237entry:4238  %broadcast.splatinsert = insertelement <4 x i64> poison, i64 %x, i64 04239  %broadcast.splat = shufflevector <4 x i64> %broadcast.splatinsert, <4 x i64> poison, <4 x i32> zeroinitializer4240  br label %vector.body4241 4242vector.body:                                      ; preds = %vector.body, %entry4243  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4244  %0 = getelementptr inbounds i64, ptr %a, i64 %index4245  %wide.load = load <4 x i64>, ptr %0, align 84246  %1 = and <4 x i64> %wide.load, %broadcast.splat4247  store <4 x i64> %1, ptr %0, align 84248  %index.next = add nuw i64 %index, 44249  %2 = icmp eq i64 %index.next, 10244250  br i1 %2, label %for.cond.cleanup, label %vector.body4251 4252for.cond.cleanup:                                 ; preds = %vector.body4253  ret void4254}4255 4256define void @sink_splat_or_lmul2(ptr nocapture %a, i64 signext %x) {4257; CHECK-LABEL: sink_splat_or_lmul2:4258; CHECK:       # %bb.0: # %entry4259; CHECK-NEXT:    lui a2, 24260; CHECK-NEXT:    add a2, a0, a24261; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma4262; CHECK-NEXT:  .LBB86_1: # %vector.body4263; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14264; CHECK-NEXT:    vle64.v v8, (a0)4265; CHECK-NEXT:    vor.vx v8, v8, a14266; CHECK-NEXT:    vse64.v v8, (a0)4267; CHECK-NEXT:    addi a0, a0, 324268; CHECK-NEXT:    bne a0, a2, .LBB86_14269; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4270; CHECK-NEXT:    ret4271entry:4272  %broadcast.splatinsert = insertelement <4 x i64> poison, i64 %x, i64 04273  %broadcast.splat = shufflevector <4 x i64> %broadcast.splatinsert, <4 x i64> poison, <4 x i32> zeroinitializer4274  br label %vector.body4275 4276vector.body:                                      ; preds = %vector.body, %entry4277  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4278  %0 = getelementptr inbounds i64, ptr %a, i64 %index4279  %wide.load = load <4 x i64>, ptr %0, align 84280  %1 = or <4 x i64> %wide.load, %broadcast.splat4281  store <4 x i64> %1, ptr %0, align 84282  %index.next = add nuw i64 %index, 44283  %2 = icmp eq i64 %index.next, 10244284  br i1 %2, label %for.cond.cleanup, label %vector.body4285 4286for.cond.cleanup:                                 ; preds = %vector.body4287  ret void4288}4289 4290define void @sink_splat_xor_lmul2(ptr nocapture %a, i64 signext %x) {4291; CHECK-LABEL: sink_splat_xor_lmul2:4292; CHECK:       # %bb.0: # %entry4293; CHECK-NEXT:    lui a2, 24294; CHECK-NEXT:    add a2, a0, a24295; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma4296; CHECK-NEXT:  .LBB87_1: # %vector.body4297; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14298; CHECK-NEXT:    vle64.v v8, (a0)4299; CHECK-NEXT:    vxor.vx v8, v8, a14300; CHECK-NEXT:    vse64.v v8, (a0)4301; CHECK-NEXT:    addi a0, a0, 324302; CHECK-NEXT:    bne a0, a2, .LBB87_14303; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4304; CHECK-NEXT:    ret4305entry:4306  %broadcast.splatinsert = insertelement <4 x i64> poison, i64 %x, i64 04307  %broadcast.splat = shufflevector <4 x i64> %broadcast.splatinsert, <4 x i64> poison, <4 x i32> zeroinitializer4308  br label %vector.body4309 4310vector.body:                                      ; preds = %vector.body, %entry4311  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4312  %0 = getelementptr inbounds i64, ptr %a, i64 %index4313  %wide.load = load <4 x i64>, ptr %0, align 84314  %1 = xor <4 x i64> %wide.load, %broadcast.splat4315  store <4 x i64> %1, ptr %0, align 84316  %index.next = add nuw i64 %index, 44317  %2 = icmp eq i64 %index.next, 10244318  br i1 %2, label %for.cond.cleanup, label %vector.body4319 4320for.cond.cleanup:                                 ; preds = %vector.body4321  ret void4322}4323 4324define void @sink_splat_mul_lmul8(ptr nocapture %a, i32 signext %x) {4325; CHECK-LABEL: sink_splat_mul_lmul8:4326; CHECK:       # %bb.0: # %entry4327; CHECK-NEXT:    lui a2, 14328; CHECK-NEXT:    add a2, a0, a24329; CHECK-NEXT:    li a3, 324330; CHECK-NEXT:    vsetvli zero, a3, e32, m8, ta, ma4331; CHECK-NEXT:  .LBB88_1: # %vector.body4332; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14333; CHECK-NEXT:    vle32.v v8, (a0)4334; CHECK-NEXT:    vmul.vx v8, v8, a14335; CHECK-NEXT:    vse32.v v8, (a0)4336; CHECK-NEXT:    addi a0, a0, 164337; CHECK-NEXT:    bne a0, a2, .LBB88_14338; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4339; CHECK-NEXT:    ret4340entry:4341  %broadcast.splatinsert = insertelement <32 x i32> poison, i32 %x, i32 04342  %broadcast.splat = shufflevector <32 x i32> %broadcast.splatinsert, <32 x i32> poison, <32 x i32> zeroinitializer4343  br label %vector.body4344 4345vector.body:                                      ; preds = %vector.body, %entry4346  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4347  %0 = getelementptr inbounds i32, ptr %a, i64 %index4348  %wide.load = load <32 x i32>, ptr %0, align 44349  %1 = mul <32 x i32> %wide.load, %broadcast.splat4350  store <32 x i32> %1, ptr %0, align 44351  %index.next = add nuw i64 %index, 44352  %2 = icmp eq i64 %index.next, 10244353  br i1 %2, label %for.cond.cleanup, label %vector.body4354 4355for.cond.cleanup:                                 ; preds = %vector.body4356  ret void4357}4358 4359define void @sink_splat_add_lmul8(ptr nocapture %a, i32 signext %x) {4360; CHECK-LABEL: sink_splat_add_lmul8:4361; CHECK:       # %bb.0: # %entry4362; CHECK-NEXT:    lui a2, 14363; CHECK-NEXT:    add a2, a0, a24364; CHECK-NEXT:    li a3, 324365; CHECK-NEXT:    vsetvli zero, a3, e32, m8, ta, ma4366; CHECK-NEXT:  .LBB89_1: # %vector.body4367; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14368; CHECK-NEXT:    vle32.v v8, (a0)4369; CHECK-NEXT:    vadd.vx v8, v8, a14370; CHECK-NEXT:    vse32.v v8, (a0)4371; CHECK-NEXT:    addi a0, a0, 164372; CHECK-NEXT:    bne a0, a2, .LBB89_14373; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4374; CHECK-NEXT:    ret4375entry:4376  %broadcast.splatinsert = insertelement <32 x i32> poison, i32 %x, i32 04377  %broadcast.splat = shufflevector <32 x i32> %broadcast.splatinsert, <32 x i32> poison, <32 x i32> zeroinitializer4378  br label %vector.body4379 4380vector.body:                                      ; preds = %vector.body, %entry4381  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4382  %0 = getelementptr inbounds i32, ptr %a, i64 %index4383  %wide.load = load <32 x i32>, ptr %0, align 44384  %1 = add <32 x i32> %wide.load, %broadcast.splat4385  store <32 x i32> %1, ptr %0, align 44386  %index.next = add nuw i64 %index, 44387  %2 = icmp eq i64 %index.next, 10244388  br i1 %2, label %for.cond.cleanup, label %vector.body4389 4390for.cond.cleanup:                                 ; preds = %vector.body4391  ret void4392}4393 4394define void @sink_splat_sub_lmul8(ptr nocapture %a, i32 signext %x) {4395; CHECK-LABEL: sink_splat_sub_lmul8:4396; CHECK:       # %bb.0: # %entry4397; CHECK-NEXT:    lui a2, 14398; CHECK-NEXT:    add a2, a0, a24399; CHECK-NEXT:    li a3, 324400; CHECK-NEXT:    vsetvli zero, a3, e32, m8, ta, ma4401; CHECK-NEXT:  .LBB90_1: # %vector.body4402; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14403; CHECK-NEXT:    vle32.v v8, (a0)4404; CHECK-NEXT:    vsub.vx v8, v8, a14405; CHECK-NEXT:    vse32.v v8, (a0)4406; CHECK-NEXT:    addi a0, a0, 164407; CHECK-NEXT:    bne a0, a2, .LBB90_14408; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4409; CHECK-NEXT:    ret4410entry:4411  %broadcast.splatinsert = insertelement <32 x i32> poison, i32 %x, i32 04412  %broadcast.splat = shufflevector <32 x i32> %broadcast.splatinsert, <32 x i32> poison, <32 x i32> zeroinitializer4413  br label %vector.body4414 4415vector.body:                                      ; preds = %vector.body, %entry4416  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4417  %0 = getelementptr inbounds i32, ptr %a, i64 %index4418  %wide.load = load <32 x i32>, ptr %0, align 44419  %1 = sub <32 x i32> %wide.load, %broadcast.splat4420  store <32 x i32> %1, ptr %0, align 44421  %index.next = add nuw i64 %index, 44422  %2 = icmp eq i64 %index.next, 10244423  br i1 %2, label %for.cond.cleanup, label %vector.body4424 4425for.cond.cleanup:                                 ; preds = %vector.body4426  ret void4427}4428 4429define void @sink_splat_rsub_lmul8(ptr nocapture %a, i32 signext %x) {4430; CHECK-LABEL: sink_splat_rsub_lmul8:4431; CHECK:       # %bb.0: # %entry4432; CHECK-NEXT:    lui a2, 14433; CHECK-NEXT:    add a2, a0, a24434; CHECK-NEXT:    li a3, 324435; CHECK-NEXT:    vsetvli zero, a3, e32, m8, ta, ma4436; CHECK-NEXT:  .LBB91_1: # %vector.body4437; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14438; CHECK-NEXT:    vle32.v v8, (a0)4439; CHECK-NEXT:    vrsub.vx v8, v8, a14440; CHECK-NEXT:    vse32.v v8, (a0)4441; CHECK-NEXT:    addi a0, a0, 164442; CHECK-NEXT:    bne a0, a2, .LBB91_14443; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4444; CHECK-NEXT:    ret4445entry:4446  %broadcast.splatinsert = insertelement <32 x i32> poison, i32 %x, i32 04447  %broadcast.splat = shufflevector <32 x i32> %broadcast.splatinsert, <32 x i32> poison, <32 x i32> zeroinitializer4448  br label %vector.body4449 4450vector.body:                                      ; preds = %vector.body, %entry4451  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4452  %0 = getelementptr inbounds i32, ptr %a, i64 %index4453  %wide.load = load <32 x i32>, ptr %0, align 44454  %1 = sub <32 x i32> %broadcast.splat, %wide.load4455  store <32 x i32> %1, ptr %0, align 44456  %index.next = add nuw i64 %index, 44457  %2 = icmp eq i64 %index.next, 10244458  br i1 %2, label %for.cond.cleanup, label %vector.body4459 4460for.cond.cleanup:                                 ; preds = %vector.body4461  ret void4462}4463 4464define void @sink_splat_and_lmul8(ptr nocapture %a, i32 signext %x) {4465; CHECK-LABEL: sink_splat_and_lmul8:4466; CHECK:       # %bb.0: # %entry4467; CHECK-NEXT:    lui a2, 14468; CHECK-NEXT:    add a2, a0, a24469; CHECK-NEXT:    li a3, 324470; CHECK-NEXT:    vsetvli zero, a3, e32, m8, ta, ma4471; CHECK-NEXT:  .LBB92_1: # %vector.body4472; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14473; CHECK-NEXT:    vle32.v v8, (a0)4474; CHECK-NEXT:    vand.vx v8, v8, a14475; CHECK-NEXT:    vse32.v v8, (a0)4476; CHECK-NEXT:    addi a0, a0, 164477; CHECK-NEXT:    bne a0, a2, .LBB92_14478; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4479; CHECK-NEXT:    ret4480entry:4481  %broadcast.splatinsert = insertelement <32 x i32> poison, i32 %x, i32 04482  %broadcast.splat = shufflevector <32 x i32> %broadcast.splatinsert, <32 x i32> poison, <32 x i32> zeroinitializer4483  br label %vector.body4484 4485vector.body:                                      ; preds = %vector.body, %entry4486  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4487  %0 = getelementptr inbounds i32, ptr %a, i64 %index4488  %wide.load = load <32 x i32>, ptr %0, align 44489  %1 = and <32 x i32> %wide.load, %broadcast.splat4490  store <32 x i32> %1, ptr %0, align 44491  %index.next = add nuw i64 %index, 44492  %2 = icmp eq i64 %index.next, 10244493  br i1 %2, label %for.cond.cleanup, label %vector.body4494 4495for.cond.cleanup:                                 ; preds = %vector.body4496  ret void4497}4498 4499define void @sink_splat_or_lmul8(ptr nocapture %a, i32 signext %x) {4500; CHECK-LABEL: sink_splat_or_lmul8:4501; CHECK:       # %bb.0: # %entry4502; CHECK-NEXT:    lui a2, 14503; CHECK-NEXT:    add a2, a0, a24504; CHECK-NEXT:    li a3, 324505; CHECK-NEXT:    vsetvli zero, a3, e32, m8, ta, ma4506; CHECK-NEXT:  .LBB93_1: # %vector.body4507; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14508; CHECK-NEXT:    vle32.v v8, (a0)4509; CHECK-NEXT:    vor.vx v8, v8, a14510; CHECK-NEXT:    vse32.v v8, (a0)4511; CHECK-NEXT:    addi a0, a0, 164512; CHECK-NEXT:    bne a0, a2, .LBB93_14513; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4514; CHECK-NEXT:    ret4515entry:4516  %broadcast.splatinsert = insertelement <32 x i32> poison, i32 %x, i32 04517  %broadcast.splat = shufflevector <32 x i32> %broadcast.splatinsert, <32 x i32> poison, <32 x i32> zeroinitializer4518  br label %vector.body4519 4520vector.body:                                      ; preds = %vector.body, %entry4521  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4522  %0 = getelementptr inbounds i32, ptr %a, i64 %index4523  %wide.load = load <32 x i32>, ptr %0, align 44524  %1 = or <32 x i32> %wide.load, %broadcast.splat4525  store <32 x i32> %1, ptr %0, align 44526  %index.next = add nuw i64 %index, 44527  %2 = icmp eq i64 %index.next, 10244528  br i1 %2, label %for.cond.cleanup, label %vector.body4529 4530for.cond.cleanup:                                 ; preds = %vector.body4531  ret void4532}4533 4534define void @sink_splat_xor_lmul8(ptr nocapture %a, i32 signext %x) {4535; CHECK-LABEL: sink_splat_xor_lmul8:4536; CHECK:       # %bb.0: # %entry4537; CHECK-NEXT:    lui a2, 14538; CHECK-NEXT:    add a2, a0, a24539; CHECK-NEXT:    li a3, 324540; CHECK-NEXT:    vsetvli zero, a3, e32, m8, ta, ma4541; CHECK-NEXT:  .LBB94_1: # %vector.body4542; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14543; CHECK-NEXT:    vle32.v v8, (a0)4544; CHECK-NEXT:    vxor.vx v8, v8, a14545; CHECK-NEXT:    vse32.v v8, (a0)4546; CHECK-NEXT:    addi a0, a0, 164547; CHECK-NEXT:    bne a0, a2, .LBB94_14548; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4549; CHECK-NEXT:    ret4550entry:4551  %broadcast.splatinsert = insertelement <32 x i32> poison, i32 %x, i32 04552  %broadcast.splat = shufflevector <32 x i32> %broadcast.splatinsert, <32 x i32> poison, <32 x i32> zeroinitializer4553  br label %vector.body4554 4555vector.body:                                      ; preds = %vector.body, %entry4556  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4557  %0 = getelementptr inbounds i32, ptr %a, i64 %index4558  %wide.load = load <32 x i32>, ptr %0, align 44559  %1 = xor <32 x i32> %wide.load, %broadcast.splat4560  store <32 x i32> %1, ptr %0, align 44561  %index.next = add nuw i64 %index, 44562  %2 = icmp eq i64 %index.next, 10244563  br i1 %2, label %for.cond.cleanup, label %vector.body4564 4565for.cond.cleanup:                                 ; preds = %vector.body4566  ret void4567}4568 4569define void @sink_splat_mul_lmulmf2(ptr nocapture %a, i32 signext %x) {4570; CHECK-LABEL: sink_splat_mul_lmulmf2:4571; CHECK:       # %bb.0: # %entry4572; CHECK-NEXT:    lui a2, 24573; CHECK-NEXT:    add a2, a0, a24574; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma4575; CHECK-NEXT:  .LBB95_1: # %vector.body4576; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14577; CHECK-NEXT:    vle32.v v8, (a0)4578; CHECK-NEXT:    vmul.vx v8, v8, a14579; CHECK-NEXT:    vse32.v v8, (a0)4580; CHECK-NEXT:    addi a0, a0, 324581; CHECK-NEXT:    bne a0, a2, .LBB95_14582; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4583; CHECK-NEXT:    ret4584entry:4585  %broadcast.splatinsert = insertelement <2 x i32> poison, i32 %x, i64 04586  %broadcast.splat = shufflevector <2 x i32> %broadcast.splatinsert, <2 x i32> poison, <2 x i32> zeroinitializer4587  br label %vector.body4588 4589vector.body:                                      ; preds = %vector.body, %entry4590  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4591  %0 = getelementptr inbounds i64, ptr %a, i64 %index4592  %wide.load = load <2 x i32>, ptr %0, align 84593  %1 = mul <2 x i32> %wide.load, %broadcast.splat4594  store <2 x i32> %1, ptr %0, align 84595  %index.next = add nuw i64 %index, 44596  %2 = icmp eq i64 %index.next, 10244597  br i1 %2, label %for.cond.cleanup, label %vector.body4598 4599for.cond.cleanup:                                 ; preds = %vector.body4600  ret void4601}4602 4603define void @sink_splat_add_lmulmf2(ptr nocapture %a, i32 signext %x) {4604; CHECK-LABEL: sink_splat_add_lmulmf2:4605; CHECK:       # %bb.0: # %entry4606; CHECK-NEXT:    lui a2, 24607; CHECK-NEXT:    add a2, a0, a24608; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma4609; CHECK-NEXT:  .LBB96_1: # %vector.body4610; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14611; CHECK-NEXT:    vle32.v v8, (a0)4612; CHECK-NEXT:    vadd.vx v8, v8, a14613; CHECK-NEXT:    vse32.v v8, (a0)4614; CHECK-NEXT:    addi a0, a0, 324615; CHECK-NEXT:    bne a0, a2, .LBB96_14616; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4617; CHECK-NEXT:    ret4618entry:4619  %broadcast.splatinsert = insertelement <2 x i32> poison, i32 %x, i64 04620  %broadcast.splat = shufflevector <2 x i32> %broadcast.splatinsert, <2 x i32> poison, <2 x i32> zeroinitializer4621  br label %vector.body4622 4623vector.body:                                      ; preds = %vector.body, %entry4624  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4625  %0 = getelementptr inbounds i64, ptr %a, i64 %index4626  %wide.load = load <2 x i32>, ptr %0, align 84627  %1 = add <2 x i32> %wide.load, %broadcast.splat4628  store <2 x i32> %1, ptr %0, align 84629  %index.next = add nuw i64 %index, 44630  %2 = icmp eq i64 %index.next, 10244631  br i1 %2, label %for.cond.cleanup, label %vector.body4632 4633for.cond.cleanup:                                 ; preds = %vector.body4634  ret void4635}4636 4637define void @sink_splat_sub_lmulmf2(ptr nocapture %a, i32 signext %x) {4638; CHECK-LABEL: sink_splat_sub_lmulmf2:4639; CHECK:       # %bb.0: # %entry4640; CHECK-NEXT:    lui a2, 24641; CHECK-NEXT:    add a2, a0, a24642; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma4643; CHECK-NEXT:  .LBB97_1: # %vector.body4644; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14645; CHECK-NEXT:    vle32.v v8, (a0)4646; CHECK-NEXT:    vsub.vx v8, v8, a14647; CHECK-NEXT:    vse32.v v8, (a0)4648; CHECK-NEXT:    addi a0, a0, 324649; CHECK-NEXT:    bne a0, a2, .LBB97_14650; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4651; CHECK-NEXT:    ret4652entry:4653  %broadcast.splatinsert = insertelement <2 x i32> poison, i32 %x, i64 04654  %broadcast.splat = shufflevector <2 x i32> %broadcast.splatinsert, <2 x i32> poison, <2 x i32> zeroinitializer4655  br label %vector.body4656 4657vector.body:                                      ; preds = %vector.body, %entry4658  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4659  %0 = getelementptr inbounds i64, ptr %a, i64 %index4660  %wide.load = load <2 x i32>, ptr %0, align 84661  %1 = sub <2 x i32> %wide.load, %broadcast.splat4662  store <2 x i32> %1, ptr %0, align 84663  %index.next = add nuw i64 %index, 44664  %2 = icmp eq i64 %index.next, 10244665  br i1 %2, label %for.cond.cleanup, label %vector.body4666 4667for.cond.cleanup:                                 ; preds = %vector.body4668  ret void4669}4670 4671define void @sink_splat_rsub_lmulmf2(ptr nocapture %a, i32 signext %x) {4672; CHECK-LABEL: sink_splat_rsub_lmulmf2:4673; CHECK:       # %bb.0: # %entry4674; CHECK-NEXT:    lui a2, 24675; CHECK-NEXT:    add a2, a0, a24676; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma4677; CHECK-NEXT:  .LBB98_1: # %vector.body4678; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14679; CHECK-NEXT:    vle32.v v8, (a0)4680; CHECK-NEXT:    vrsub.vx v8, v8, a14681; CHECK-NEXT:    vse32.v v8, (a0)4682; CHECK-NEXT:    addi a0, a0, 324683; CHECK-NEXT:    bne a0, a2, .LBB98_14684; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4685; CHECK-NEXT:    ret4686entry:4687  %broadcast.splatinsert = insertelement <2 x i32> poison, i32 %x, i64 04688  %broadcast.splat = shufflevector <2 x i32> %broadcast.splatinsert, <2 x i32> poison, <2 x i32> zeroinitializer4689  br label %vector.body4690 4691vector.body:                                      ; preds = %vector.body, %entry4692  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4693  %0 = getelementptr inbounds i64, ptr %a, i64 %index4694  %wide.load = load <2 x i32>, ptr %0, align 84695  %1 = sub <2 x i32> %broadcast.splat, %wide.load4696  store <2 x i32> %1, ptr %0, align 84697  %index.next = add nuw i64 %index, 44698  %2 = icmp eq i64 %index.next, 10244699  br i1 %2, label %for.cond.cleanup, label %vector.body4700 4701for.cond.cleanup:                                 ; preds = %vector.body4702  ret void4703}4704 4705define void @sink_splat_and_lmulmf2(ptr nocapture %a, i32 signext %x) {4706; CHECK-LABEL: sink_splat_and_lmulmf2:4707; CHECK:       # %bb.0: # %entry4708; CHECK-NEXT:    lui a2, 24709; CHECK-NEXT:    add a2, a0, a24710; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma4711; CHECK-NEXT:  .LBB99_1: # %vector.body4712; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14713; CHECK-NEXT:    vle32.v v8, (a0)4714; CHECK-NEXT:    vand.vx v8, v8, a14715; CHECK-NEXT:    vse32.v v8, (a0)4716; CHECK-NEXT:    addi a0, a0, 324717; CHECK-NEXT:    bne a0, a2, .LBB99_14718; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4719; CHECK-NEXT:    ret4720entry:4721  %broadcast.splatinsert = insertelement <2 x i32> poison, i32 %x, i64 04722  %broadcast.splat = shufflevector <2 x i32> %broadcast.splatinsert, <2 x i32> poison, <2 x i32> zeroinitializer4723  br label %vector.body4724 4725vector.body:                                      ; preds = %vector.body, %entry4726  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4727  %0 = getelementptr inbounds i64, ptr %a, i64 %index4728  %wide.load = load <2 x i32>, ptr %0, align 84729  %1 = and <2 x i32> %wide.load, %broadcast.splat4730  store <2 x i32> %1, ptr %0, align 84731  %index.next = add nuw i64 %index, 44732  %2 = icmp eq i64 %index.next, 10244733  br i1 %2, label %for.cond.cleanup, label %vector.body4734 4735for.cond.cleanup:                                 ; preds = %vector.body4736  ret void4737}4738 4739define void @sink_splat_or_lmulmf2(ptr nocapture %a, i32 signext %x) {4740; CHECK-LABEL: sink_splat_or_lmulmf2:4741; CHECK:       # %bb.0: # %entry4742; CHECK-NEXT:    lui a2, 24743; CHECK-NEXT:    add a2, a0, a24744; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma4745; CHECK-NEXT:  .LBB100_1: # %vector.body4746; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14747; CHECK-NEXT:    vle32.v v8, (a0)4748; CHECK-NEXT:    vor.vx v8, v8, a14749; CHECK-NEXT:    vse32.v v8, (a0)4750; CHECK-NEXT:    addi a0, a0, 324751; CHECK-NEXT:    bne a0, a2, .LBB100_14752; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4753; CHECK-NEXT:    ret4754entry:4755  %broadcast.splatinsert = insertelement <2 x i32> poison, i32 %x, i64 04756  %broadcast.splat = shufflevector <2 x i32> %broadcast.splatinsert, <2 x i32> poison, <2 x i32> zeroinitializer4757  br label %vector.body4758 4759vector.body:                                      ; preds = %vector.body, %entry4760  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4761  %0 = getelementptr inbounds i64, ptr %a, i64 %index4762  %wide.load = load <2 x i32>, ptr %0, align 84763  %1 = or <2 x i32> %wide.load, %broadcast.splat4764  store <2 x i32> %1, ptr %0, align 84765  %index.next = add nuw i64 %index, 44766  %2 = icmp eq i64 %index.next, 10244767  br i1 %2, label %for.cond.cleanup, label %vector.body4768 4769for.cond.cleanup:                                 ; preds = %vector.body4770  ret void4771}4772 4773define void @sink_splat_xor_lmulmf2(ptr nocapture %a, i32 signext %x) {4774; CHECK-LABEL: sink_splat_xor_lmulmf2:4775; CHECK:       # %bb.0: # %entry4776; CHECK-NEXT:    lui a2, 24777; CHECK-NEXT:    add a2, a0, a24778; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma4779; CHECK-NEXT:  .LBB101_1: # %vector.body4780; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14781; CHECK-NEXT:    vle32.v v8, (a0)4782; CHECK-NEXT:    vxor.vx v8, v8, a14783; CHECK-NEXT:    vse32.v v8, (a0)4784; CHECK-NEXT:    addi a0, a0, 324785; CHECK-NEXT:    bne a0, a2, .LBB101_14786; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4787; CHECK-NEXT:    ret4788entry:4789  %broadcast.splatinsert = insertelement <2 x i32> poison, i32 %x, i64 04790  %broadcast.splat = shufflevector <2 x i32> %broadcast.splatinsert, <2 x i32> poison, <2 x i32> zeroinitializer4791  br label %vector.body4792 4793vector.body:                                      ; preds = %vector.body, %entry4794  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4795  %0 = getelementptr inbounds i64, ptr %a, i64 %index4796  %wide.load = load <2 x i32>, ptr %0, align 84797  %1 = xor <2 x i32> %wide.load, %broadcast.splat4798  store <2 x i32> %1, ptr %0, align 84799  %index.next = add nuw i64 %index, 44800  %2 = icmp eq i64 %index.next, 10244801  br i1 %2, label %for.cond.cleanup, label %vector.body4802 4803for.cond.cleanup:                                 ; preds = %vector.body4804  ret void4805}4806 4807define void @sink_splat_vp_icmp(ptr nocapture %x, i32 signext %y, <4 x i1> %m, i32 zeroext %vl) {4808; CHECK-LABEL: sink_splat_vp_icmp:4809; CHECK:       # %bb.0: # %entry4810; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4811; CHECK-NEXT:    vmv1r.v v8, v04812; CHECK-NEXT:    lui a3, 14813; CHECK-NEXT:    add a3, a0, a34814; CHECK-NEXT:    vmv.v.i v9, 04815; CHECK-NEXT:  .LBB102_1: # %vector.body4816; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14817; CHECK-NEXT:    vle32.v v10, (a0)4818; CHECK-NEXT:    vmv1r.v v0, v84819; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma4820; CHECK-NEXT:    vmseq.vx v0, v10, a1, v0.t4821; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4822; CHECK-NEXT:    vse32.v v9, (a0), v0.t4823; CHECK-NEXT:    addi a0, a0, 164824; CHECK-NEXT:    bne a0, a3, .LBB102_14825; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4826; CHECK-NEXT:    ret4827entry:4828  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %y, i32 04829  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer4830  br label %vector.body4831 4832vector.body:                                      ; preds = %vector.body, %entry4833  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4834  %0 = getelementptr inbounds i32, ptr %x, i64 %index4835  %wide.load = load <4 x i32>, ptr %0, align 44836  %1 = call <4 x i1> @llvm.vp.icmp.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, metadata !"eq", <4 x i1> %m, i32 %vl)4837  call void @llvm.masked.store.v4i32.p0(<4 x i32> zeroinitializer, ptr %0, i32 4, <4 x i1> %1)4838  %index.next = add nuw i64 %index, 44839  %2 = icmp eq i64 %index.next, 10244840  br i1 %2, label %for.cond.cleanup, label %vector.body4841 4842for.cond.cleanup:                                 ; preds = %vector.body4843  ret void4844}4845 4846define void @sink_splat_vp_fcmp(ptr nocapture %x, float %y, <4 x i1> %m, i32 zeroext %vl) {4847; CHECK-LABEL: sink_splat_vp_fcmp:4848; CHECK:       # %bb.0: # %entry4849; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4850; CHECK-NEXT:    vmv1r.v v8, v04851; CHECK-NEXT:    lui a2, 14852; CHECK-NEXT:    add a2, a0, a24853; CHECK-NEXT:    vmv.v.i v9, 04854; CHECK-NEXT:  .LBB103_1: # %vector.body4855; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14856; CHECK-NEXT:    vle32.v v10, (a0)4857; CHECK-NEXT:    vmv1r.v v0, v84858; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma4859; CHECK-NEXT:    vmfeq.vf v0, v10, fa0, v0.t4860; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4861; CHECK-NEXT:    vse32.v v9, (a0), v0.t4862; CHECK-NEXT:    addi a0, a0, 164863; CHECK-NEXT:    bne a0, a2, .LBB103_14864; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4865; CHECK-NEXT:    ret4866entry:4867  %broadcast.splatinsert = insertelement <4 x float> poison, float %y, i32 04868  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer4869  br label %vector.body4870 4871vector.body:                                      ; preds = %vector.body, %entry4872  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4873  %0 = getelementptr inbounds float, ptr %x, i64 %index4874  %wide.load = load <4 x float>, ptr %0, align 44875  %1 = call <4 x i1> @llvm.vp.fcmp.v4f32(<4 x float> %wide.load, <4 x float> %broadcast.splat, metadata !"oeq", <4 x i1> %m, i32 %vl)4876  call void @llvm.masked.store.v4f32.p0(<4 x float> zeroinitializer, ptr %0, i32 4, <4 x i1> %1)4877  %index.next = add nuw i64 %index, 44878  %2 = icmp eq i64 %index.next, 10244879  br i1 %2, label %for.cond.cleanup, label %vector.body4880 4881for.cond.cleanup:                                 ; preds = %vector.body4882  ret void4883}4884 4885define void @sink_splat_vp_min(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {4886; CHECK-LABEL: sink_splat_vp_min:4887; CHECK:       # %bb.0: # %entry4888; CHECK-NEXT:    lui a3, 14889; CHECK-NEXT:    add a3, a0, a34890; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4891; CHECK-NEXT:  .LBB104_1: # %vector.body4892; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14893; CHECK-NEXT:    vle32.v v8, (a0)4894; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma4895; CHECK-NEXT:    vmin.vx v8, v8, a1, v0.t4896; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4897; CHECK-NEXT:    vse32.v v8, (a0)4898; CHECK-NEXT:    addi a0, a0, 164899; CHECK-NEXT:    bne a0, a3, .LBB104_14900; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4901; CHECK-NEXT:    ret4902entry:4903  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 04904  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer4905  br label %vector.body4906 4907vector.body:                                      ; preds = %vector.body, %entry4908  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4909  %0 = getelementptr inbounds i32, ptr %a, i64 %index4910  %wide.load = load <4 x i32>, ptr %0, align 44911  %1 = call <4 x i32> @llvm.vp.smin.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)4912  store <4 x i32> %1, ptr %0, align 44913  %index.next = add nuw i64 %index, 44914  %2 = icmp eq i64 %index.next, 10244915  br i1 %2, label %for.cond.cleanup, label %vector.body4916 4917for.cond.cleanup:                                 ; preds = %vector.body4918  ret void4919}4920 4921define void @sink_splat_vp_min_commute(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {4922; CHECK-LABEL: sink_splat_vp_min_commute:4923; CHECK:       # %bb.0: # %entry4924; CHECK-NEXT:    lui a3, 14925; CHECK-NEXT:    add a3, a0, a34926; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4927; CHECK-NEXT:  .LBB105_1: # %vector.body4928; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14929; CHECK-NEXT:    vle32.v v8, (a0)4930; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma4931; CHECK-NEXT:    vmin.vx v8, v8, a1, v0.t4932; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4933; CHECK-NEXT:    vse32.v v8, (a0)4934; CHECK-NEXT:    addi a0, a0, 164935; CHECK-NEXT:    bne a0, a3, .LBB105_14936; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4937; CHECK-NEXT:    ret4938entry:4939  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 04940  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer4941  br label %vector.body4942 4943vector.body:                                      ; preds = %vector.body, %entry4944  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4945  %0 = getelementptr inbounds i32, ptr %a, i64 %index4946  %wide.load = load <4 x i32>, ptr %0, align 44947  %1 = call <4 x i32> @llvm.vp.smin.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load, <4 x i1> %m, i32 %vl)4948  store <4 x i32> %1, ptr %0, align 44949  %index.next = add nuw i64 %index, 44950  %2 = icmp eq i64 %index.next, 10244951  br i1 %2, label %for.cond.cleanup, label %vector.body4952 4953for.cond.cleanup:                                 ; preds = %vector.body4954  ret void4955}4956 4957define void @sink_splat_vp_max(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {4958; CHECK-LABEL: sink_splat_vp_max:4959; CHECK:       # %bb.0: # %entry4960; CHECK-NEXT:    lui a3, 14961; CHECK-NEXT:    add a3, a0, a34962; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4963; CHECK-NEXT:  .LBB106_1: # %vector.body4964; CHECK-NEXT:    # =>This Inner Loop Header: Depth=14965; CHECK-NEXT:    vle32.v v8, (a0)4966; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma4967; CHECK-NEXT:    vmax.vx v8, v8, a1, v0.t4968; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4969; CHECK-NEXT:    vse32.v v8, (a0)4970; CHECK-NEXT:    addi a0, a0, 164971; CHECK-NEXT:    bne a0, a3, .LBB106_14972; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup4973; CHECK-NEXT:    ret4974entry:4975  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 04976  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer4977  br label %vector.body4978 4979vector.body:                                      ; preds = %vector.body, %entry4980  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]4981  %0 = getelementptr inbounds i32, ptr %a, i64 %index4982  %wide.load = load <4 x i32>, ptr %0, align 44983  %1 = call <4 x i32> @llvm.vp.smax.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)4984  store <4 x i32> %1, ptr %0, align 44985  %index.next = add nuw i64 %index, 44986  %2 = icmp eq i64 %index.next, 10244987  br i1 %2, label %for.cond.cleanup, label %vector.body4988 4989for.cond.cleanup:                                 ; preds = %vector.body4990  ret void4991}4992 4993define void @sink_splat_vp_max_commute(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {4994; CHECK-LABEL: sink_splat_vp_max_commute:4995; CHECK:       # %bb.0: # %entry4996; CHECK-NEXT:    lui a3, 14997; CHECK-NEXT:    add a3, a0, a34998; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma4999; CHECK-NEXT:  .LBB107_1: # %vector.body5000; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15001; CHECK-NEXT:    vle32.v v8, (a0)5002; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma5003; CHECK-NEXT:    vmax.vx v8, v8, a1, v0.t5004; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5005; CHECK-NEXT:    vse32.v v8, (a0)5006; CHECK-NEXT:    addi a0, a0, 165007; CHECK-NEXT:    bne a0, a3, .LBB107_15008; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5009; CHECK-NEXT:    ret5010entry:5011  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05012  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5013  br label %vector.body5014 5015vector.body:                                      ; preds = %vector.body, %entry5016  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5017  %0 = getelementptr inbounds i32, ptr %a, i64 %index5018  %wide.load = load <4 x i32>, ptr %0, align 45019  %1 = call <4 x i32> @llvm.vp.smax.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load, <4 x i1> %m, i32 %vl)5020  store <4 x i32> %1, ptr %0, align 45021  %index.next = add nuw i64 %index, 45022  %2 = icmp eq i64 %index.next, 10245023  br i1 %2, label %for.cond.cleanup, label %vector.body5024 5025for.cond.cleanup:                                 ; preds = %vector.body5026  ret void5027}5028 5029define void @sink_splat_vp_umin_commute(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {5030; CHECK-LABEL: sink_splat_vp_umin_commute:5031; CHECK:       # %bb.0: # %entry5032; CHECK-NEXT:    lui a3, 15033; CHECK-NEXT:    add a3, a0, a35034; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5035; CHECK-NEXT:  .LBB108_1: # %vector.body5036; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15037; CHECK-NEXT:    vle32.v v8, (a0)5038; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma5039; CHECK-NEXT:    vminu.vx v8, v8, a1, v0.t5040; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5041; CHECK-NEXT:    vse32.v v8, (a0)5042; CHECK-NEXT:    addi a0, a0, 165043; CHECK-NEXT:    bne a0, a3, .LBB108_15044; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5045; CHECK-NEXT:    ret5046entry:5047  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05048  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5049  br label %vector.body5050 5051vector.body:                                      ; preds = %vector.body, %entry5052  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5053  %0 = getelementptr inbounds i32, ptr %a, i64 %index5054  %wide.load = load <4 x i32>, ptr %0, align 45055  %1 = call <4 x i32> @llvm.vp.umin.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load, <4 x i1> %m, i32 %vl)5056  store <4 x i32> %1, ptr %0, align 45057  %index.next = add nuw i64 %index, 45058  %2 = icmp eq i64 %index.next, 10245059  br i1 %2, label %for.cond.cleanup, label %vector.body5060 5061for.cond.cleanup:                                 ; preds = %vector.body5062  ret void5063}5064 5065define void @sink_splat_vp_umax(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {5066; CHECK-LABEL: sink_splat_vp_umax:5067; CHECK:       # %bb.0: # %entry5068; CHECK-NEXT:    lui a3, 15069; CHECK-NEXT:    add a3, a0, a35070; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5071; CHECK-NEXT:  .LBB109_1: # %vector.body5072; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15073; CHECK-NEXT:    vle32.v v8, (a0)5074; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma5075; CHECK-NEXT:    vmaxu.vx v8, v8, a1, v0.t5076; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5077; CHECK-NEXT:    vse32.v v8, (a0)5078; CHECK-NEXT:    addi a0, a0, 165079; CHECK-NEXT:    bne a0, a3, .LBB109_15080; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5081; CHECK-NEXT:    ret5082entry:5083  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05084  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5085  br label %vector.body5086 5087vector.body:                                      ; preds = %vector.body, %entry5088  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5089  %0 = getelementptr inbounds i32, ptr %a, i64 %index5090  %wide.load = load <4 x i32>, ptr %0, align 45091  %1 = call <4 x i32> @llvm.vp.umax.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)5092  store <4 x i32> %1, ptr %0, align 45093  %index.next = add nuw i64 %index, 45094  %2 = icmp eq i64 %index.next, 10245095  br i1 %2, label %for.cond.cleanup, label %vector.body5096 5097for.cond.cleanup:                                 ; preds = %vector.body5098  ret void5099}5100 5101define void @sink_splat_vp_umax_commute(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {5102; CHECK-LABEL: sink_splat_vp_umax_commute:5103; CHECK:       # %bb.0: # %entry5104; CHECK-NEXT:    lui a3, 15105; CHECK-NEXT:    add a3, a0, a35106; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5107; CHECK-NEXT:  .LBB110_1: # %vector.body5108; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15109; CHECK-NEXT:    vle32.v v8, (a0)5110; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma5111; CHECK-NEXT:    vmaxu.vx v8, v8, a1, v0.t5112; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5113; CHECK-NEXT:    vse32.v v8, (a0)5114; CHECK-NEXT:    addi a0, a0, 165115; CHECK-NEXT:    bne a0, a3, .LBB110_15116; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5117; CHECK-NEXT:    ret5118entry:5119  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05120  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5121  br label %vector.body5122 5123vector.body:                                      ; preds = %vector.body, %entry5124  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5125  %0 = getelementptr inbounds i32, ptr %a, i64 %index5126  %wide.load = load <4 x i32>, ptr %0, align 45127  %1 = call <4 x i32> @llvm.vp.umax.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load, <4 x i1> %m, i32 %vl)5128  store <4 x i32> %1, ptr %0, align 45129  %index.next = add nuw i64 %index, 45130  %2 = icmp eq i64 %index.next, 10245131  br i1 %2, label %for.cond.cleanup, label %vector.body5132 5133for.cond.cleanup:                                 ; preds = %vector.body5134  ret void5135}5136 5137define void @sink_splat_vp_sadd_sat(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {5138; CHECK-LABEL: sink_splat_vp_sadd_sat:5139; CHECK:       # %bb.0: # %entry5140; CHECK-NEXT:    lui a3, 15141; CHECK-NEXT:    add a3, a0, a35142; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5143; CHECK-NEXT:  .LBB111_1: # %vector.body5144; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15145; CHECK-NEXT:    vle32.v v8, (a0)5146; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma5147; CHECK-NEXT:    vsadd.vx v8, v8, a1, v0.t5148; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5149; CHECK-NEXT:    vse32.v v8, (a0)5150; CHECK-NEXT:    addi a0, a0, 165151; CHECK-NEXT:    bne a0, a3, .LBB111_15152; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5153; CHECK-NEXT:    ret5154entry:5155  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05156  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5157  br label %vector.body5158 5159vector.body:                                      ; preds = %vector.body, %entry5160  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5161  %0 = getelementptr inbounds i32, ptr %a, i64 %index5162  %wide.load = load <4 x i32>, ptr %0, align 45163  %1 = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)5164  store <4 x i32> %1, ptr %0, align 45165  %index.next = add nuw i64 %index, 45166  %2 = icmp eq i64 %index.next, 10245167  br i1 %2, label %for.cond.cleanup, label %vector.body5168 5169for.cond.cleanup:                                 ; preds = %vector.body5170  ret void5171}5172 5173define void @sink_splat_vp_sadd_sat_commute(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {5174; CHECK-LABEL: sink_splat_vp_sadd_sat_commute:5175; CHECK:       # %bb.0: # %entry5176; CHECK-NEXT:    lui a3, 15177; CHECK-NEXT:    add a3, a0, a35178; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5179; CHECK-NEXT:  .LBB112_1: # %vector.body5180; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15181; CHECK-NEXT:    vle32.v v8, (a0)5182; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma5183; CHECK-NEXT:    vsadd.vx v8, v8, a1, v0.t5184; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5185; CHECK-NEXT:    vse32.v v8, (a0)5186; CHECK-NEXT:    addi a0, a0, 165187; CHECK-NEXT:    bne a0, a3, .LBB112_15188; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5189; CHECK-NEXT:    ret5190entry:5191  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05192  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5193  br label %vector.body5194 5195vector.body:                                      ; preds = %vector.body, %entry5196  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5197  %0 = getelementptr inbounds i32, ptr %a, i64 %index5198  %wide.load = load <4 x i32>, ptr %0, align 45199  %1 = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load, <4 x i1> %m, i32 %vl)5200  store <4 x i32> %1, ptr %0, align 45201  %index.next = add nuw i64 %index, 45202  %2 = icmp eq i64 %index.next, 10245203  br i1 %2, label %for.cond.cleanup, label %vector.body5204 5205for.cond.cleanup:                                 ; preds = %vector.body5206  ret void5207}5208 5209define void @sink_splat_vp_ssub_sat(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {5210; CHECK-LABEL: sink_splat_vp_ssub_sat:5211; CHECK:       # %bb.0: # %entry5212; CHECK-NEXT:    li a3, 10245213; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5214; CHECK-NEXT:  .LBB113_1: # %vector.body5215; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15216; CHECK-NEXT:    vle32.v v8, (a0)5217; CHECK-NEXT:    addi a3, a3, 45218; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma5219; CHECK-NEXT:    vssub.vx v8, v8, a1, v0.t5220; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5221; CHECK-NEXT:    vse32.v v8, (a0)5222; CHECK-NEXT:    addi a0, a0, -165223; CHECK-NEXT:    bnez a3, .LBB113_15224; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5225; CHECK-NEXT:    ret5226entry:5227  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05228  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5229  br label %vector.body5230 5231vector.body:                                      ; preds = %vector.body, %entry5232  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5233  %0 = getelementptr inbounds i32, ptr %a, i64 %index5234  %wide.load = load <4 x i32>, ptr %0, align 45235  %1 = call <4 x i32> @llvm.vp.ssub.sat.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)5236  store <4 x i32> %1, ptr %0, align 45237  %index.next = sub nuw i64 %index, 45238  %2 = icmp eq i64 %index.next, 10245239  br i1 %2, label %for.cond.cleanup, label %vector.body5240 5241for.cond.cleanup:                                 ; preds = %vector.body5242  ret void5243}5244 5245define void @sink_splat_vp_uadd_sat(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {5246; CHECK-LABEL: sink_splat_vp_uadd_sat:5247; CHECK:       # %bb.0: # %entry5248; CHECK-NEXT:    lui a3, 15249; CHECK-NEXT:    add a3, a0, a35250; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5251; CHECK-NEXT:  .LBB114_1: # %vector.body5252; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15253; CHECK-NEXT:    vle32.v v8, (a0)5254; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma5255; CHECK-NEXT:    vsaddu.vx v8, v8, a1, v0.t5256; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5257; CHECK-NEXT:    vse32.v v8, (a0)5258; CHECK-NEXT:    addi a0, a0, 165259; CHECK-NEXT:    bne a0, a3, .LBB114_15260; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5261; CHECK-NEXT:    ret5262entry:5263  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05264  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5265  br label %vector.body5266 5267vector.body:                                      ; preds = %vector.body, %entry5268  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5269  %0 = getelementptr inbounds i32, ptr %a, i64 %index5270  %wide.load = load <4 x i32>, ptr %0, align 45271  %1 = call <4 x i32> @llvm.vp.uadd.sat.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)5272  store <4 x i32> %1, ptr %0, align 45273  %index.next = add nuw i64 %index, 45274  %2 = icmp eq i64 %index.next, 10245275  br i1 %2, label %for.cond.cleanup, label %vector.body5276 5277for.cond.cleanup:                                 ; preds = %vector.body5278  ret void5279}5280 5281define void @sink_splat_vp_uadd_sat_commute(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {5282; CHECK-LABEL: sink_splat_vp_uadd_sat_commute:5283; CHECK:       # %bb.0: # %entry5284; CHECK-NEXT:    lui a3, 15285; CHECK-NEXT:    add a3, a0, a35286; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5287; CHECK-NEXT:  .LBB115_1: # %vector.body5288; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15289; CHECK-NEXT:    vle32.v v8, (a0)5290; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma5291; CHECK-NEXT:    vsaddu.vx v8, v8, a1, v0.t5292; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5293; CHECK-NEXT:    vse32.v v8, (a0)5294; CHECK-NEXT:    addi a0, a0, 165295; CHECK-NEXT:    bne a0, a3, .LBB115_15296; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5297; CHECK-NEXT:    ret5298entry:5299  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05300  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5301  br label %vector.body5302 5303vector.body:                                      ; preds = %vector.body, %entry5304  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5305  %0 = getelementptr inbounds i32, ptr %a, i64 %index5306  %wide.load = load <4 x i32>, ptr %0, align 45307  %1 = call <4 x i32> @llvm.vp.uadd.sat.v4i32(<4 x i32> %broadcast.splat, <4 x i32> %wide.load, <4 x i1> %m, i32 %vl)5308  store <4 x i32> %1, ptr %0, align 45309  %index.next = add nuw i64 %index, 45310  %2 = icmp eq i64 %index.next, 10245311  br i1 %2, label %for.cond.cleanup, label %vector.body5312 5313for.cond.cleanup:                                 ; preds = %vector.body5314  ret void5315}5316 5317define void @sink_splat_vp_usub_sat(ptr nocapture %a, i32 signext %x, <4 x i1> %m, i32 zeroext %vl) {5318; CHECK-LABEL: sink_splat_vp_usub_sat:5319; CHECK:       # %bb.0: # %entry5320; CHECK-NEXT:    li a3, 10245321; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5322; CHECK-NEXT:  .LBB116_1: # %vector.body5323; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15324; CHECK-NEXT:    vle32.v v8, (a0)5325; CHECK-NEXT:    addi a3, a3, 45326; CHECK-NEXT:    vsetvli zero, a2, e32, m1, ta, ma5327; CHECK-NEXT:    vssubu.vx v8, v8, a1, v0.t5328; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5329; CHECK-NEXT:    vse32.v v8, (a0)5330; CHECK-NEXT:    addi a0, a0, -165331; CHECK-NEXT:    bnez a3, .LBB116_15332; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5333; CHECK-NEXT:    ret5334entry:5335  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05336  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5337  br label %vector.body5338 5339vector.body:                                      ; preds = %vector.body, %entry5340  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5341  %0 = getelementptr inbounds i32, ptr %a, i64 %index5342  %wide.load = load <4 x i32>, ptr %0, align 45343  %1 = call <4 x i32> @llvm.vp.usub.sat.v4i32(<4 x i32> %wide.load, <4 x i32> %broadcast.splat, <4 x i1> %m, i32 %vl)5344  store <4 x i32> %1, ptr %0, align 45345  %index.next = sub nuw i64 %index, 45346  %2 = icmp eq i64 %index.next, 10245347  br i1 %2, label %for.cond.cleanup, label %vector.body5348 5349for.cond.cleanup:                                 ; preds = %vector.body5350  ret void5351}5352 5353define void @sink_splat_select_op1(ptr nocapture %a, i32 signext %x) {5354; CHECK-LABEL: sink_splat_select_op1:5355; CHECK:       # %bb.0: # %entry5356; CHECK-NEXT:    lui a3, 15357; CHECK-NEXT:    li a2, 425358; CHECK-NEXT:    add a3, a0, a35359; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5360; CHECK-NEXT:    vmv.v.x v8, a15361; CHECK-NEXT:  .LBB117_1: # %vector.body5362; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15363; CHECK-NEXT:    vle32.v v9, (a0)5364; CHECK-NEXT:    vmseq.vx v0, v9, a25365; CHECK-NEXT:    vse32.v v8, (a0), v0.t5366; CHECK-NEXT:    addi a0, a0, 165367; CHECK-NEXT:    bne a0, a3, .LBB117_15368; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5369; CHECK-NEXT:    ret5370entry:5371  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05372  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5373  br label %vector.body5374 5375vector.body:                                      ; preds = %vector.body, %entry5376  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5377  %0 = getelementptr inbounds i32, ptr %a, i64 %index5378  %load = load <4 x i32>, ptr %0, align 45379  %cond = icmp eq <4 x i32> %load, splat (i32 42)5380  %1 = select <4 x i1> %cond, <4 x i32> %broadcast.splat, <4 x i32> %load5381  store <4 x i32> %1, ptr %0, align 45382  %index.next = add nuw i64 %index, 45383  %2 = icmp eq i64 %index.next, 10245384  br i1 %2, label %for.cond.cleanup, label %vector.body5385 5386for.cond.cleanup:                                 ; preds = %vector.body5387  ret void5388}5389 5390define void @sink_splat_select_op2(ptr nocapture %a, i32 signext %x) {5391; CHECK-LABEL: sink_splat_select_op2:5392; CHECK:       # %bb.0: # %entry5393; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5394; CHECK-NEXT:    vmv.v.x v8, a15395; CHECK-NEXT:    lui a1, 15396; CHECK-NEXT:    add a1, a0, a15397; CHECK-NEXT:    li a2, 425398; CHECK-NEXT:  .LBB118_1: # %vector.body5399; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15400; CHECK-NEXT:    vle32.v v9, (a0)5401; CHECK-NEXT:    vmsne.vx v0, v9, a25402; CHECK-NEXT:    vse32.v v8, (a0), v0.t5403; CHECK-NEXT:    addi a0, a0, 165404; CHECK-NEXT:    bne a0, a1, .LBB118_15405; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5406; CHECK-NEXT:    ret5407entry:5408  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05409  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5410  br label %vector.body5411 5412vector.body:                                      ; preds = %vector.body, %entry5413  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5414  %0 = getelementptr inbounds i32, ptr %a, i64 %index5415  %load = load <4 x i32>, ptr %0, align 45416  %cond = icmp eq <4 x i32> %load, splat (i32 42)5417  %1 = select <4 x i1> %cond, <4 x i32> %load, <4 x i32> %broadcast.splat5418  store <4 x i32> %1, ptr %0, align 45419  %index.next = add nuw i64 %index, 45420  %2 = icmp eq i64 %index.next, 10245421  br i1 %2, label %for.cond.cleanup, label %vector.body5422 5423for.cond.cleanup:                                 ; preds = %vector.body5424  ret void5425}5426 5427define void @sink_splat_vp_select_op1(ptr %a, i32 %x, i32 %vl) {5428; CHECK-LABEL: sink_splat_vp_select_op1:5429; CHECK:       # %bb.0: # %entry5430; CHECK-NEXT:    lui a4, 15431; CHECK-NEXT:    li a3, 425432; CHECK-NEXT:    slli a5, a2, 325433; CHECK-NEXT:    add a2, a0, a45434; CHECK-NEXT:    srli a4, a5, 325435; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5436; CHECK-NEXT:  .LBB119_1: # %vector.body5437; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15438; CHECK-NEXT:    vle32.v v8, (a0)5439; CHECK-NEXT:    vmseq.vx v0, v8, a35440; CHECK-NEXT:    vsetvli zero, a4, e32, m1, ta, ma5441; CHECK-NEXT:    vmerge.vxm v8, v8, a1, v05442; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5443; CHECK-NEXT:    vse32.v v8, (a0)5444; CHECK-NEXT:    addi a0, a0, 165445; CHECK-NEXT:    bne a0, a2, .LBB119_15446; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5447; CHECK-NEXT:    ret5448entry:5449  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05450  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5451  br label %vector.body5452 5453vector.body:5454  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5455  %0 = getelementptr inbounds i32, ptr %a, i64 %index5456  %load = load <4 x i32>, ptr %0, align 45457  %cond = icmp eq <4 x i32> %load, splat (i32 42)5458  %1 = call <4 x i32> @llvm.vp.select(<4 x i1> %cond, <4 x i32> %broadcast.splat, <4 x i32> %load, i32 %vl)5459  store <4 x i32> %1, ptr %0, align 45460  %index.next = add nuw i64 %index, 45461  %2 = icmp eq i64 %index.next, 10245462  br i1 %2, label %for.cond.cleanup, label %vector.body5463 5464for.cond.cleanup:5465  ret void5466}5467 5468define void @sink_splat_vp_select_op2(ptr %a, i32 %x, i32 %vl) {5469; CHECK-LABEL: sink_splat_vp_select_op2:5470; CHECK:       # %bb.0: # %entry5471; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5472; CHECK-NEXT:    vmv.v.x v8, a15473; CHECK-NEXT:    lui a3, 15474; CHECK-NEXT:    li a1, 425475; CHECK-NEXT:    slli a4, a2, 325476; CHECK-NEXT:    add a2, a0, a35477; CHECK-NEXT:    srli a3, a4, 325478; CHECK-NEXT:  .LBB120_1: # %vector.body5479; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15480; CHECK-NEXT:    vle32.v v9, (a0)5481; CHECK-NEXT:    vmseq.vx v0, v9, a15482; CHECK-NEXT:    vsetvli zero, a3, e32, m1, ta, ma5483; CHECK-NEXT:    vmerge.vvm v9, v8, v9, v05484; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5485; CHECK-NEXT:    vse32.v v9, (a0)5486; CHECK-NEXT:    addi a0, a0, 165487; CHECK-NEXT:    bne a0, a2, .LBB120_15488; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5489; CHECK-NEXT:    ret5490entry:5491  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %x, i32 05492  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer5493  br label %vector.body5494 5495vector.body:5496  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5497  %0 = getelementptr inbounds i32, ptr %a, i64 %index5498  %load = load <4 x i32>, ptr %0, align 45499  %cond = icmp eq <4 x i32> %load, splat (i32 42)5500  %1 = call <4 x i32> @llvm.vp.select(<4 x i1> %cond, <4 x i32> %load, <4 x i32> %broadcast.splat, i32 %vl)5501  store <4 x i32> %1, ptr %0, align 45502  %index.next = add nuw i64 %index, 45503  %2 = icmp eq i64 %index.next, 10245504  br i1 %2, label %for.cond.cleanup, label %vector.body5505 5506for.cond.cleanup:5507  ret void5508}5509 5510define void @sink_splat_fmuladd(ptr %a, ptr %b, float %x) {5511; CHECK-LABEL: sink_splat_fmuladd:5512; CHECK:       # %bb.0: # %entry5513; CHECK-NEXT:    lui a2, 15514; CHECK-NEXT:    add a2, a1, a25515; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5516; CHECK-NEXT:  .LBB121_1: # %vector.body5517; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15518; CHECK-NEXT:    vle32.v v8, (a0)5519; CHECK-NEXT:    vle32.v v9, (a1)5520; CHECK-NEXT:    addi a1, a1, 165521; CHECK-NEXT:    vfmacc.vf v9, fa0, v85522; CHECK-NEXT:    vse32.v v9, (a0)5523; CHECK-NEXT:    addi a0, a0, 165524; CHECK-NEXT:    bne a1, a2, .LBB121_15525; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5526; CHECK-NEXT:    ret5527entry:5528  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 05529  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer5530  br label %vector.body5531 5532vector.body:5533  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5534  %0 = getelementptr inbounds float, ptr %a, i64 %index5535  %wide.load = load <4 x float>, ptr %0, align 45536  %1 = getelementptr inbounds float, ptr %b, i64 %index5537  %wide.load12 = load <4 x float>, ptr %1, align 45538  %2 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %wide.load, <4 x float> %broadcast.splat, <4 x float> %wide.load12)5539  store <4 x float> %2, ptr %0, align 45540  %index.next = add nuw i64 %index, 45541  %3 = icmp eq i64 %index.next, 10245542  br i1 %3, label %for.cond.cleanup, label %vector.body5543 5544for.cond.cleanup:5545  ret void5546}5547 5548define void @sink_splat_fmuladd_commute(ptr %a, ptr %b, float %x) {5549; CHECK-LABEL: sink_splat_fmuladd_commute:5550; CHECK:       # %bb.0: # %entry5551; CHECK-NEXT:    lui a2, 15552; CHECK-NEXT:    add a2, a1, a25553; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5554; CHECK-NEXT:  .LBB122_1: # %vector.body5555; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15556; CHECK-NEXT:    vle32.v v8, (a0)5557; CHECK-NEXT:    vle32.v v9, (a1)5558; CHECK-NEXT:    addi a1, a1, 165559; CHECK-NEXT:    vfmacc.vf v9, fa0, v85560; CHECK-NEXT:    vse32.v v9, (a0)5561; CHECK-NEXT:    addi a0, a0, 165562; CHECK-NEXT:    bne a1, a2, .LBB122_15563; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5564; CHECK-NEXT:    ret5565entry:5566  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 05567  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer5568  br label %vector.body5569 5570vector.body:5571  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5572  %0 = getelementptr inbounds float, ptr %a, i64 %index5573  %wide.load = load <4 x float>, ptr %0, align 45574  %1 = getelementptr inbounds float, ptr %b, i64 %index5575  %wide.load12 = load <4 x float>, ptr %1, align 45576  %2 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat, <4 x float> %wide.load, <4 x float> %wide.load12)5577  store <4 x float> %2, ptr %0, align 45578  %index.next = add nuw i64 %index, 45579  %3 = icmp eq i64 %index.next, 10245580  br i1 %3, label %for.cond.cleanup, label %vector.body5581 5582for.cond.cleanup:5583  ret void5584}5585 5586define void @sink_splat_vp_fmuladd(ptr %a, ptr %b, float %x, <4 x i1> %m, i32 %vl) {5587; CHECK-LABEL: sink_splat_vp_fmuladd:5588; CHECK:       # %bb.0: # %entry5589; CHECK-NEXT:    lui a3, 15590; CHECK-NEXT:    slli a4, a2, 325591; CHECK-NEXT:    add a2, a1, a35592; CHECK-NEXT:    srli a3, a4, 325593; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5594; CHECK-NEXT:  .LBB123_1: # %vector.body5595; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15596; CHECK-NEXT:    vle32.v v8, (a0)5597; CHECK-NEXT:    vle32.v v9, (a1)5598; CHECK-NEXT:    addi a1, a1, 165599; CHECK-NEXT:    vsetvli zero, a3, e32, m1, ta, ma5600; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t5601; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5602; CHECK-NEXT:    vse32.v v8, (a0)5603; CHECK-NEXT:    addi a0, a0, 165604; CHECK-NEXT:    bne a1, a2, .LBB123_15605; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5606; CHECK-NEXT:    ret5607entry:5608  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 05609  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer5610  br label %vector.body5611 5612vector.body:5613  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5614  %0 = getelementptr inbounds float, ptr %a, i64 %index5615  %wide.load = load <4 x float>, ptr %0, align 45616  %1 = getelementptr inbounds float, ptr %b, i64 %index5617  %wide.load12 = load <4 x float>, ptr %1, align 45618  %2 = call <4 x float> @llvm.vp.fmuladd.v4f32(<4 x float> %wide.load, <4 x float> %broadcast.splat, <4 x float> %wide.load12, <4 x i1> %m, i32 %vl)5619  store <4 x float> %2, ptr %0, align 45620  %index.next = add nuw i64 %index, 45621  %3 = icmp eq i64 %index.next, 10245622  br i1 %3, label %for.cond.cleanup, label %vector.body5623 5624for.cond.cleanup:5625  ret void5626}5627 5628define void @sink_splat_vp_fmuladd_commute(ptr %a, ptr %b, float %x, <4 x i1> %m, i32 %vl) {5629; CHECK-LABEL: sink_splat_vp_fmuladd_commute:5630; CHECK:       # %bb.0: # %entry5631; CHECK-NEXT:    lui a3, 15632; CHECK-NEXT:    slli a4, a2, 325633; CHECK-NEXT:    add a2, a1, a35634; CHECK-NEXT:    srli a3, a4, 325635; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5636; CHECK-NEXT:  .LBB124_1: # %vector.body5637; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15638; CHECK-NEXT:    vle32.v v8, (a0)5639; CHECK-NEXT:    vle32.v v9, (a1)5640; CHECK-NEXT:    addi a1, a1, 165641; CHECK-NEXT:    vsetvli zero, a3, e32, m1, ta, ma5642; CHECK-NEXT:    vfmadd.vf v8, fa0, v9, v0.t5643; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5644; CHECK-NEXT:    vse32.v v8, (a0)5645; CHECK-NEXT:    addi a0, a0, 165646; CHECK-NEXT:    bne a1, a2, .LBB124_15647; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5648; CHECK-NEXT:    ret5649entry:5650  %broadcast.splatinsert = insertelement <4 x float> poison, float %x, i32 05651  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer5652  br label %vector.body5653 5654vector.body:5655  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5656  %0 = getelementptr inbounds float, ptr %a, i64 %index5657  %wide.load = load <4 x float>, ptr %0, align 45658  %1 = getelementptr inbounds float, ptr %b, i64 %index5659  %wide.load12 = load <4 x float>, ptr %1, align 45660  %2 = call <4 x float> @llvm.vp.fmuladd.v4f32(<4 x float> %broadcast.splat, <4 x float> %wide.load, <4 x float> %wide.load12, <4 x i1> %m, i32 %vl)5661  store <4 x float> %2, ptr %0, align 45662  %index.next = add nuw i64 %index, 45663  %3 = icmp eq i64 %index.next, 10245664  br i1 %3, label %for.cond.cleanup, label %vector.body5665 5666for.cond.cleanup:5667  ret void5668}5669 5670define void @sink_splat_vfwadd_vf(ptr nocapture %a, ptr nocapture %b, float %f) {5671; CHECK-LABEL: sink_splat_vfwadd_vf:5672; CHECK:       # %bb.0: # %entry5673; CHECK-NEXT:    li a1, 05674; CHECK-NEXT:    li a2, 10205675; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma5676; CHECK-NEXT:  .LBB125_1: # %vector.body5677; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15678; CHECK-NEXT:    vl1re32.v v10, (a0)5679; CHECK-NEXT:    addi a1, a1, 45680; CHECK-NEXT:    addi a2, a2, -45681; CHECK-NEXT:    vfwadd.vf v8, v10, fa05682; CHECK-NEXT:    vs2r.v v8, (a0)5683; CHECK-NEXT:    addi a0, a0, 165684; CHECK-NEXT:    j .LBB125_15685entry:5686  %f.ext = fpext float %f to double5687  %broadcast.splatinsert = insertelement <vscale x 2 x double> poison, double %f.ext, i32 05688  %broadcast.splat = shufflevector <vscale x 2 x double> %broadcast.splatinsert, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer5689  br label %vector.body5690 5691vector.body:                                      ; preds = %vector.body, %entry5692  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5693  %0 = getelementptr float, ptr %a, i64 %index5694  %wide.load = load <vscale x 2 x float>, ptr %05695  %ext = fpext <vscale x 2 x float> %wide.load to <vscale x 2 x double>5696  %1 = fadd <vscale x 2 x double> %ext, %broadcast.splat5697  %2 = getelementptr double, ptr %b, i64 %index5698  store <vscale x 2 x double> %1, ptr %05699  %index.next = add i64 %index, 45700  %3 = icmp eq i64 %index.next, 10245701  br i1 32, label %for.cond.cleanup, label %vector.body5702 5703for.cond.cleanup:                                 ; preds = %vector.body5704  ret void5705}5706 5707define void @sink_splat_vfwadd_wf(ptr nocapture %a, ptr nocapture %b, float %f) {5708; CHECK-LABEL: sink_splat_vfwadd_wf:5709; CHECK:       # %bb.0: # %entry5710; CHECK-NEXT:    li a1, 05711; CHECK-NEXT:    li a2, 10205712; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma5713; CHECK-NEXT:  .LBB126_1: # %vector.body5714; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15715; CHECK-NEXT:    vl2re64.v v8, (a0)5716; CHECK-NEXT:    addi a1, a1, 45717; CHECK-NEXT:    addi a2, a2, -45718; CHECK-NEXT:    vfwadd.wf v8, v8, fa05719; CHECK-NEXT:    vs2r.v v8, (a0)5720; CHECK-NEXT:    addi a0, a0, 325721; CHECK-NEXT:    j .LBB126_15722entry:5723  %f.ext = fpext float %f to double5724  %broadcast.splatinsert = insertelement <vscale x 2 x double> poison, double %f.ext, i32 05725  %broadcast.splat = shufflevector <vscale x 2 x double> %broadcast.splatinsert, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer5726  br label %vector.body5727 5728vector.body:                                      ; preds = %vector.body, %entry5729  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5730  %0 = getelementptr double, ptr %a, i64 %index5731  %wide.load = load <vscale x 2 x double>, ptr %05732  %1 = fadd <vscale x 2 x double> %wide.load, %broadcast.splat5733  %2 = getelementptr double, ptr %b, i64 %index5734  store <vscale x 2 x double> %1, ptr %05735  %index.next = add i64 %index, 45736  %3 = icmp eq i64 %index.next, 10245737  br i1 32, label %for.cond.cleanup, label %vector.body5738 5739for.cond.cleanup:                                 ; preds = %vector.body5740  ret void5741}5742 5743define void @sink_splat_vfwmul_vf(ptr nocapture %a, ptr nocapture %b, float %f) {5744; CHECK-LABEL: sink_splat_vfwmul_vf:5745; CHECK:       # %bb.0: # %entry5746; CHECK-NEXT:    li a1, 05747; CHECK-NEXT:    li a2, 10205748; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma5749; CHECK-NEXT:  .LBB127_1: # %vector.body5750; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15751; CHECK-NEXT:    vl1re32.v v10, (a0)5752; CHECK-NEXT:    addi a1, a1, 45753; CHECK-NEXT:    addi a2, a2, -45754; CHECK-NEXT:    vfwmul.vf v8, v10, fa05755; CHECK-NEXT:    vs2r.v v8, (a0)5756; CHECK-NEXT:    addi a0, a0, 165757; CHECK-NEXT:    j .LBB127_15758entry:5759  %f.ext = fpext float %f to double5760  %broadcast.splatinsert = insertelement <vscale x 2 x double> poison, double %f.ext, i32 05761  %broadcast.splat = shufflevector <vscale x 2 x double> %broadcast.splatinsert, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer5762  br label %vector.body5763 5764vector.body:                                      ; preds = %vector.body, %entry5765  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5766  %0 = getelementptr float, ptr %a, i64 %index5767  %wide.load = load <vscale x 2 x float>, ptr %05768  %ext = fpext <vscale x 2 x float> %wide.load to <vscale x 2 x double>5769  %1 = fmul <vscale x 2 x double> %ext, %broadcast.splat5770  %2 = getelementptr double, ptr %b, i64 %index5771  store <vscale x 2 x double> %1, ptr %05772  %index.next = add i64 %index, 45773  %3 = icmp eq i64 %index.next, 10245774  br i1 32, label %for.cond.cleanup, label %vector.body5775 5776for.cond.cleanup:                                 ; preds = %vector.body5777  ret void5778}5779 5780; Even though there's no vfwmul.wf we'll sink the fcvt.d.s. Make sure5781; early-machinelicm undos the sink after isel.5782define void @sink_splat_vfwmul_wf(ptr nocapture %a, ptr nocapture %b, float %f) {5783; CHECK-LABEL: sink_splat_vfwmul_wf:5784; CHECK:       # %bb.0: # %entry5785; CHECK-NEXT:    li a1, 05786; CHECK-NEXT:    li a2, 10205787; CHECK-NEXT:    fcvt.d.s fa5, fa05788; CHECK-NEXT:    vsetvli a3, zero, e64, m2, ta, ma5789; CHECK-NEXT:  .LBB128_1: # %vector.body5790; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15791; CHECK-NEXT:    vl2re64.v v8, (a0)5792; CHECK-NEXT:    addi a1, a1, 45793; CHECK-NEXT:    addi a2, a2, -45794; CHECK-NEXT:    vfmul.vf v8, v8, fa55795; CHECK-NEXT:    vs2r.v v8, (a0)5796; CHECK-NEXT:    addi a0, a0, 165797; CHECK-NEXT:    j .LBB128_15798entry:5799  %f.ext = fpext float %f to double5800  %broadcast.splatinsert = insertelement <vscale x 2 x double> poison, double %f.ext, i32 05801  %broadcast.splat = shufflevector <vscale x 2 x double> %broadcast.splatinsert, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer5802  br label %vector.body5803 5804vector.body:                                      ; preds = %vector.body, %entry5805  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5806  %0 = getelementptr float, ptr %a, i64 %index5807  %wide.load = load <vscale x 2 x double>, ptr %05808  %1 = fmul <vscale x 2 x double> %wide.load, %broadcast.splat5809  %2 = getelementptr double, ptr %b, i64 %index5810  store <vscale x 2 x double> %1, ptr %05811  %index.next = add i64 %index, 45812  %3 = icmp eq i64 %index.next, 10245813  br i1 32, label %for.cond.cleanup, label %vector.body5814 5815for.cond.cleanup:                                 ; preds = %vector.body5816  ret void5817}5818 5819define void @sink_vp_splat(ptr nocapture %out, ptr nocapture %in) {5820; CHECK-LABEL: sink_vp_splat:5821; CHECK:       # %bb.0: # %entry5822; CHECK-NEXT:    li a2, 05823; CHECK-NEXT:    li a3, 10245824; CHECK-NEXT:    li a4, 35825; CHECK-NEXT:    lui a5, 15826; CHECK-NEXT:  .LBB129_1: # %vector.body5827; CHECK-NEXT:    # =>This Loop Header: Depth=15828; CHECK-NEXT:    # Child Loop BB129_2 Depth 25829; CHECK-NEXT:    vsetvli a6, a3, e32, m4, ta, ma5830; CHECK-NEXT:    slli a7, a2, 25831; CHECK-NEXT:    vmv.v.i v8, 05832; CHECK-NEXT:    add t0, a1, a75833; CHECK-NEXT:    li t1, 10245834; CHECK-NEXT:  .LBB129_2: # %for.body4245835; CHECK-NEXT:    # Parent Loop BB129_1 Depth=15836; CHECK-NEXT:    # => This Inner Loop Header: Depth=25837; CHECK-NEXT:    vle32.v v12, (t0)5838; CHECK-NEXT:    addi t1, t1, -15839; CHECK-NEXT:    vmacc.vx v8, a4, v125840; CHECK-NEXT:    add t0, t0, a55841; CHECK-NEXT:    bnez t1, .LBB129_25842; CHECK-NEXT:  # %bb.3: # %vector.latch5843; CHECK-NEXT:    # in Loop: Header=BB129_1 Depth=15844; CHECK-NEXT:    add a7, a0, a75845; CHECK-NEXT:    sub a3, a3, a65846; CHECK-NEXT:    vse32.v v8, (a7)5847; CHECK-NEXT:    add a2, a2, a65848; CHECK-NEXT:    bnez a3, .LBB129_15849; CHECK-NEXT:  # %bb.4: # %for.cond.cleanup5850; CHECK-NEXT:    ret5851entry:5852  br label %vector.body5853 5854vector.body:                                      ; preds = %vector.latch, %entry5855  %scalar.ind = phi i64 [ 0, %entry ], [ %next.ind, %vector.latch ]5856  %trip.count = phi i64 [ 1024, %entry ], [ %remaining.trip.count, %vector.latch ]5857  %evl = tail call i32 @llvm.experimental.get.vector.length.i64(i64 %trip.count, i32 8, i1 true)5858  %vp.splat1 = tail call <vscale x 8 x i32> @llvm.experimental.vp.splat.nxv8i32(i32 0, <vscale x 8 x i1> splat(i1 true), i32 %evl)5859  %vp.splat2 = tail call <vscale x 8 x i32> @llvm.experimental.vp.splat.nxv8i32(i32 3, <vscale x 8 x i1> splat(i1 true), i32 %evl)5860  %evl.cast = zext i32 %evl to i645861  br label %for.body4245862 5863for.body424:                                      ; preds = %for.body424, %vector.body5864  %scalar.phi = phi i64 [ 0, %vector.body ], [ %indvars.iv.next27, %for.body424 ]5865  %vector.phi = phi <vscale x 8 x i32> [ %vp.splat1, %vector.body ], [ %vp.binary26, %for.body424 ]5866  %arrayidx625 = getelementptr inbounds [1024 x i32], ptr %in, i64 %scalar.phi, i64 %scalar.ind5867  %widen.load = tail call <vscale x 8 x i32> @llvm.vp.load.nxv8i32.p0(ptr %arrayidx625, <vscale x 8 x i1> splat (i1 true), i32 %evl)5868  %vp.binary = tail call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %widen.load, <vscale x 8 x i32> %vp.splat2, <vscale x 8 x i1> splat (i1 true), i32 %evl)5869  %vp.binary26 = tail call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %vector.phi, <vscale x 8 x i32> %vp.binary, <vscale x 8 x i1> splat (i1 true), i32 %evl)5870  %indvars.iv.next27 = add nuw nsw i64 %scalar.phi, 15871  %exitcond.not28 = icmp eq i64 %indvars.iv.next27, 10245872  br i1 %exitcond.not28, label %vector.latch, label %for.body4245873 5874vector.latch:                                     ; preds = %for.body4245875  %arrayidx830 = getelementptr inbounds i32, ptr %out, i64 %scalar.ind5876  tail call void @llvm.vp.store.nxv8i32.p0(<vscale x 8 x i32> %vp.binary26, ptr %arrayidx830, <vscale x 8 x i1> splat (i1 true), i32 %evl)5877  %remaining.trip.count = sub nuw i64 %trip.count, %evl.cast5878  %next.ind = add i64 %scalar.ind, %evl.cast5879  %6 = icmp eq i64 %remaining.trip.count, 05880  br i1 %6, label %for.cond.cleanup, label %vector.body5881 5882for.cond.cleanup:                                 ; preds = %vector.latch5883  ret void5884}5885 5886define void @sink_vp_splat_vfwadd_wf(ptr nocapture %in, float %f) {5887; CHECK-LABEL: sink_vp_splat_vfwadd_wf:5888; CHECK:       # %bb.0: # %entry5889; CHECK-NEXT:    li a1, 05890; CHECK-NEXT:    li a2, 10245891; CHECK-NEXT:    lui a3, 25892; CHECK-NEXT:  .LBB130_1: # %vector.body5893; CHECK-NEXT:    # =>This Loop Header: Depth=15894; CHECK-NEXT:    # Child Loop BB130_2 Depth 25895; CHECK-NEXT:    vsetvli a4, a2, e8, m1, ta, ma5896; CHECK-NEXT:    slli a5, a1, 35897; CHECK-NEXT:    add a5, a0, a55898; CHECK-NEXT:    li a6, 10245899; CHECK-NEXT:  .LBB130_2: # %for.body4195900; CHECK-NEXT:    # Parent Loop BB130_1 Depth=15901; CHECK-NEXT:    # => This Inner Loop Header: Depth=25902; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma5903; CHECK-NEXT:    vle64.v v8, (a5)5904; CHECK-NEXT:    addi a6, a6, -15905; CHECK-NEXT:    vfwadd.wf v8, v8, fa05906; CHECK-NEXT:    vse64.v v8, (a5)5907; CHECK-NEXT:    add a5, a5, a35908; CHECK-NEXT:    bnez a6, .LBB130_25909; CHECK-NEXT:  # %bb.3: # %vector.latch5910; CHECK-NEXT:    # in Loop: Header=BB130_1 Depth=15911; CHECK-NEXT:    sub a2, a2, a45912; CHECK-NEXT:    add a1, a1, a45913; CHECK-NEXT:    bnez a2, .LBB130_15914; CHECK-NEXT:  # %bb.4: # %for.cond.cleanup5915; CHECK-NEXT:    ret5916entry:5917  %conv = fpext float %f to double5918  br label %vector.body5919 5920vector.body:                                      ; preds = %vector.latch, %entry5921  %scalar.ind = phi i64 [ 0, %entry ], [ %next.ind, %vector.latch ]5922  %trip.count = phi i64 [ 1024, %entry ], [ %remaining.trip.count, %vector.latch ]5923  %evl = call i32 @llvm.experimental.get.vector.length.i64(i64 %trip.count, i32 8, i1 true)5924  %vp.splat = call <vscale x 8 x double> @llvm.experimental.vp.splat.nxv8f64(double %conv, <vscale x 8 x i1> splat (i1 true), i32 %evl)5925  %evl.cast = zext i32 %evl to i645926  br label %for.body4195927 5928for.body419:                                      ; preds = %for.body419, %vector.body5929  %scalar.phi = phi i64 [ 0, %vector.body ], [ %indvars.iv.next21, %for.body419 ]5930  %arrayidx620 = getelementptr inbounds [1024 x double], ptr %in, i64 %scalar.phi, i64 %scalar.ind5931  %widen.load = call <vscale x 8 x double> @llvm.vp.load.nxv8f64.p0(ptr %arrayidx620, <vscale x 8 x i1> splat (i1 true), i32 %evl)5932  %vp.binary = call <vscale x 8 x double> @llvm.vp.fadd.nxv8f64(<vscale x 8 x double> %widen.load, <vscale x 8 x double> %vp.splat, <vscale x 8 x i1> splat (i1 true), i32 %evl)5933  call void @llvm.vp.store.nxv8f64.p0(<vscale x 8 x double> %vp.binary, ptr %arrayidx620, <vscale x 8 x i1> splat (i1 true), i32 %evl)5934  %indvars.iv.next21 = add nuw nsw i64 %scalar.phi, 15935  %exitcond.not22 = icmp eq i64 %indvars.iv.next21, 10245936  br i1 %exitcond.not22, label %vector.latch, label %for.body4195937 5938vector.latch:                                     ; preds = %for.body4195939  %remaining.trip.count = sub nuw i64 %trip.count, %evl.cast5940  %next.ind = add i64 %scalar.ind, %evl.cast5941  %cond = icmp eq i64 %remaining.trip.count, 05942  br i1 %cond, label %for.cond.cleanup, label %vector.body5943 5944for.cond.cleanup:                                 ; preds = %vector.latch5945  ret void5946}5947 5948;; This is exactly like sink_add_splat except that the splat has operands5949;; which haven't been converted to undef.5950define void @sink_non_canonical_splat(ptr nocapture %a, i32 signext %x) {5951; CHECK-LABEL: sink_non_canonical_splat:5952; CHECK:       # %bb.0: # %entry5953; CHECK-NEXT:    lui a2, 15954; CHECK-NEXT:    add a2, a0, a25955; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma5956; CHECK-NEXT:  .LBB131_1: # %vector.body5957; CHECK-NEXT:    # =>This Inner Loop Header: Depth=15958; CHECK-NEXT:    vle32.v v8, (a0)5959; CHECK-NEXT:    vadd.vx v8, v8, a15960; CHECK-NEXT:    vse32.v v8, (a0)5961; CHECK-NEXT:    addi a0, a0, 165962; CHECK-NEXT:    bne a0, a2, .LBB131_15963; CHECK-NEXT:  # %bb.2: # %for.cond.cleanup5964; CHECK-NEXT:    ret5965entry:5966  %broadcast.splatinsert = insertelement <4 x i32> zeroinitializer, i32 %x, i32 05967  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> zeroinitializer, <4 x i32> zeroinitializer5968  br label %vector.body5969 5970vector.body:                                      ; preds = %vector.body, %entry5971  %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]5972  %0 = getelementptr inbounds i32, ptr %a, i64 %index5973  %wide.load = load <4 x i32>, ptr %0, align 45974  %1 = add <4 x i32> %wide.load, %broadcast.splat5975  store <4 x i32> %1, ptr %0, align 45976  %index.next = add nuw i64 %index, 45977  %2 = icmp eq i64 %index.next, 10245978  br i1 %2, label %for.cond.cleanup, label %vector.body5979 5980for.cond.cleanup:                                 ; preds = %vector.body5981  ret void5982}5983