brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.8 KiB · ed6b7f1 Raw
199 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=riscv32 -mattr=+v | FileCheck %s --check-prefixes=CHECK,RV323; RUN: llc < %s -mtriple=riscv64 -mattr=+v | FileCheck %s --check-prefixes=CHECK,RV644 5define dso_local void @test_store1(ptr nocapture noundef writeonly %dst, ptr nocapture noundef readonly %src, i32 noundef signext %c, i32 noundef signext %n) {6; RV32-LABEL: test_store1:7; RV32:       # %bb.0: # %entry8; RV32-NEXT:    blez a3, .LBB0_69; RV32-NEXT:  # %bb.1: # %for.body.preheader10; RV32-NEXT:    li a4, 811; RV32-NEXT:    bltu a3, a4, .LBB0_712; RV32-NEXT:  # %bb.2: # %for.body.preheader13; RV32-NEXT:    sub a4, a0, a114; RV32-NEXT:    sltu a5, a0, a115; RV32-NEXT:    neg a5, a516; RV32-NEXT:    sltiu a4, a4, 3217; RV32-NEXT:    seqz a5, a518; RV32-NEXT:    and a4, a5, a419; RV32-NEXT:    bnez a4, .LBB0_720; RV32-NEXT:  # %bb.3: # %vector.ph21; RV32-NEXT:    lui a5, 52428822; RV32-NEXT:    addi a5, a5, -823; RV32-NEXT:    and a5, a3, a524; RV32-NEXT:    li a7, 025; RV32-NEXT:    li a6, 026; RV32-NEXT:  .LBB0_4: # %vector.body27; RV32-NEXT:    # =>This Inner Loop Header: Depth=128; RV32-NEXT:    slli t0, a7, 229; RV32-NEXT:    addi t1, a7, 830; RV32-NEXT:    add t0, a1, t031; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma32; RV32-NEXT:    vle32.v v8, (t0)33; RV32-NEXT:    sltu a7, t1, a734; RV32-NEXT:    xor t0, t1, a535; RV32-NEXT:    add a6, a6, a736; RV32-NEXT:    vmslt.vx v12, v8, a237; RV32-NEXT:    vcompress.vm v10, v8, v1238; RV32-NEXT:    vcpop.m a7, v1239; RV32-NEXT:    vsetvli zero, a7, e32, m2, ta, ma40; RV32-NEXT:    vse32.v v10, (a0)41; RV32-NEXT:    slli a7, a7, 242; RV32-NEXT:    or t0, t0, a643; RV32-NEXT:    add a0, a0, a744; RV32-NEXT:    mv a7, t145; RV32-NEXT:    bnez t0, .LBB0_446; RV32-NEXT:  # %bb.5: # %middle.block47; RV32-NEXT:    bne a5, a3, .LBB0_948; RV32-NEXT:  .LBB0_6: # %for.cond.cleanup49; RV32-NEXT:    ret50; RV32-NEXT:  .LBB0_7:51; RV32-NEXT:    li a5, 052; RV32-NEXT:    li a4, 053; RV32-NEXT:    j .LBB0_954; RV32-NEXT:  .LBB0_8: # %for.inc55; RV32-NEXT:    # in Loop: Header=BB0_9 Depth=156; RV32-NEXT:    addi a5, a5, 157; RV32-NEXT:    seqz a6, a558; RV32-NEXT:    add a4, a4, a659; RV32-NEXT:    xor a6, a5, a360; RV32-NEXT:    or a6, a6, a461; RV32-NEXT:    beqz a6, .LBB0_662; RV32-NEXT:  .LBB0_9: # %for.body63; RV32-NEXT:    # =>This Inner Loop Header: Depth=164; RV32-NEXT:    slli a6, a5, 265; RV32-NEXT:    add a6, a1, a666; RV32-NEXT:    lw a6, 0(a6)67; RV32-NEXT:    bge a6, a2, .LBB0_868; RV32-NEXT:  # %bb.10: # %if.then69; RV32-NEXT:    # in Loop: Header=BB0_9 Depth=170; RV32-NEXT:    addi a7, a0, 471; RV32-NEXT:    sw a6, 0(a0)72; RV32-NEXT:    mv a0, a773; RV32-NEXT:    j .LBB0_874;75; RV64-LABEL: test_store1:76; RV64:       # %bb.0: # %entry77; RV64-NEXT:    blez a3, .LBB0_678; RV64-NEXT:  # %bb.1: # %for.body.preheader79; RV64-NEXT:    li a5, 880; RV64-NEXT:    li a4, 081; RV64-NEXT:    bltu a3, a5, .LBB0_782; RV64-NEXT:  # %bb.2: # %for.body.preheader83; RV64-NEXT:    sub a5, a0, a184; RV64-NEXT:    li a6, 3185; RV64-NEXT:    bgeu a6, a5, .LBB0_786; RV64-NEXT:  # %bb.3: # %vector.ph87; RV64-NEXT:    lui a4, 52428888; RV64-NEXT:    addiw a4, a4, -889; RV64-NEXT:    and a4, a3, a490; RV64-NEXT:    slli a5, a4, 291; RV64-NEXT:    add a5, a5, a192; RV64-NEXT:    mv a6, a193; RV64-NEXT:  .LBB0_4: # %vector.body94; RV64-NEXT:    # =>This Inner Loop Header: Depth=195; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma96; RV64-NEXT:    vle32.v v8, (a6)97; RV64-NEXT:    addi a6, a6, 3298; RV64-NEXT:    vmslt.vx v12, v8, a299; RV64-NEXT:    vcompress.vm v10, v8, v12100; RV64-NEXT:    vcpop.m a7, v12101; RV64-NEXT:    vsetvli zero, a7, e32, m2, ta, ma102; RV64-NEXT:    vse32.v v10, (a0)103; RV64-NEXT:    slli a7, a7, 2104; RV64-NEXT:    add a0, a0, a7105; RV64-NEXT:    bne a6, a5, .LBB0_4106; RV64-NEXT:  # %bb.5: # %middle.block107; RV64-NEXT:    bne a4, a3, .LBB0_7108; RV64-NEXT:  .LBB0_6: # %for.cond.cleanup109; RV64-NEXT:    ret110; RV64-NEXT:  .LBB0_7: # %for.body.preheader13111; RV64-NEXT:    slli a4, a4, 2112; RV64-NEXT:    slli a5, a3, 2113; RV64-NEXT:    add a3, a1, a4114; RV64-NEXT:    add a1, a1, a5115; RV64-NEXT:    j .LBB0_9116; RV64-NEXT:  .LBB0_8: # %for.inc117; RV64-NEXT:    # in Loop: Header=BB0_9 Depth=1118; RV64-NEXT:    addi a3, a3, 4119; RV64-NEXT:    beq a3, a1, .LBB0_6120; RV64-NEXT:  .LBB0_9: # %for.body121; RV64-NEXT:    # =>This Inner Loop Header: Depth=1122; RV64-NEXT:    lw a4, 0(a3)123; RV64-NEXT:    bge a4, a2, .LBB0_8124; RV64-NEXT:  # %bb.10: # %if.then125; RV64-NEXT:    # in Loop: Header=BB0_9 Depth=1126; RV64-NEXT:    addi a5, a0, 4127; RV64-NEXT:    sw a4, 0(a0)128; RV64-NEXT:    mv a0, a5129; RV64-NEXT:    j .LBB0_8130entry:131  %cmp8 = icmp sgt i32 %n, 0132  br i1 %cmp8, label %for.body.preheader, label %for.cond.cleanup133 134for.body.preheader:                               ; preds = %entry135  %dst11 = ptrtoint ptr %dst to i64136  %src12 = ptrtoint ptr %src to i64137  %wide.trip.count = zext nneg i32 %n to i64138  %min.iters.check = icmp ult i32 %n, 8139  %0 = sub i64 %dst11, %src12140  %diff.check = icmp ult i64 %0, 32141  %or.cond = or i1 %min.iters.check, %diff.check142  br i1 %or.cond, label %for.body.preheader13, label %vector.ph143 144for.body.preheader13:                             ; preds = %middle.block, %for.body.preheader145  %indvars.iv.ph = phi i64 [ 0, %for.body.preheader ], [ %n.vec, %middle.block ]146  %dst.addr.09.ph = phi ptr [ %dst, %for.body.preheader ], [ %monotonic.add, %middle.block ]147  br label %for.body148 149vector.ph:                                        ; preds = %for.body.preheader150  %n.vec = and i64 %wide.trip.count, 2147483640151  %broadcast.splatinsert = insertelement <8 x i32> poison, i32 %c, i64 0152  %broadcast.splat = shufflevector <8 x i32> %broadcast.splatinsert, <8 x i32> poison, <8 x i32> zeroinitializer153  br label %vector.body154 155vector.body:                                      ; preds = %vector.body, %vector.ph156  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]157  %monotonic.iv = phi ptr [ %dst, %vector.ph ], [ %monotonic.add, %vector.body ]158  %1 = getelementptr inbounds i32, ptr %src, i64 %index159  %wide.load = load <8 x i32>, ptr %1, align 4160  %2 = icmp slt <8 x i32> %wide.load, %broadcast.splat161  tail call void @llvm.masked.compressstore.v8i32(<8 x i32> %wide.load, ptr align 4 %monotonic.iv, <8 x i1> %2)162  %3 = bitcast <8 x i1> %2 to i8163  %4 = tail call range(i8 0, 9) i8 @llvm.ctpop.i8(i8 %3)164  %5 = shl nuw nsw i8 %4, 2165  %6 = zext nneg i8 %5 to i64166  %monotonic.add = getelementptr inbounds i8, ptr %monotonic.iv, i64 %6167  %index.next = add nuw i64 %index, 8168  %7 = icmp eq i64 %index.next, %n.vec169  br i1 %7, label %middle.block, label %vector.body170 171middle.block:                                     ; preds = %vector.body172  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count173  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader13174 175for.cond.cleanup:                                 ; preds = %for.inc, %middle.block, %entry176  ret void177 178for.body:                                         ; preds = %for.body.preheader13, %for.inc179  %indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ %indvars.iv.ph, %for.body.preheader13 ]180  %dst.addr.09 = phi ptr [ %dst.addr.1, %for.inc ], [ %dst.addr.09.ph, %for.body.preheader13 ]181  %arrayidx = getelementptr inbounds i32, ptr %src, i64 %indvars.iv182  %8 = load i32, ptr %arrayidx, align 4183  %cmp1 = icmp slt i32 %8, %c184  br i1 %cmp1, label %if.then, label %for.inc185 186if.then:                                          ; preds = %for.body187  %incdec.ptr = getelementptr inbounds i8, ptr %dst.addr.09, i64 4188  store i32 %8, ptr %dst.addr.09, align 4189  br label %for.inc190 191for.inc:                                          ; preds = %for.body, %if.then192  %dst.addr.1 = phi ptr [ %incdec.ptr, %if.then ], [ %dst.addr.09, %for.body ]193  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1194  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count195  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body196}197;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:198; CHECK: {{.*}}199