[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / LoopUnroll / AArch64 / partial.ll
blob8a1ea80c9d5b1c5cc10f6148574119b537201c93
1 ; RUN: opt < %s -S -loop-unroll -mtriple aarch64 -mcpu=cortex-a57 | FileCheck %s
3 ; Partial unroll 8 times for this loop.
4 define void @unroll1() nounwind {
5 entry:
6   br label %loop
8 loop:
9   %iv = phi i32 [ 0, %entry ], [ %inc, %loop ]
10   %inc = add i32 %iv, 1
11   %exitcnd = icmp uge i32 %inc, 1024
12   br i1 %exitcnd, label %exit, label %loop
14 exit:
15   ret void
18 ; CHECK:      add
19 ; CHECK-NEXT: add
20 ; CHECK-NEXT: add
21 ; CHECK-NEXT: add
22 ; CHECK-NEXT: add
23 ; CHECK-NEXT: add
24 ; CHECK-NEXT: add
25 ; CHECK-NEXT: add
26 ; CHECK-NEXT: icmp
28 ; Partial unroll 16 times for this loop.
29 define void @unroll2() nounwind {
30 entry:
31   br label %loop1
33 loop1:
34   %iv1 = phi i32 [ 0, %entry ], [ %inc1, %loop1.latch ]
35   br label %loop2.header
37 loop2.header:
38   br label %loop2
40 loop2:
41   %iv2 = phi i32 [ 0, %loop2.header ], [ %inc2, %loop2 ]
42   %inc2 = add i32 %iv2, 1
43   %exitcnd2 = icmp uge i32 %inc2, 1024
44   br i1 %exitcnd2, label %exit2, label %loop2
46 exit2:
47   br label %loop1.latch
49 loop1.latch:
50   %inc1 = add i32 %iv1, 1
51   %exitcnd1 = icmp uge i32 %inc1, 1024
52   br i1 %exitcnd2, label %exit, label %loop1
54 exit:
55   ret void
60 ; CHECK:      add
61 ; CHECK-NEXT: add
62 ; CHECK-NEXT: add
63 ; CHECK-NEXT: add
64 ; CHECK-NEXT: add
65 ; CHECK-NEXT: add
66 ; CHECK-NEXT: add
67 ; CHECK-NEXT: add
68 ; CHECK-NEXT: add
69 ; CHECK-NEXT: add
70 ; CHECK-NEXT: add
71 ; CHECK-NEXT: add
72 ; CHECK-NEXT: add
73 ; CHECK-NEXT: add
74 ; CHECK-NEXT: add
75 ; CHECK-NEXT: add
76 ; CHECK-NEXT: icmp