[ValueTracking] De-pessimize isImpliedCondition around unsigned compares
[oota-llvm.git] / test / Transforms / LoopUnroll / full-unroll-bad-cost.ll
1 ; RUN: opt -S -loop-unroll < %s | FileCheck %s
2
3 ; LLVM should not try to fully unroll this loop.
4
5 declare void @f()
6 declare void @g()
7 declare void @h()
8
9 define void @trivial_loop() {
10 ; CHECK-LABEL: @trivial_loop(
11  entry:
12   br label %loop
13
14  loop:
15   %idx = phi i32 [ 0, %entry ], [ %idx.inc, %loop ]
16   %idx.inc = add i32 %idx, 1
17   call void @f()
18   call void @g()
19   call void @h()
20   call void @f()
21   call void @g()
22   call void @h()
23   call void @f()
24   call void @g()
25   call void @h()
26   call void @f()
27   call void @g()
28   call void @h()
29   call void @f()
30   call void @g()
31   call void @h()
32   %be = icmp slt i32 %idx, 268435456
33   br i1 %be, label %loop, label %exit
34
35 ; CHECK: loop:
36 ; CHECK-NEXT:  %idx = phi i32 [ 0, %entry ], [ %idx.inc, %loop ]
37 ; CHECK-NEXT:  %idx.inc = add i32 %idx, 1
38 ; CHECK-NEXT:  call void @f()
39 ; CHECK-NEXT:  call void @g()
40 ; CHECK-NEXT:  call void @h()
41 ; CHECK-NEXT:  call void @f()
42 ; CHECK-NEXT:  call void @g()
43 ; CHECK-NEXT:  call void @h()
44 ; CHECK-NEXT:  call void @f()
45 ; CHECK-NEXT:  call void @g()
46 ; CHECK-NEXT:  call void @h()
47 ; CHECK-NEXT:  call void @f()
48 ; CHECK-NEXT:  call void @g()
49 ; CHECK-NEXT:  call void @h()
50 ; CHECK-NEXT:  call void @f()
51 ; CHECK-NEXT:  call void @g()
52 ; CHECK-NEXT:  call void @h()
53 ; CHECK-NEXT:  %be = icmp slt i32 %idx, 268435456
54 ; CHECK-NEXT:  br i1 %be, label %loop, label %exit
55
56  exit:
57   ret void
58 }