[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / Hexagon / loop_correctness.ll
blobdf2c3c5814b4557d0ba574f8598bc819d378ea94
1 ; RUN: llc -march=hexagon -O3 < %s | FileCheck %s
3 ; CHECK-LABEL: f0:
4 ; CHECK: loop0(.LBB{{[0-9]+}}_{{[0-9]+}},#3)
5 ; CHECK: endloop0
6 define void @f0(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
7 b0:
8   br label %b1
10 b1:                                               ; preds = %b0
11   br label %b2
13 b2:                                               ; preds = %b2, %b1
14   %v0 = phi i32 [ 0, %b1 ], [ %v1, %b2 ]
15   %v1 = add nsw i32 %v0, 1
16   %v2 = icmp slt i32 %v1, 3
17   br i1 %v2, label %b2, label %b3
19 b3:                                               ; preds = %b2
20   ret void
23 ; CHECK-LABEL: f1:
24 ; CHECK: loop0(.LBB{{[0-9]+}}_{{[0-9]+}},#2)
25 ; CHECK: endloop0
26 define void @f1(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
27 b0:
28   br label %b1
30 b1:                                               ; preds = %b0
31   br label %b2
33 b2:                                               ; preds = %b2, %b1
34   %v0 = phi i32 [ 0, %b1 ], [ %v1, %b2 ]
35   %v1 = add nsw i32 %v0, 2
36   %v2 = icmp slt i32 %v1, 3
37   br i1 %v2, label %b2, label %b3
39 b3:                                               ; preds = %b2
40   ret void
43 ; CHECK-LABEL: f2:
44 ; CHECK: loop0(.LBB{{[0-9]+}}_{{[0-9]+}},#1)
45 ; CHECK: endloop0
46 define void @f2(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
47 b0:
48   br label %b1
50 b1:                                               ; preds = %b0
51   br label %b2
53 b2:                                               ; preds = %b2, %b1
54   %v0 = phi i32 [ 0, %b1 ], [ %v1, %b2 ]
55   %v1 = add nsw i32 %v0, 3
56   %v2 = icmp slt i32 %v1, 3
57   br i1 %v2, label %b2, label %b3
59 b3:                                               ; preds = %b2
60   ret void
63 ; CHECK-LABEL: f3:
64 ; CHECK: loop0(.LBB{{[0-9]+}}_{{[0-9]+}},#4)
65 ; CHECK: endloop0
66 define void @f3(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
67 b0:
68   br label %b1
70 b1:                                               ; preds = %b0
71   br label %b2
73 b2:                                               ; preds = %b2, %b1
74   %v0 = phi i32 [ 0, %b1 ], [ %v1, %b2 ]
75   %v1 = add nsw i32 %v0, 1
76   %v2 = icmp sle i32 %v1, 3
77   br i1 %v2, label %b2, label %b3
79 b3:                                               ; preds = %b2
80   ret void
83 ; CHECK-LABEL: f4:
84 ; CHECK: loop0(.LBB{{[0-9]+}}_{{[0-9]+}},#2)
85 ; CHECK: endloop0
86 define void @f4(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
87 b0:
88   br label %b1
90 b1:                                               ; preds = %b0
91   br label %b2
93 b2:                                               ; preds = %b2, %b1
94   %v0 = phi i32 [ 0, %b1 ], [ %v1, %b2 ]
95   %v1 = add nsw i32 %v0, 2
96   %v2 = icmp sle i32 %v1, 3
97   br i1 %v2, label %b2, label %b3
99 b3:                                               ; preds = %b2
100   ret void
103 ; CHECK-LABEL: f5:
104 ; CHECK: loop0(.LBB{{[0-9]+}}_{{[0-9]+}},#2)
105 ; CHECK: endloop0
106 define void @f5(i8* nocapture %a0, i32 %a1, i32 %a2) #0 {
108   br label %b1
110 b1:                                               ; preds = %b0
111   br label %b2
113 b2:                                               ; preds = %b2, %b1
114   %v0 = phi i32 [ 0, %b1 ], [ %v1, %b2 ]
115   %v1 = add nsw i32 %v0, 3
116   %v2 = icmp sle i32 %v1, 3
117   br i1 %v2, label %b2, label %b3
119 b3:                                               ; preds = %b2
120   ret void
123 attributes #0 = { nounwind }