xref: /llvm-project/llvm/test/Transforms/LoopVectorize/VE/disable_lv.ll (revision 7d7577256b76e4293f455b8093504d5f7044ab4b)
1be51fa45SRoman Lebedev; RUN: opt < %s -passes=loop-vectorize -mtriple=ve-linux -S | FileCheck %s -check-prefix=VE
2be51fa45SRoman Lebedev; RUN: opt < %s -passes=loop-vectorize -mtriple=x86_64-pc_linux -mcpu=core-avx2 -S | FileCheck %s -check-prefix=AVX
3d3b33a78SSimon Moll
4d3b33a78SSimon Moll; Make sure LV does not trigger for VE on an appealing loop that vectorizes for x86 AVX.
5d3b33a78SSimon Moll
6d3b33a78SSimon Moll; TODO: Remove this test once VE vector isel is deemed stable.
7d3b33a78SSimon Moll
8d3b33a78SSimon Moll; VE-NOT: llvm.loop.isvectorized
9d3b33a78SSimon Moll; AVX: llvm.loop.isvectorized
10d3b33a78SSimon Moll
11*7d757725SNikita Popovdefine dso_local void @foo(ptr noalias nocapture %A, ptr noalias nocapture readonly %B, i32 signext %n) local_unnamed_addr {
12d3b33a78SSimon Mollentry:
13d3b33a78SSimon Moll  %cmp = icmp sgt i32 %n, 0
14d3b33a78SSimon Moll  br i1 %cmp, label %omp.inner.for.body.preheader, label %simd.if.end
15d3b33a78SSimon Moll
16d3b33a78SSimon Mollomp.inner.for.body.preheader:                     ; preds = %entry
17d3b33a78SSimon Moll  %wide.trip.count = zext i32 %n to i64
18d3b33a78SSimon Moll  br label %omp.inner.for.body
19d3b33a78SSimon Moll
20d3b33a78SSimon Mollomp.inner.for.body:                               ; preds = %omp.inner.for.body.preheader, %omp.inner.for.body
21d3b33a78SSimon Moll  %indvars.iv = phi i64 [ 0, %omp.inner.for.body.preheader ], [ %indvars.iv.next, %omp.inner.for.body ]
22*7d757725SNikita Popov  %arrayidx = getelementptr inbounds i32, ptr %B, i64 %indvars.iv
23*7d757725SNikita Popov  %0 = load i32, ptr %arrayidx, align 4, !llvm.access.group !6
24d3b33a78SSimon Moll  %mul6 = mul nsw i32 %0, 3
25*7d757725SNikita Popov  %arrayidx8 = getelementptr inbounds i32, ptr %A, i64 %indvars.iv
26*7d757725SNikita Popov  store i32 %mul6, ptr %arrayidx8, align 4, !llvm.access.group !6
27d3b33a78SSimon Moll  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
28d3b33a78SSimon Moll  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
29d3b33a78SSimon Moll  br i1 %exitcond.not, label %simd.if.end, label %omp.inner.for.body, !llvm.loop !7
30d3b33a78SSimon Moll
31d3b33a78SSimon Mollsimd.if.end:                                      ; preds = %omp.inner.for.body, %entry
32d3b33a78SSimon Moll  ret void
33d3b33a78SSimon Moll}
34d3b33a78SSimon Moll
35d3b33a78SSimon Moll!6 = distinct !{}
36d3b33a78SSimon Moll!7 = distinct !{!7, !8, !9}
37d3b33a78SSimon Moll!8 = !{!"llvm.loop.parallel_accesses", !6}
38d3b33a78SSimon Moll!9 = !{!"llvm.loop.vectorize.enable", i1 true}
39