blob: f60b6b1060487217f183ee03e9996ef39c17516a [file]
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --filter-out-after "^middle.block" --version 6
; RUN: opt -passes=loop-vectorize -force-vector-width="vscale x 4" \
; RUN: -vplan-print-after=printFinalVPlan -disable-output %s 2>&1 \
; RUN: | FileCheck --strict-whitespace %s
define void @scalar_intrinsic_print(i64 %x, ptr %p) {
; CHECK-LABEL: VPlan for loop in 'scalar_intrinsic_print'
; CHECK: VPlan 'Final VPlan for VF={vscale x 4},UF={1}' {
; CHECK-NEXT: Live-in ir<128> = original trip-count
; CHECK-EMPTY:
; CHECK-NEXT: ir-bb<entry>:
; CHECK-NEXT: EMIT-SCALAR vp<[[VP2:%[0-9]+]]> = call i64 @llvm.vscale(){{$}}
; CHECK-NEXT: EMIT vp<[[VP3:%[0-9]+]]> = shl nuw vp<[[VP2]]>, ir<2>
; CHECK-NEXT: EMIT vp<%min.iters.check> = icmp ult ir<128>, vp<[[VP3]]>
; CHECK-NEXT: EMIT branch-on-cond vp<%min.iters.check>
; CHECK-NEXT: Successor(s): ir-bb<scalar.ph>, vector.ph
; CHECK-EMPTY:
; CHECK-NEXT: vector.ph:
; CHECK-NEXT: EMIT vp<%n.mod.vf> = urem ir<128>, vp<[[VP3]]>
; CHECK-NEXT: EMIT vp<%n.vec> = sub ir<128>, vp<%n.mod.vf>
; CHECK-NEXT: EMIT vp<[[VP5:%[0-9]+]]> = broadcast ir<%x>
; CHECK-NEXT: EMIT vp<[[VP6:%[0-9]+]]> = step-vector i64
; CHECK-NEXT: EMIT vp<[[VP7:%[0-9]+]]> = broadcast vp<[[VP3]]>
; CHECK-NEXT: Successor(s): vector.body
; CHECK-EMPTY:
; CHECK-NEXT: vector.body:
; CHECK-NEXT: EMIT-SCALAR vp<%index> = phi [ ir<0>, vector.ph ], [ vp<%index.next>, vector.body ]
; CHECK-NEXT: WIDEN-PHI vp<[[VP8:%[0-9]+]]> = phi [ vp<[[VP6]]>, vector.ph ], [ vp<%vec.ind.next>, vector.body ]
; CHECK-NEXT: EMIT vp<%index.next> = add nuw vp<%index>, vp<[[VP3]]>
; CHECK-NEXT: EMIT vp<%vec.ind.next> = add nuw nsw vp<[[VP8]]>, vp<[[VP7]]>
; CHECK-NEXT: EMIT vp<[[VP9:%[0-9]+]]> = icmp eq vp<%index.next>, vp<%n.vec>
; CHECK-NEXT: EMIT branch-on-cond vp<[[VP9]]>
; CHECK-NEXT: Successor(s): middle.block, vector.body
; CHECK-EMPTY:
; CHECK-NEXT: middle.block:
;
entry:
br label %loop
loop:
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
%smin = call i64 @llvm.smin.i64(i64 %x, i64 %iv)
store i64 %smin, ptr %p
%iv.next = add nuw nsw i64 %iv, 1
%ec = icmp eq i64 %iv.next, 128
br i1 %ec, label %exit, label %loop
exit:
ret void
}