Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / Hexagon / loop_correctness.ll
blob35e7c90d1bb747ca64bfa1eeaa2bc38d055dad55
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -march=hexagon -O3 -hexagon-instsimplify=0 < %s | FileCheck %s
4 define void @f0(ptr nocapture %a0, i32 %a1, i32 %a2) #0 {
5 ; CHECK-LABEL: f0:
6 ; CHECK:       // %bb.0: // %b0
7 ; CHECK-NEXT:    {
8 ; CHECK-NEXT:     loop0(.LBB0_1,#3)
9 ; CHECK-NEXT:    }
10 ; CHECK-NEXT:    .p2align 4
11 ; CHECK-NEXT:  .LBB0_1: // Block address taken
12 ; CHECK-NEXT:    // %b2
13 ; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1
14 ; CHECK-NEXT:    {
15 ; CHECK-NEXT:     nop
16 ; CHECK-NEXT:     nop
17 ; CHECK-NEXT:    } :endloop0
18 ; CHECK-NEXT:  // %bb.2: // %b3
19 ; CHECK-NEXT:    {
20 ; CHECK-NEXT:     jumpr r31
21 ; CHECK-NEXT:    }
22 b0:
23   br label %b1
25 b1:                                               ; preds = %b0
26   br label %b2
28 b2:                                               ; preds = %b2, %b1
29   %v0 = phi i32 [ 0, %b1 ], [ %v1, %b2 ]
30   %v1 = add nsw i32 %v0, 1
31   %v2 = icmp slt i32 %v1, 3
32   br i1 %v2, label %b2, label %b3
34 b3:                                               ; preds = %b2
35   ret void
38 define void @f1(ptr nocapture %a0, i32 %a1, i32 %a2) #0 {
39 ; CHECK-LABEL: f1:
40 ; CHECK:       // %bb.0: // %b0
41 ; CHECK-NEXT:    {
42 ; CHECK-NEXT:     loop0(.LBB1_1,#2)
43 ; CHECK-NEXT:    }
44 ; CHECK-NEXT:    .p2align 4
45 ; CHECK-NEXT:  .LBB1_1: // Block address taken
46 ; CHECK-NEXT:    // %b2
47 ; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1
48 ; CHECK-NEXT:    {
49 ; CHECK-NEXT:     nop
50 ; CHECK-NEXT:     nop
51 ; CHECK-NEXT:    } :endloop0
52 ; CHECK-NEXT:  // %bb.2: // %b3
53 ; CHECK-NEXT:    {
54 ; CHECK-NEXT:     jumpr r31
55 ; CHECK-NEXT:    }
56 b0:
57   br label %b1
59 b1:                                               ; preds = %b0
60   br label %b2
62 b2:                                               ; preds = %b2, %b1
63   %v0 = phi i32 [ 0, %b1 ], [ %v1, %b2 ]
64   %v1 = add nsw i32 %v0, 2
65   %v2 = icmp slt i32 %v1, 3
66   br i1 %v2, label %b2, label %b3
68 b3:                                               ; preds = %b2
69   ret void
72 define void @f2(ptr nocapture %a0, i32 %a1, i32 %a2) #0 {
73 ; CHECK-LABEL: f2:
74 ; CHECK:       // %bb.0: // %b0
75 ; CHECK-NEXT:    {
76 ; CHECK-NEXT:     loop0(.LBB2_1,#1)
77 ; CHECK-NEXT:    }
78 ; CHECK-NEXT:    .p2align 4
79 ; CHECK-NEXT:  .LBB2_1: // Block address taken
80 ; CHECK-NEXT:    // %b2
81 ; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1
82 ; CHECK-NEXT:    {
83 ; CHECK-NEXT:     nop
84 ; CHECK-NEXT:     nop
85 ; CHECK-NEXT:    } :endloop0
86 ; CHECK-NEXT:  // %bb.2: // %b3
87 ; CHECK-NEXT:    {
88 ; CHECK-NEXT:     jumpr r31
89 ; CHECK-NEXT:    }
90 b0:
91   br label %b1
93 b1:                                               ; preds = %b0
94   br label %b2
96 b2:                                               ; preds = %b2, %b1
97   %v0 = phi i32 [ 0, %b1 ], [ %v1, %b2 ]
98   %v1 = add nsw i32 %v0, 3
99   %v2 = icmp slt i32 %v1, 3
100   br i1 %v2, label %b2, label %b3
102 b3:                                               ; preds = %b2
103   ret void
106 define void @f3(ptr nocapture %a0, i32 %a1, i32 %a2) #0 {
107 ; CHECK-LABEL: f3:
108 ; CHECK:       // %bb.0: // %b0
109 ; CHECK-NEXT:    {
110 ; CHECK-NEXT:     loop0(.LBB3_1,#4)
111 ; CHECK-NEXT:    }
112 ; CHECK-NEXT:    .p2align 4
113 ; CHECK-NEXT:  .LBB3_1: // Block address taken
114 ; CHECK-NEXT:    // %b2
115 ; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1
116 ; CHECK-NEXT:    {
117 ; CHECK-NEXT:     nop
118 ; CHECK-NEXT:     nop
119 ; CHECK-NEXT:    } :endloop0
120 ; CHECK-NEXT:  // %bb.2: // %b3
121 ; CHECK-NEXT:    {
122 ; CHECK-NEXT:     jumpr r31
123 ; CHECK-NEXT:    }
125   br label %b1
127 b1:                                               ; preds = %b0
128   br label %b2
130 b2:                                               ; preds = %b2, %b1
131   %v0 = phi i32 [ 0, %b1 ], [ %v1, %b2 ]
132   %v1 = add nsw i32 %v0, 1
133   %v2 = icmp sle i32 %v1, 3
134   br i1 %v2, label %b2, label %b3
136 b3:                                               ; preds = %b2
137   ret void
140 define void @f4(ptr nocapture %a0, i32 %a1, i32 %a2) #0 {
141 ; CHECK-LABEL: f4:
142 ; CHECK:       // %bb.0: // %b0
143 ; CHECK-NEXT:    {
144 ; CHECK-NEXT:     loop0(.LBB4_1,#2)
145 ; CHECK-NEXT:    }
146 ; CHECK-NEXT:    .p2align 4
147 ; CHECK-NEXT:  .LBB4_1: // Block address taken
148 ; CHECK-NEXT:    // %b2
149 ; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1
150 ; CHECK-NEXT:    {
151 ; CHECK-NEXT:     nop
152 ; CHECK-NEXT:     nop
153 ; CHECK-NEXT:    } :endloop0
154 ; CHECK-NEXT:  // %bb.2: // %b3
155 ; CHECK-NEXT:    {
156 ; CHECK-NEXT:     jumpr r31
157 ; CHECK-NEXT:    }
159   br label %b1
161 b1:                                               ; preds = %b0
162   br label %b2
164 b2:                                               ; preds = %b2, %b1
165   %v0 = phi i32 [ 0, %b1 ], [ %v1, %b2 ]
166   %v1 = add nsw i32 %v0, 2
167   %v2 = icmp sle i32 %v1, 3
168   br i1 %v2, label %b2, label %b3
170 b3:                                               ; preds = %b2
171   ret void
174 define void @f5(ptr nocapture %a0, i32 %a1, i32 %a2) #0 {
175 ; CHECK-LABEL: f5:
176 ; CHECK:       // %bb.0: // %b0
177 ; CHECK-NEXT:    {
178 ; CHECK-NEXT:     loop0(.LBB5_1,#2)
179 ; CHECK-NEXT:    }
180 ; CHECK-NEXT:    .p2align 4
181 ; CHECK-NEXT:  .LBB5_1: // Block address taken
182 ; CHECK-NEXT:    // %b2
183 ; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1
184 ; CHECK-NEXT:    {
185 ; CHECK-NEXT:     nop
186 ; CHECK-NEXT:     nop
187 ; CHECK-NEXT:    } :endloop0
188 ; CHECK-NEXT:  // %bb.2: // %b3
189 ; CHECK-NEXT:    {
190 ; CHECK-NEXT:     jumpr r31
191 ; CHECK-NEXT:    }
193   br label %b1
195 b1:                                               ; preds = %b0
196   br label %b2
198 b2:                                               ; preds = %b2, %b1
199   %v0 = phi i32 [ 0, %b1 ], [ %v1, %b2 ]
200   %v1 = add nsw i32 %v0, 3
201   %v2 = icmp sle i32 %v1, 3
202   br i1 %v2, label %b2, label %b3
204 b3:                                               ; preds = %b2
205   ret void
208 attributes #0 = { nounwind }