[ARM] Better OR's for MVE compares
[llvm-core.git] / test / Transforms / IndVarSimplify / lftr-pr20680.ll
blob096501e86b1aac60c661018f0ce5d8531718da89
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -indvars -S | FileCheck %s
4 ; Provide legal integer types.
5 target datalayout = "n8:16:32:64"
8 @a = common global i32 0, align 4
9 @c = common global i32 0, align 4
10 @b = common global i32 0, align 4
12 define void @f() {
13 ; CHECK-LABEL: @f(
14 ; CHECK-NEXT:  entry:
15 ; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* @a, align 4
16 ; CHECK-NEXT:    [[TOBOOL2:%.*]] = icmp eq i32 [[TMP0]], 0
17 ; CHECK-NEXT:    [[TMP1:%.*]] = load i32, i32* @a, align 4
18 ; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i32 [[TMP1]], 0
19 ; CHECK-NEXT:    br label [[FOR_COND2_PREHEADER:%.*]]
20 ; CHECK:       for.cond2.preheader:
21 ; CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i32 [ [[INDVARS_IV_NEXT:%.*]], [[FOR_INC13:%.*]] ], [ -14, [[ENTRY:%.*]] ]
22 ; CHECK-NEXT:    br i1 [[TOBOOL2]], label [[FOR_INC13]], label [[FOR_BODY3_LR_PH:%.*]]
23 ; CHECK:       for.body3.lr.ph:
24 ; CHECK-NEXT:    [[TMP2:%.*]] = add nsw i32 [[INDVARS_IV]], 1
25 ; CHECK-NEXT:    [[TMP3:%.*]] = icmp ult i32 [[TMP2]], 3
26 ; CHECK-NEXT:    [[DIV:%.*]] = select i1 [[TMP3]], i32 [[INDVARS_IV]], i32 0
27 ; CHECK-NEXT:    br i1 false, label [[FOR_BODY3_LR_PH_SPLIT_US:%.*]], label [[FOR_BODY3_LR_PH_FOR_BODY3_LR_PH_SPLIT_CRIT_EDGE:%.*]]
28 ; CHECK:       for.body3.lr.ph.for.body3.lr.ph.split_crit_edge:
29 ; CHECK-NEXT:    br label [[FOR_BODY3_LR_PH_SPLIT:%.*]]
30 ; CHECK:       for.body3.lr.ph.split.us:
31 ; CHECK-NEXT:    br i1 [[TOBOOL]], label [[FOR_BODY3_LR_PH_SPLIT_US_SPLIT_US:%.*]], label [[FOR_BODY3_LR_PH_SPLIT_US_FOR_BODY3_LR_PH_SPLIT_US_SPLIT_CRIT_EDGE:%.*]]
32 ; CHECK:       for.body3.lr.ph.split.us.for.body3.lr.ph.split.us.split_crit_edge:
33 ; CHECK-NEXT:    br label [[FOR_BODY3_LR_PH_SPLIT_US_SPLIT:%.*]]
34 ; CHECK:       for.body3.lr.ph.split.us.split.us:
35 ; CHECK-NEXT:    br label [[FOR_BODY3_US_US:%.*]]
36 ; CHECK:       for.body3.us.us:
37 ; CHECK-NEXT:    br i1 true, label [[COND_FALSE_US_US:%.*]], label [[COND_END_US_US:%.*]]
38 ; CHECK:       cond.false.us.us:
39 ; CHECK-NEXT:    br label [[COND_END_US_US]]
40 ; CHECK:       cond.end.us.us:
41 ; CHECK-NEXT:    [[TMP4:%.*]] = load i32, i32* @b, align 4
42 ; CHECK-NEXT:    [[CMP91_US_US:%.*]] = icmp slt i32 [[TMP4]], 1
43 ; CHECK-NEXT:    br i1 [[CMP91_US_US]], label [[FOR_INC_LR_PH_US_US:%.*]], label [[FOR_COND2_LOOPEXIT_US_US:%.*]]
44 ; CHECK:       for.cond2.loopexit.us.us:
45 ; CHECK-NEXT:    br i1 true, label [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA_US_US_LCSSA_US:%.*]], label [[FOR_BODY3_US_US]]
46 ; CHECK:       for.inc.lr.ph.us.us:
47 ; CHECK-NEXT:    br label [[FOR_INC_US_US:%.*]]
48 ; CHECK:       for.cond8.for.cond2.loopexit_crit_edge.us.us:
49 ; CHECK-NEXT:    store i32 1, i32* @b, align 4
50 ; CHECK-NEXT:    br label [[FOR_COND2_LOOPEXIT_US_US]]
51 ; CHECK:       for.inc.us.us:
52 ; CHECK-NEXT:    [[TMP5:%.*]] = phi i32 [ [[TMP4]], [[FOR_INC_LR_PH_US_US]] ], [ [[INC_US_US:%.*]], [[FOR_INC_US_US]] ]
53 ; CHECK-NEXT:    [[INC_US_US]] = add nsw i32 [[TMP5]], 1
54 ; CHECK-NEXT:    [[EXITCOND3:%.*]] = icmp ne i32 [[INC_US_US]], 1
55 ; CHECK-NEXT:    br i1 [[EXITCOND3]], label [[FOR_INC_US_US]], label [[FOR_COND8_FOR_COND2_LOOPEXIT_CRIT_EDGE_US_US:%.*]]
56 ; CHECK:       for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa.us:
57 ; CHECK-NEXT:    br label [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA_US:%.*]]
58 ; CHECK:       for.body3.lr.ph.split.us.split:
59 ; CHECK-NEXT:    br label [[FOR_BODY3_US:%.*]]
60 ; CHECK:       for.body3.us:
61 ; CHECK-NEXT:    br i1 true, label [[COND_FALSE_US:%.*]], label [[COND_END_US:%.*]]
62 ; CHECK:       cond.false.us:
63 ; CHECK-NEXT:    br label [[COND_END_US]]
64 ; CHECK:       cond.end.us:
65 ; CHECK-NEXT:    [[COND_US:%.*]] = phi i32 [ [[DIV]], [[COND_FALSE_US]] ], [ [[INDVARS_IV]], [[FOR_BODY3_US]] ]
66 ; CHECK-NEXT:    [[TMP6:%.*]] = load i32, i32* @b, align 4
67 ; CHECK-NEXT:    [[CMP91_US:%.*]] = icmp slt i32 [[TMP6]], 1
68 ; CHECK-NEXT:    br i1 [[CMP91_US]], label [[FOR_INC_LR_PH_US:%.*]], label [[FOR_COND2_LOOPEXIT_US:%.*]]
69 ; CHECK:       for.inc.us:
70 ; CHECK-NEXT:    [[TMP7:%.*]] = phi i32 [ [[TMP6]], [[FOR_INC_LR_PH_US]] ], [ [[INC_US:%.*]], [[FOR_INC_US:%.*]] ]
71 ; CHECK-NEXT:    [[INC_US]] = add nsw i32 [[TMP7]], 1
72 ; CHECK-NEXT:    [[EXITCOND2:%.*]] = icmp ne i32 [[INC_US]], 1
73 ; CHECK-NEXT:    br i1 [[EXITCOND2]], label [[FOR_INC_US]], label [[FOR_COND8_FOR_COND2_LOOPEXIT_CRIT_EDGE_US:%.*]]
74 ; CHECK:       for.cond2.loopexit.us:
75 ; CHECK-NEXT:    br i1 false, label [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA_US_US_LCSSA:%.*]], label [[FOR_BODY3_US]]
76 ; CHECK:       for.inc.lr.ph.us:
77 ; CHECK-NEXT:    br label [[FOR_INC_US]]
78 ; CHECK:       for.cond8.for.cond2.loopexit_crit_edge.us:
79 ; CHECK-NEXT:    store i32 1, i32* @b, align 4
80 ; CHECK-NEXT:    br label [[FOR_COND2_LOOPEXIT_US]]
81 ; CHECK:       for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa:
82 ; CHECK-NEXT:    [[COND_LCSSA_PH_US_PH:%.*]] = phi i32 [ [[COND_US]], [[FOR_COND2_LOOPEXIT_US]] ]
83 ; CHECK-NEXT:    br label [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA_US]]
84 ; CHECK:       for.cond2.for.inc13_crit_edge.us-lcssa.us:
85 ; CHECK-NEXT:    [[COND_LCSSA_PH_US:%.*]] = phi i32 [ [[COND_LCSSA_PH_US_PH]], [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA_US_US_LCSSA]] ], [ [[DIV]], [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA_US_US_LCSSA_US]] ]
86 ; CHECK-NEXT:    br label [[FOR_COND2_FOR_INC13_CRIT_EDGE:%.*]]
87 ; CHECK:       for.body3.lr.ph.split:
88 ; CHECK-NEXT:    br i1 [[TOBOOL]], label [[FOR_BODY3_LR_PH_SPLIT_SPLIT_US:%.*]], label [[FOR_BODY3_LR_PH_SPLIT_FOR_BODY3_LR_PH_SPLIT_SPLIT_CRIT_EDGE:%.*]]
89 ; CHECK:       for.body3.lr.ph.split.for.body3.lr.ph.split.split_crit_edge:
90 ; CHECK-NEXT:    br label [[FOR_BODY3_LR_PH_SPLIT_SPLIT:%.*]]
91 ; CHECK:       for.body3.lr.ph.split.split.us:
92 ; CHECK-NEXT:    br label [[FOR_BODY3_US3:%.*]]
93 ; CHECK:       for.body3.us3:
94 ; CHECK-NEXT:    br i1 false, label [[COND_FALSE_US4:%.*]], label [[COND_END_US5:%.*]]
95 ; CHECK:       cond.false.us4:
96 ; CHECK-NEXT:    br label [[COND_END_US5]]
97 ; CHECK:       cond.end.us5:
98 ; CHECK-NEXT:    [[TMP8:%.*]] = load i32, i32* @b, align 4
99 ; CHECK-NEXT:    [[CMP91_US7:%.*]] = icmp slt i32 [[TMP8]], 1
100 ; CHECK-NEXT:    br i1 [[CMP91_US7]], label [[FOR_INC_LR_PH_US12:%.*]], label [[FOR_COND2_LOOPEXIT_US11:%.*]]
101 ; CHECK:       for.inc.us8:
102 ; CHECK-NEXT:    [[TMP9:%.*]] = phi i32 [ [[TMP8]], [[FOR_INC_LR_PH_US12]] ], [ [[INC_US9:%.*]], [[FOR_INC_US8:%.*]] ]
103 ; CHECK-NEXT:    [[INC_US9]] = add nsw i32 [[TMP9]], 1
104 ; CHECK-NEXT:    [[EXITCOND1:%.*]] = icmp ne i32 [[INC_US9]], 1
105 ; CHECK-NEXT:    br i1 [[EXITCOND1]], label [[FOR_INC_US8]], label [[FOR_COND8_FOR_COND2_LOOPEXIT_CRIT_EDGE_US13:%.*]]
106 ; CHECK:       for.cond2.loopexit.us11:
107 ; CHECK-NEXT:    br i1 true, label [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA_US_LCSSA_US:%.*]], label [[FOR_BODY3_US3]]
108 ; CHECK:       for.inc.lr.ph.us12:
109 ; CHECK-NEXT:    br label [[FOR_INC_US8]]
110 ; CHECK:       for.cond8.for.cond2.loopexit_crit_edge.us13:
111 ; CHECK-NEXT:    store i32 1, i32* @b, align 4
112 ; CHECK-NEXT:    br label [[FOR_COND2_LOOPEXIT_US11]]
113 ; CHECK:       for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa.us:
114 ; CHECK-NEXT:    br label [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA:%.*]]
115 ; CHECK:       for.body3.lr.ph.split.split:
116 ; CHECK-NEXT:    br label [[FOR_BODY3:%.*]]
117 ; CHECK:       for.cond8.for.cond2.loopexit_crit_edge:
118 ; CHECK-NEXT:    store i32 1, i32* @b, align 4
119 ; CHECK-NEXT:    br label [[FOR_COND2_LOOPEXIT:%.*]]
120 ; CHECK:       for.cond2.loopexit:
121 ; CHECK-NEXT:    br i1 false, label [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA_US_LCSSA:%.*]], label [[FOR_BODY3]]
122 ; CHECK:       for.body3:
123 ; CHECK-NEXT:    br i1 false, label [[COND_FALSE:%.*]], label [[COND_END:%.*]]
124 ; CHECK:       cond.false:
125 ; CHECK-NEXT:    br label [[COND_END]]
126 ; CHECK:       cond.end:
127 ; CHECK-NEXT:    [[TMP10:%.*]] = load i32, i32* @b, align 4
128 ; CHECK-NEXT:    [[CMP91:%.*]] = icmp slt i32 [[TMP10]], 1
129 ; CHECK-NEXT:    br i1 [[CMP91]], label [[FOR_INC_LR_PH:%.*]], label [[FOR_COND2_LOOPEXIT]]
130 ; CHECK:       for.inc.lr.ph:
131 ; CHECK-NEXT:    br label [[FOR_INC:%.*]]
132 ; CHECK:       for.inc:
133 ; CHECK-NEXT:    [[TMP11:%.*]] = phi i32 [ [[TMP10]], [[FOR_INC_LR_PH]] ], [ [[INC:%.*]], [[FOR_INC]] ]
134 ; CHECK-NEXT:    [[INC]] = add nsw i32 [[TMP11]], 1
135 ; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp ne i32 [[INC]], 1
136 ; CHECK-NEXT:    br i1 [[EXITCOND]], label [[FOR_INC]], label [[FOR_COND8_FOR_COND2_LOOPEXIT_CRIT_EDGE:%.*]]
137 ; CHECK:       for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa:
138 ; CHECK-NEXT:    br label [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA]]
139 ; CHECK:       for.cond2.for.inc13_crit_edge.us-lcssa:
140 ; CHECK-NEXT:    [[COND_LCSSA_PH:%.*]] = phi i32 [ [[INDVARS_IV]], [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA_US_LCSSA]] ], [ [[INDVARS_IV]], [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA_US_LCSSA_US]] ]
141 ; CHECK-NEXT:    br label [[FOR_COND2_FOR_INC13_CRIT_EDGE]]
142 ; CHECK:       for.cond2.for.inc13_crit_edge:
143 ; CHECK-NEXT:    [[COND_LCSSA:%.*]] = phi i32 [ [[COND_LCSSA_PH]], [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA]] ], [ [[COND_LCSSA_PH_US]], [[FOR_COND2_FOR_INC13_CRIT_EDGE_US_LCSSA_US]] ]
144 ; CHECK-NEXT:    store i32 [[COND_LCSSA]], i32* @c, align 4
145 ; CHECK-NEXT:    br label [[FOR_INC13]]
146 ; CHECK:       for.inc13:
147 ; CHECK-NEXT:    [[INDVARS_IV_NEXT]] = add nsw i32 [[INDVARS_IV]], 1
148 ; CHECK-NEXT:    [[EXITCOND4:%.*]] = icmp ne i32 [[INDVARS_IV_NEXT]], 0
149 ; CHECK-NEXT:    br i1 [[EXITCOND4]], label [[FOR_COND2_PREHEADER]], label [[FOR_END15:%.*]]
150 ; CHECK:       for.end15:
151 ; CHECK-NEXT:    ret void
154 ; br i1 {{.*}}, label %[[for_inc13]], label %
155 entry:
156   %0 = load i32, i32* @a, align 4
157   %tobool2 = icmp eq i32 %0, 0
158   %1 = load i32, i32* @a, align 4
159   %tobool = icmp eq i32 %1, 0
160   br label %for.cond2.preheader
162 for.cond2.preheader:                              ; preds = %for.inc13, %entry
163   %storemerge15 = phi i8 [ -14, %entry ], [ %inc14, %for.inc13 ]
164   br i1 %tobool2, label %for.inc13, label %for.body3.lr.ph
166 for.body3.lr.ph:                                  ; preds = %for.cond2.preheader
167   %tobool5 = icmp eq i8 %storemerge15, 0
168   %conv7 = sext i8 %storemerge15 to i32
169   %2 = add nsw i32 %conv7, 1
170   %3 = icmp ult i32 %2, 3
171   %div = select i1 %3, i32 %conv7, i32 0
172   br i1 %tobool5, label %for.body3.lr.ph.split.us, label %for.body3.lr.ph.for.body3.lr.ph.split_crit_edge
174 for.body3.lr.ph.for.body3.lr.ph.split_crit_edge:  ; preds = %for.body3.lr.ph
175   br label %for.body3.lr.ph.split
177 for.body3.lr.ph.split.us:                         ; preds = %for.body3.lr.ph
178   br i1 %tobool, label %for.body3.lr.ph.split.us.split.us, label %for.body3.lr.ph.split.us.for.body3.lr.ph.split.us.split_crit_edge
180 for.body3.lr.ph.split.us.for.body3.lr.ph.split.us.split_crit_edge: ; preds = %for.body3.lr.ph.split.us
181   br label %for.body3.lr.ph.split.us.split
183 for.body3.lr.ph.split.us.split.us:                ; preds = %for.body3.lr.ph.split.us
184   br label %for.body3.us.us
186 for.body3.us.us:                                  ; preds = %for.cond2.loopexit.us.us, %for.body3.lr.ph.split.us.split.us
187   br i1 true, label %cond.false.us.us, label %cond.end.us.us
189 cond.false.us.us:                                 ; preds = %for.body3.us.us
190   br label %cond.end.us.us
192 cond.end.us.us:                                   ; preds = %cond.false.us.us, %for.body3.us.us
193   %cond.us.us = phi i32 [ %div, %cond.false.us.us ], [ %conv7, %for.body3.us.us ]
194   %4 = load i32, i32* @b, align 4
195   %cmp91.us.us = icmp slt i32 %4, 1
196   br i1 %cmp91.us.us, label %for.inc.lr.ph.us.us, label %for.cond2.loopexit.us.us
198 for.cond2.loopexit.us.us:                         ; preds = %for.cond8.for.cond2.loopexit_crit_edge.us.us, %cond.end.us.us
199   br i1 true, label %for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa.us, label %for.body3.us.us
201 for.inc.lr.ph.us.us:                              ; preds = %cond.end.us.us
202   br label %for.inc.us.us
204 for.cond8.for.cond2.loopexit_crit_edge.us.us:     ; preds = %for.inc.us.us
205   %inc.lcssa.us.us = phi i32 [ %inc.us.us, %for.inc.us.us ]
206   store i32 %inc.lcssa.us.us, i32* @b, align 4
207   br label %for.cond2.loopexit.us.us
209 for.inc.us.us:                                    ; preds = %for.inc.us.us, %for.inc.lr.ph.us.us
210   %5 = phi i32 [ %4, %for.inc.lr.ph.us.us ], [ %inc.us.us, %for.inc.us.us ]
211   %inc.us.us = add nsw i32 %5, 1
212   %cmp9.us.us = icmp slt i32 %inc.us.us, 1
213   br i1 %cmp9.us.us, label %for.inc.us.us, label %for.cond8.for.cond2.loopexit_crit_edge.us.us
215 for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa.us: ; preds = %for.cond2.loopexit.us.us
216   %cond.lcssa.ph.us.ph.us = phi i32 [ %cond.us.us, %for.cond2.loopexit.us.us ]
217   br label %for.cond2.for.inc13_crit_edge.us-lcssa.us
219 for.body3.lr.ph.split.us.split:                   ; preds = %for.body3.lr.ph.split.us.for.body3.lr.ph.split.us.split_crit_edge
220   br label %for.body3.us
222 for.body3.us:                                     ; preds = %for.cond2.loopexit.us, %for.body3.lr.ph.split.us.split
223   br i1 true, label %cond.false.us, label %cond.end.us
225 cond.false.us:                                    ; preds = %for.body3.us
226   br label %cond.end.us
228 cond.end.us:                                      ; preds = %cond.false.us, %for.body3.us
229   %cond.us = phi i32 [ %div, %cond.false.us ], [ %conv7, %for.body3.us ]
230   %6 = load i32, i32* @b, align 4
231   %cmp91.us = icmp slt i32 %6, 1
232   br i1 %cmp91.us, label %for.inc.lr.ph.us, label %for.cond2.loopexit.us
234 for.inc.us:                                       ; preds = %for.inc.lr.ph.us, %for.inc.us
235   %7 = phi i32 [ %6, %for.inc.lr.ph.us ], [ %inc.us, %for.inc.us ]
236   %inc.us = add nsw i32 %7, 1
237   %cmp9.us = icmp slt i32 %inc.us, 1
238   br i1 %cmp9.us, label %for.inc.us, label %for.cond8.for.cond2.loopexit_crit_edge.us
240 for.cond2.loopexit.us:                            ; preds = %for.cond8.for.cond2.loopexit_crit_edge.us, %cond.end.us
241   br i1 false, label %for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa, label %for.body3.us
243 for.inc.lr.ph.us:                                 ; preds = %cond.end.us
244   br label %for.inc.us
246 for.cond8.for.cond2.loopexit_crit_edge.us:        ; preds = %for.inc.us
247   %inc.lcssa.us = phi i32 [ %inc.us, %for.inc.us ]
248   store i32 %inc.lcssa.us, i32* @b, align 4
249   br label %for.cond2.loopexit.us
251 for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa: ; preds = %for.cond2.loopexit.us
252   %cond.lcssa.ph.us.ph = phi i32 [ %cond.us, %for.cond2.loopexit.us ]
253   br label %for.cond2.for.inc13_crit_edge.us-lcssa.us
255 for.cond2.for.inc13_crit_edge.us-lcssa.us:        ; preds = %for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa, %for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa.us
256   %cond.lcssa.ph.us = phi i32 [ %cond.lcssa.ph.us.ph, %for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa ], [ %cond.lcssa.ph.us.ph.us, %for.cond2.for.inc13_crit_edge.us-lcssa.us.us-lcssa.us ]
257   br label %for.cond2.for.inc13_crit_edge
259 for.body3.lr.ph.split:                            ; preds = %for.body3.lr.ph.for.body3.lr.ph.split_crit_edge
260   br i1 %tobool, label %for.body3.lr.ph.split.split.us, label %for.body3.lr.ph.split.for.body3.lr.ph.split.split_crit_edge
262 for.body3.lr.ph.split.for.body3.lr.ph.split.split_crit_edge: ; preds = %for.body3.lr.ph.split
263   br label %for.body3.lr.ph.split.split
265 for.body3.lr.ph.split.split.us:                   ; preds = %for.body3.lr.ph.split
266   br label %for.body3.us3
268 for.body3.us3:                                    ; preds = %for.cond2.loopexit.us11, %for.body3.lr.ph.split.split.us
269   br i1 false, label %cond.false.us4, label %cond.end.us5
271 cond.false.us4:                                   ; preds = %for.body3.us3
272   br label %cond.end.us5
274 cond.end.us5:                                     ; preds = %cond.false.us4, %for.body3.us3
275   %cond.us6 = phi i32 [ %div, %cond.false.us4 ], [ %conv7, %for.body3.us3 ]
276   %8 = load i32, i32* @b, align 4
277   %cmp91.us7 = icmp slt i32 %8, 1
278   br i1 %cmp91.us7, label %for.inc.lr.ph.us12, label %for.cond2.loopexit.us11
280 for.inc.us8:                                      ; preds = %for.inc.lr.ph.us12, %for.inc.us8
281   %9 = phi i32 [ %8, %for.inc.lr.ph.us12 ], [ %inc.us9, %for.inc.us8 ]
282   %inc.us9 = add nsw i32 %9, 1
283   %cmp9.us10 = icmp slt i32 %inc.us9, 1
284   br i1 %cmp9.us10, label %for.inc.us8, label %for.cond8.for.cond2.loopexit_crit_edge.us13
286 for.cond2.loopexit.us11:                          ; preds = %for.cond8.for.cond2.loopexit_crit_edge.us13, %cond.end.us5
287   br i1 true, label %for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa.us, label %for.body3.us3
289 for.inc.lr.ph.us12:                               ; preds = %cond.end.us5
290   br label %for.inc.us8
292 for.cond8.for.cond2.loopexit_crit_edge.us13:      ; preds = %for.inc.us8
293   %inc.lcssa.us14 = phi i32 [ %inc.us9, %for.inc.us8 ]
294   store i32 %inc.lcssa.us14, i32* @b, align 4
295   br label %for.cond2.loopexit.us11
297 for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa.us: ; preds = %for.cond2.loopexit.us11
298   %cond.lcssa.ph.ph.us = phi i32 [ %cond.us6, %for.cond2.loopexit.us11 ]
299   br label %for.cond2.for.inc13_crit_edge.us-lcssa
301 for.body3.lr.ph.split.split:                      ; preds = %for.body3.lr.ph.split.for.body3.lr.ph.split.split_crit_edge
302   br label %for.body3
304 for.cond8.for.cond2.loopexit_crit_edge:           ; preds = %for.inc
305   %inc.lcssa = phi i32 [ %inc, %for.inc ]
306   store i32 %inc.lcssa, i32* @b, align 4
307   br label %for.cond2.loopexit
309 for.cond2.loopexit:                               ; preds = %cond.end, %for.cond8.for.cond2.loopexit_crit_edge
310   br i1 false, label %for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa, label %for.body3
312 for.body3:                                        ; preds = %for.cond2.loopexit, %for.body3.lr.ph.split.split
313   br i1 false, label %cond.false, label %cond.end
315 cond.false:                                       ; preds = %for.body3
316   br label %cond.end
318 cond.end:                                         ; preds = %cond.false, %for.body3
319   %cond = phi i32 [ %div, %cond.false ], [ %conv7, %for.body3 ]
320   %10 = load i32, i32* @b, align 4
321   %cmp91 = icmp slt i32 %10, 1
322   br i1 %cmp91, label %for.inc.lr.ph, label %for.cond2.loopexit
324 for.inc.lr.ph:                                    ; preds = %cond.end
325   br label %for.inc
327 for.inc:                                          ; preds = %for.inc, %for.inc.lr.ph
328   %11 = phi i32 [ %10, %for.inc.lr.ph ], [ %inc, %for.inc ]
329   %inc = add nsw i32 %11, 1
330   %cmp9 = icmp slt i32 %inc, 1
331   br i1 %cmp9, label %for.inc, label %for.cond8.for.cond2.loopexit_crit_edge
333 for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa:  ; preds = %for.cond2.loopexit
334   %cond.lcssa.ph.ph = phi i32 [ %cond, %for.cond2.loopexit ]
335   br label %for.cond2.for.inc13_crit_edge.us-lcssa
337 for.cond2.for.inc13_crit_edge.us-lcssa:           ; preds = %for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa, %for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa.us
338   %cond.lcssa.ph = phi i32 [ %cond.lcssa.ph.ph, %for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa ], [ %cond.lcssa.ph.ph.us, %for.cond2.for.inc13_crit_edge.us-lcssa.us-lcssa.us ]
339   br label %for.cond2.for.inc13_crit_edge
341 for.cond2.for.inc13_crit_edge:                    ; preds = %for.cond2.for.inc13_crit_edge.us-lcssa, %for.cond2.for.inc13_crit_edge.us-lcssa.us
342   %cond.lcssa = phi i32 [ %cond.lcssa.ph, %for.cond2.for.inc13_crit_edge.us-lcssa ], [ %cond.lcssa.ph.us, %for.cond2.for.inc13_crit_edge.us-lcssa.us ]
343   store i32 %cond.lcssa, i32* @c, align 4
344   br label %for.inc13
346 for.inc13:                                        ; preds = %for.cond2.for.inc13_crit_edge, %for.cond2.preheader
347   %inc14 = add i8 %storemerge15, 1
348   %cmp = icmp ugt i8 %inc14, 50
349   br i1 %cmp, label %for.cond2.preheader, label %for.end15
351 for.end15:                                        ; preds = %for.inc13
352   ret void