xref: /llvm-project/llvm/test/Transforms/LoopVectorize/AArch64/unsafe-vf-hint-remark.ll (revision 2a859b20146108af84c741a509dc0e534e045768)
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