blob: 7ea2dfc9779a4041505bf526c6fbd9c86616a42c [file] [edit]
; RUN: opt -force-target-supports-scalable-vectors -scalable-vectorization=always -passes=loop-vectorize -S %s | FileCheck %s
;
; vectorize.width and vectorize.scalable.disable metadata are used to force a fixed VF=4.
; -scalable-vectorization=always must not override scalable.disable and force a scalable VF.
;
; CHECK-LABEL: define void @repro(
; CHECK: vector.body:
; CHECK: load <4 x i8>
; CHECK: store <4 x i8>
define void @repro(ptr %out, ptr %in, i32 %tc) {
entry:
%start = zext i32 %tc to i64
br label %loop
loop:
%iv = phi i64 [ %start, %entry ], [ %next, %loop ]
%in.ptr = getelementptr inbounds i8, ptr %in, i64 %iv
%value = load i8, ptr %in.ptr, align 1
%sum = add i8 %value, 10
%out.ptr = getelementptr inbounds i8, ptr %out, i64 %iv
store i8 %sum, ptr %out.ptr, align 1
%next = add nsw i64 %iv, -1
%next32 = and i64 %next, 4294967295
%done = icmp eq i64 %next32, 0
br i1 %done, label %exit, label %loop, !llvm.loop !0
exit:
ret void
}
!0 = distinct !{!0, !1, !2, !3, !4}
!1 = !{!"llvm.loop.mustprogress"}
!2 = !{!"llvm.loop.vectorize.width", i32 4}
!3 = !{!"llvm.loop.interleave.count", i32 1}
!4 = !{!"llvm.loop.vectorize.scalable.disable"}