brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.2 KiB · 99139da Raw
127 lines · plain
1; REQUIRES: asserts2; RUN: opt -passes=loop-vectorize -mtriple riscv64-linux-gnu \3; RUN:   -mattr=+v,+d -debug-only=loop-vectorize,vplan --disable-output \4; RUN:   -force-vector-width=1 -prefer-predicate-over-epilogue=scalar-epilogue \5; RUN:   -S < %s 2>&1 | FileCheck %s --check-prefix=CHECK-SCALAR6; RUN: opt -passes=loop-vectorize -mtriple riscv64-linux-gnu \7; RUN:   -mattr=+v,+d -debug-only=loop-vectorize,vplan --disable-output \8; RUN:   -riscv-v-register-bit-width-lmul=1 \9; RUN:   -S < %s 2>&1 | FileCheck %s --check-prefix=CHECK-LMUL110; RUN: opt -passes=loop-vectorize -mtriple riscv64-linux-gnu \11; RUN:   -mattr=+v,+d -debug-only=loop-vectorize,vplan --disable-output \12; RUN:   -riscv-v-register-bit-width-lmul=2 \13; RUN:   -S < %s 2>&1 | FileCheck %s --check-prefix=CHECK-LMUL214; RUN: opt -passes=loop-vectorize -mtriple riscv64-linux-gnu \15; RUN:   -mattr=+v,+d -debug-only=loop-vectorize,vplan --disable-output \16; RUN:   -riscv-v-register-bit-width-lmul=4 \17; RUN:   -S < %s 2>&1 | FileCheck %s --check-prefix=CHECK-LMUL418; RUN: opt -passes=loop-vectorize -mtriple riscv64-linux-gnu \19; RUN:   -mattr=+v,+d -debug-only=loop-vectorize,vplan --disable-output \20; RUN:   -riscv-v-register-bit-width-lmul=8 \21; RUN:   -S < %s 2>&1 | FileCheck %s --check-prefix=CHECK-LMUL822 23define void @add(ptr noalias nocapture readonly %src1, ptr noalias nocapture readonly %src2, i32 signext %size, ptr noalias nocapture writeonly %result) {24; CHECK-SCALAR-LABEL: add25; CHECK-SCALAR:      LV(REG): VF = 126; CHECK-SCALAR-NEXT: LV(REG): Found max usage: 2 item27; CHECK-SCALAR-NEXT: LV(REG): RegisterClass: RISCV::GPRRC, 3 registers28; CHECK-SCALAR-NEXT: LV(REG): RegisterClass: RISCV::FPRRC, 2 registers29; CHECK-SCALAR-NEXT: LV(REG): Found invariant usage: 1 item30; CHECK-SCALAR-NEXT: LV(REG): RegisterClass: RISCV::GPRRC, 1 registers31; CHECK-LMUL1-LABEL: add32; CHECK-LMUL1:       LV(REG): VF = vscale x 233; CHECK-LMUL1-NEXT:  LV(REG): Found max usage: 2 item34; CHECK-LMUL1-NEXT:  LV(REG): RegisterClass: RISCV::GPRRC, 6 registers35; CHECK-LMUL1-NEXT:  LV(REG): RegisterClass: RISCV::VRRC, 2 registers36; CHECK-LMUL1-NEXT:  LV(REG): Found invariant usage: 1 item37; CHECK-LMUL1-NEXT:  LV(REG): RegisterClass: RISCV::GPRRC, 1 registers38; CHECK-LMUL2-LABEL: add39; CHECK-LMUL2:       LV(REG): VF = vscale x 440; CHECK-LMUL2-NEXT:  LV(REG): Found max usage: 2 item41; CHECK-LMUL2-NEXT:  LV(REG): RegisterClass: RISCV::GPRRC, 6 registers42; CHECK-LMUL2-NEXT:  LV(REG): RegisterClass: RISCV::VRRC, 4 registers43; CHECK-LMUL2-NEXT:  LV(REG): Found invariant usage: 1 item44; CHECK-LMUL2-NEXT:  LV(REG): RegisterClass: RISCV::GPRRC, 1 registers45; CHECK-LMUL4-LABEL: add46; CHECK-LMUL4:       LV(REG): VF = vscale x 847; CHECK-LMUL4-NEXT:  LV(REG): Found max usage: 2 item48; CHECK-LMUL4-NEXT:  LV(REG): RegisterClass: RISCV::GPRRC, 6 registers49; CHECK-LMUL4-NEXT:  LV(REG): RegisterClass: RISCV::VRRC, 8 registers50; CHECK-LMUL4-NEXT:  LV(REG): Found invariant usage: 1 item51; CHECK-LMUL4-NEXT:  LV(REG): RegisterClass: RISCV::GPRRC, 1 registers52; CHECK-LMUL8-LABEL: add53; CHECK-LMUL8:       LV(REG): VF = vscale x 1654; CHECK-LMUL8-NEXT:  LV(REG): Found max usage: 2 item55; CHECK-LMUL8-NEXT:  LV(REG): RegisterClass: RISCV::GPRRC, 6 registers56; CHECK-LMUL8-NEXT:  LV(REG): RegisterClass: RISCV::VRRC, 16 registers57; CHECK-LMUL8-NEXT:  LV(REG): Found invariant usage: 1 item58; CHECK-LMUL8-NEXT:  LV(REG): RegisterClass: RISCV::GPRRC, 1 registers59 60entry:61  %conv = zext i32 %size to i6462  %cmp10.not = icmp eq i32 %size, 063  br i1 %cmp10.not, label %for.cond.cleanup, label %for.body64 65for.cond.cleanup:66  ret void67 68for.body:69  %i.011 = phi i64 [ %add4, %for.body ], [ 0, %entry ]70  %arrayidx = getelementptr inbounds float, ptr %src1, i64 %i.01171  %0 = load float, ptr %arrayidx, align 472  %arrayidx2 = getelementptr inbounds float, ptr %src2, i64 %i.01173  %1 = load float, ptr %arrayidx2, align 474  %add = fadd float %0, %175  %arrayidx3 = getelementptr inbounds float, ptr %result, i64 %i.01176  store float %add, ptr %arrayidx3, align 477  %add4 = add nuw nsw i64 %i.011, 178  %exitcond.not = icmp eq i64 %add4, %conv79  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body80}81 82define void @goo(ptr nocapture noundef %a, i32 noundef signext %n) {83; CHECK-SCALAR-LABEL: goo84; CHECK-SCALAR:      LV(REG): VF = 185; CHECK-SCALAR-NEXT: LV(REG): Found max usage: 1 item86; CHECK-SCALAR-NEXT: LV(REG): RegisterClass: RISCV::GPRRC, 3 registers87; CHECK-LMUL1:       LV(REG): VF = vscale x 288; CHECK-LMUL1-NEXT:  LV(REG): Found max usage: 2 item89; CHECK-LMUL1-NEXT:  LV(REG): RegisterClass: RISCV::GPRRC, 6 registers90; CHECK-LMUL1-NEXT:  LV(REG): RegisterClass: RISCV::VRRC, 2 registers91; CHECK-LMUL2:       LV(REG): VF = vscale x 492; CHECK-LMUL2-NEXT:  LV(REG): Found max usage: 2 item93; CHECK-LMUL2-NEXT:  LV(REG): RegisterClass: RISCV::GPRRC, 6 registers94; CHECK-LMUL2-NEXT:  LV(REG): RegisterClass: RISCV::VRRC, 4 registers95; CHECK-LMUL4:       LV(REG): VF = vscale x 896; CHECK-LMUL4-NEXT:  LV(REG): Found max usage: 2 item97; CHECK-LMUL4-NEXT:  LV(REG): RegisterClass: RISCV::GPRRC, 6 registers98; CHECK-LMUL4-NEXT:  LV(REG): RegisterClass: RISCV::VRRC, 8 registers99; CHECK-LMUL8:       LV(REG): VF = vscale x 16100; CHECK-LMUL8-NEXT:  LV(REG): Found max usage: 2 item101; CHECK-LMUL8-NEXT:  LV(REG): RegisterClass: RISCV::GPRRC, 6 registers102; CHECK-LMUL8-NEXT:  LV(REG): RegisterClass: RISCV::VRRC, 16 registers103entry:104  %cmp3 = icmp sgt i32 %n, 0105  br i1 %cmp3, label %for.body.preheader, label %for.cond.cleanup106 107for.body.preheader:                               ; preds = %entry108  %wide.trip.count = zext i32 %n to i64109  br label %for.body110 111for.cond.cleanup.loopexit:                        ; preds = %for.body112  br label %for.cond.cleanup113 114for.cond.cleanup:                                 ; preds = %for.cond.cleanup.loopexit, %entry115  ret void116 117for.body:                                         ; preds = %for.body.preheader, %for.body118  %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]119  %arrayidx = getelementptr inbounds ptr, ptr %a, i64 %indvars.iv120  %0 = load ptr, ptr %arrayidx, align 8121  %add.ptr = getelementptr inbounds i32, ptr %0, i64 1122  store ptr %add.ptr, ptr %arrayidx, align 8123  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1124  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count125  br i1 %exitcond.not, label %for.cond.cleanup.loopexit, label %for.body126}127