1; REQUIRES: asserts 2; RUN: opt -passes=loop-vectorize -mtriple=arm64-apple-iphoneos -pass-remarks-analysis=loop-vectorize -debug-only=loop-vectorize -S < %s 2>&1 | FileCheck %s 3 4; Specify a large unsafe vectorization factor of 32 that gets clamped to 16. 5 6; CHECK: LV: User VF=32 is unsafe, clamping to max safe VF=16. 7; CHECK: remark: <unknown>:0:0: User-specified vectorization factor 32 is unsafe, clamping to maximum safe vectorization factor 16 8; CHECK: LV: Selecting VF: 16. 9; CHECK-LABEL: @test 10; CHECK: <16 x i64> 11define void @test(ptr nocapture %a, ptr nocapture readonly %b) { 12entry: 13 br label %loop.header 14 15loop.header: 16 %iv = phi i64 [ 0, %entry ], [ %iv.next, %latch ] 17 %arrayidx = getelementptr inbounds i64, ptr %a, i64 %iv 18 %0 = load i64, ptr %arrayidx, align 4 19 %arrayidx2 = getelementptr inbounds i64, ptr %b, i64 %iv 20 %1 = load i64, ptr %arrayidx2, align 4 21 %add = add nsw i64 %1, %0 22 %2 = add nuw nsw i64 %iv, 16 23 %arrayidx5 = getelementptr inbounds i64, ptr %a, i64 %2 24 %c = icmp eq i64 %1, 120 25 br i1 %c, label %then, label %latch 26 27then: 28 store i64 %add, ptr %arrayidx5, align 4 29 br label %latch 30 31latch: 32 %iv.next = add nuw nsw i64 %iv, 1 33 %exitcond.not = icmp eq i64 %iv.next, 1024 34 br i1 %exitcond.not, label %exit, label %loop.header, !llvm.loop !0 35 36exit: 37 ret void 38} 39 40!0 = !{!0, !1, !2} 41!1 = !{!"llvm.loop.vectorize.width", i64 32} 42!2 = !{!"llvm.loop.vectorize.enable", i1 true} 43