xref: /llvm-project/llvm/test/Transforms/LoopVectorize/RISCV/unroll-in-loop-vectorizer.ll (revision 7d7577256b76e4293f455b8093504d5f7044ab4b)
1a9486a40SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2be51fa45SRoman Lebedev; RUN: opt -S -mtriple=riscv64 -mattr=+v -passes=loop-vectorize -scalable-vectorization=off -riscv-v-vector-bits-min=0 < %s | FileCheck %s
3a9486a40SCraig Topper
4a9486a40SCraig Topper; Make sure we don't unroll scalar loops in the loop vectorizer.
5a9486a40SCraig Topper;
6*7d757725SNikita Popovdefine void @small_loop(ptr nocapture %inArray, i32 %size) nounwind {
7a9486a40SCraig Topper; CHECK-LABEL: @small_loop(
8a9486a40SCraig Topper; CHECK-NEXT:  entry:
9a9486a40SCraig Topper; CHECK-NEXT:    [[TMP0:%.*]] = icmp sgt i32 [[SIZE:%.*]], 0
10a9486a40SCraig Topper; CHECK-NEXT:    br i1 [[TMP0]], label [[LOOP_PREHEADER:%.*]], label [[EXIT:%.*]]
11a9486a40SCraig Topper; CHECK:       loop.preheader:
12a9486a40SCraig Topper; CHECK-NEXT:    br label [[LOOP:%.*]]
13a9486a40SCraig Topper; CHECK:       loop:
14a9486a40SCraig Topper; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ [[IV1:%.*]], [[LOOP]] ], [ 0, [[LOOP_PREHEADER]] ]
15*7d757725SNikita Popov; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i32, ptr [[INARRAY:%.*]], i32 [[IV]]
16*7d757725SNikita Popov; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 4
17a9486a40SCraig Topper; CHECK-NEXT:    [[TMP3:%.*]] = add nsw i32 [[TMP2]], 6
18*7d757725SNikita Popov; CHECK-NEXT:    store i32 [[TMP3]], ptr [[TMP1]], align 4
19a9486a40SCraig Topper; CHECK-NEXT:    [[IV1]] = add i32 [[IV]], 1
20a9486a40SCraig Topper; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 [[IV1]], [[SIZE]]
21a9486a40SCraig Topper; CHECK-NEXT:    br i1 [[COND]], label [[EXIT_LOOPEXIT:%.*]], label [[LOOP]]
22a9486a40SCraig Topper; CHECK:       exit.loopexit:
23a9486a40SCraig Topper; CHECK-NEXT:    br label [[EXIT]]
24a9486a40SCraig Topper; CHECK:       exit:
25a9486a40SCraig Topper; CHECK-NEXT:    ret void
26a9486a40SCraig Topper;
27a9486a40SCraig Topperentry:
28a9486a40SCraig Topper  %0 = icmp sgt i32 %size, 0
29a9486a40SCraig Topper  br i1 %0, label %loop, label %exit
30a9486a40SCraig Topper
31a9486a40SCraig Topperloop:                                          ; preds = %entry, %loop
32a9486a40SCraig Topper  %iv = phi i32 [ %iv1, %loop ], [ 0, %entry ]
33*7d757725SNikita Popov  %1 = getelementptr inbounds i32, ptr %inArray, i32 %iv
34*7d757725SNikita Popov  %2 = load i32, ptr %1, align 4
35a9486a40SCraig Topper  %3 = add nsw i32 %2, 6
36*7d757725SNikita Popov  store i32 %3, ptr %1, align 4
37a9486a40SCraig Topper  %iv1 = add i32 %iv, 1
38a9486a40SCraig Topper  %cond = icmp eq i32 %iv1, %size
39a9486a40SCraig Topper  br i1 %cond, label %exit, label %loop
40a9486a40SCraig Topper
41a9486a40SCraig Topperexit:                                         ; preds = %loop, %entry
42a9486a40SCraig Topper  ret void
43a9486a40SCraig Topper}
44