Try to passify buildbot
[oota-llvm.git] / test / Transforms / IndVarSimplify / strengthen-overflow.ll
1 ; RUN: opt < %s -indvars -S | FileCheck %s
2
3 define i32 @test.signed.add.0(i32* %array, i32 %length, i32 %init) {
4 ; CHECK-LABEL: @test.signed.add.0
5  entry:
6   %upper = icmp slt i32 %init, %length
7   br i1 %upper, label %loop, label %exit
8
9  loop:
10 ; CHECK-LABEL: loop
11   %civ = phi i32 [ %init, %entry ], [ %civ.inc, %latch ]
12   %civ.inc = add i32 %civ, 1
13 ; CHECK: %civ.inc = add nsw i32 %civ, 1
14   %cmp = icmp slt i32 %civ.inc, %length
15   br i1 %cmp, label %latch, label %break
16
17  latch:
18   store i32 0, i32* %array
19   %check = icmp slt i32 %civ.inc, %length
20   br i1 %check, label %loop, label %break
21
22  break:
23   ret i32 %civ.inc
24
25  exit:
26   ret i32 42
27 }
28
29 define i32 @test.signed.add.1(i32* %array, i32 %length, i32 %init) {
30 ; CHECK-LABEL: @test.signed.add.1
31  entry:
32   %upper = icmp sle i32 %init, %length
33   br i1 %upper, label %loop, label %exit
34
35  loop:
36 ; CHECK-LABEL: loop
37   %civ = phi i32 [ %init, %entry ], [ %civ.inc, %latch ]
38   %civ.inc = add i32 %civ, 1
39 ; CHECK: %civ.inc = add i32 %civ, 1
40   %cmp = icmp slt i32 %civ.inc, %length
41   br i1 %cmp, label %latch, label %break
42
43  latch:
44   store i32 0, i32* %array
45   %check = icmp slt i32 %civ.inc, %length
46   br i1 %check, label %loop, label %break
47
48  break:
49   ret i32 %civ.inc
50
51  exit:
52   ret i32 42
53 }
54
55 define i32 @test.unsigned.add.0(i32* %array, i32 %length, i32 %init) {
56 ; CHECK-LABEL: @test.unsigned.add.0
57  entry:
58   %upper = icmp ult i32 %init, %length
59   br i1 %upper, label %loop, label %exit
60
61  loop:
62 ; CHECK-LABEL: loop
63   %civ = phi i32 [ %init, %entry ], [ %civ.inc, %latch ]
64   %civ.inc = add i32 %civ, 1
65 ; CHECK: %civ.inc = add nuw i32 %civ, 1
66   %cmp = icmp slt i32 %civ.inc, %length
67   br i1 %cmp, label %latch, label %break
68
69  latch:
70   store i32 0, i32* %array
71   %check = icmp ult i32 %civ.inc, %length
72   br i1 %check, label %loop, label %break
73
74  break:
75   ret i32 %civ.inc
76
77  exit:
78   ret i32 42
79 }
80
81 define i32 @test.unsigned.add.1(i32* %array, i32 %length, i32 %init) {
82 ; CHECK-LABEL: @test.unsigned.add.1
83  entry:
84   %upper = icmp ule i32 %init, %length
85   br i1 %upper, label %loop, label %exit
86
87  loop:
88 ; CHECK-LABEL: loop
89   %civ = phi i32 [ %init, %entry ], [ %civ.inc, %latch ]
90   %civ.inc = add i32 %civ, 1
91 ; CHECK: %civ.inc = add i32 %civ, 1
92   %cmp = icmp slt i32 %civ.inc, %length
93   br i1 %cmp, label %latch, label %break
94
95  latch:
96   store i32 0, i32* %array
97   %check = icmp ult i32 %civ.inc, %length
98   br i1 %check, label %loop, label %break
99
100  break:
101   ret i32 %civ.inc
102
103  exit:
104   ret i32 42
105 }
106
107 !0 = !{i32 0, i32 2}
108 !1 = !{i32 0, i32 42}