Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AArch64 / ragreedy-csr.ll
blob5b501762418ef5070ea45ac1dca6f550e73a4c8b
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc < %s -mtriple=arm64-apple-ios7.0 -regalloc=greedy -regalloc-csr-first-time-cost=15 | FileCheck %s
4 ; This testing case is reduced from 197.parser prune_match function.
5 ; We make sure that we do not use callee-saved registers (x19 to x25).
6 ; rdar://16162005
8 %struct.List_o_links_struct = type { i32, i32, i32, ptr }
9 %struct.Connector_struct = type { i16, i16, i8, i8, ptr, ptr }
10 %struct._RuneLocale = type { [8 x i8], [32 x i8], ptr, ptr, i32, [256 x i32], [256 x i32], [256 x i32], %struct._RuneRange, %struct._RuneRange, %struct._RuneRange, ptr, i32, i32, ptr }
11 %struct._RuneRange = type { i32, ptr }
12 %struct._RuneEntry = type { i32, i32, i32, ptr }
13 %struct._RuneCharClass = type { [14 x i8], i32 }
14 %struct.Exp_struct = type { i8, i8, i8, i8, %union.anon }
15 %union.anon = type { ptr }
16 %struct.E_list_struct = type { ptr, ptr }
17 %struct.domain_struct = type { ptr, i32, ptr, i32, i32, ptr, ptr }
18 %struct.d_tree_leaf_struct = type { ptr, i32, ptr }
19 @_DefaultRuneLocale = external global %struct._RuneLocale
20 declare i32 @__maskrune(i32, i64) #7
21 define fastcc i32 @prune_match(ptr nocapture readonly %a, ptr nocapture readonly %b) #9 {
22 ; CHECK-LABEL: prune_match:
23 ; CHECK:       ; %bb.0: ; %entry
24 ; CHECK-NEXT:    ldrh w8, [x0]
25 ; CHECK-NEXT:    ldrh w9, [x1]
26 ; CHECK-NEXT:    cmp w8, w9
27 ; CHECK-NEXT:    b.ne LBB0_47
28 ; CHECK-NEXT:  ; %bb.1: ; %if.end
29 ; CHECK-NEXT:    sub sp, sp, #64
30 ; CHECK-NEXT:    stp x29, x30, [sp, #48] ; 16-byte Folded Spill
31 ; CHECK-NEXT:    .cfi_def_cfa_offset 64
32 ; CHECK-NEXT:    .cfi_offset w30, -8
33 ; CHECK-NEXT:    .cfi_offset w29, -16
34 ; CHECK-NEXT:  Lloh0:
35 ; CHECK-NEXT:    adrp x14, __DefaultRuneLocale@GOTPAGE
36 ; CHECK-NEXT:    ldrb w12, [x0, #4]
37 ; CHECK-NEXT:    ldrb w13, [x1, #4]
38 ; CHECK-NEXT:    ldr x9, [x0, #16]
39 ; CHECK-NEXT:    ldr x10, [x1, #16]
40 ; CHECK-NEXT:    mov x11, xzr
41 ; CHECK-NEXT:  Lloh1:
42 ; CHECK-NEXT:    ldr x14, [x14, __DefaultRuneLocale@GOTPAGEOFF]
43 ; CHECK-NEXT:    ldrsb x8, [x9, x11]
44 ; CHECK-NEXT:    tbz x8, #63, LBB0_3
45 ; CHECK-NEXT:  LBB0_2: ; %cond.false.i.i
46 ; CHECK-NEXT:    stp x9, x0, [sp, #32] ; 16-byte Folded Spill
47 ; CHECK-NEXT:    mov w0, w8
48 ; CHECK-NEXT:    mov w1, #32768 ; =0x8000
49 ; CHECK-NEXT:    str x10, [sp, #8] ; 8-byte Folded Spill
50 ; CHECK-NEXT:    str x11, [sp, #24] ; 8-byte Folded Spill
51 ; CHECK-NEXT:    str w12, [sp, #4] ; 4-byte Folded Spill
52 ; CHECK-NEXT:    str w13, [sp, #20] ; 4-byte Folded Spill
53 ; CHECK-NEXT:    bl ___maskrune
54 ; CHECK-NEXT:  Lloh2:
55 ; CHECK-NEXT:    adrp x14, __DefaultRuneLocale@GOTPAGE
56 ; CHECK-NEXT:    mov w8, w0
57 ; CHECK-NEXT:  Lloh3:
58 ; CHECK-NEXT:    ldr x14, [x14, __DefaultRuneLocale@GOTPAGEOFF]
59 ; CHECK-NEXT:    ldp x11, x9, [sp, #24] ; 16-byte Folded Reload
60 ; CHECK-NEXT:    ldr w13, [sp, #20] ; 4-byte Folded Reload
61 ; CHECK-NEXT:    ldr w12, [sp, #4] ; 4-byte Folded Reload
62 ; CHECK-NEXT:    ldr x10, [sp, #8] ; 8-byte Folded Reload
63 ; CHECK-NEXT:    ldr x0, [sp, #40] ; 8-byte Folded Reload
64 ; CHECK-NEXT:    cbz w8, LBB0_4
65 ; CHECK-NEXT:    b LBB0_6
66 ; CHECK-NEXT:  LBB0_3: ; %cond.true.i.i
67 ; CHECK-NEXT:    add x8, x14, x8, lsl #2
68 ; CHECK-NEXT:    ldr w8, [x8, #60]
69 ; CHECK-NEXT:    and w8, w8, #0x8000
70 ; CHECK-NEXT:    cbnz w8, LBB0_6
71 ; CHECK-NEXT:  LBB0_4: ; %lor.rhs
72 ; CHECK-NEXT:    ldrsb x8, [x10, x11]
73 ; CHECK-NEXT:    tbnz x8, #63, LBB0_8
74 ; CHECK-NEXT:  ; %bb.5: ; %cond.true.i.i217
75 ; CHECK-NEXT:    add x8, x14, x8, lsl #2
76 ; CHECK-NEXT:    ldr w8, [x8, #60]
77 ; CHECK-NEXT:    and w8, w8, #0x8000
78 ; CHECK-NEXT:    cbz w8, LBB0_9
79 ; CHECK-NEXT:  LBB0_6: ; %while.body
80 ; CHECK-NEXT:    ldrb w8, [x9, x11]
81 ; CHECK-NEXT:    ldrb w15, [x10, x11]
82 ; CHECK-NEXT:    cmp w8, w15
83 ; CHECK-NEXT:    b.ne LBB0_42
84 ; CHECK-NEXT:  ; %bb.7: ; %if.end17
85 ; CHECK-NEXT:    add x11, x11, #1
86 ; CHECK-NEXT:    ldrsb x8, [x9, x11]
87 ; CHECK-NEXT:    tbz x8, #63, LBB0_3
88 ; CHECK-NEXT:    b LBB0_2
89 ; CHECK-NEXT:  LBB0_8: ; %cond.false.i.i219
90 ; CHECK-NEXT:    stp x9, x0, [sp, #32] ; 16-byte Folded Spill
91 ; CHECK-NEXT:    mov w0, w8
92 ; CHECK-NEXT:    mov w1, #32768 ; =0x8000
93 ; CHECK-NEXT:    str x10, [sp, #8] ; 8-byte Folded Spill
94 ; CHECK-NEXT:    str x11, [sp, #24] ; 8-byte Folded Spill
95 ; CHECK-NEXT:    str w12, [sp, #4] ; 4-byte Folded Spill
96 ; CHECK-NEXT:    str w13, [sp, #20] ; 4-byte Folded Spill
97 ; CHECK-NEXT:    bl ___maskrune
98 ; CHECK-NEXT:  Lloh4:
99 ; CHECK-NEXT:    adrp x14, __DefaultRuneLocale@GOTPAGE
100 ; CHECK-NEXT:    mov w8, w0
101 ; CHECK-NEXT:  Lloh5:
102 ; CHECK-NEXT:    ldr x14, [x14, __DefaultRuneLocale@GOTPAGEOFF]
103 ; CHECK-NEXT:    ldp x11, x9, [sp, #24] ; 16-byte Folded Reload
104 ; CHECK-NEXT:    ldr w13, [sp, #20] ; 4-byte Folded Reload
105 ; CHECK-NEXT:    ldr w12, [sp, #4] ; 4-byte Folded Reload
106 ; CHECK-NEXT:    ldr x10, [sp, #8] ; 8-byte Folded Reload
107 ; CHECK-NEXT:    ldr x0, [sp, #40] ; 8-byte Folded Reload
108 ; CHECK-NEXT:    cbnz w8, LBB0_6
109 ; CHECK-NEXT:  LBB0_9: ; %while.end
110 ; CHECK-NEXT:    orr w8, w13, w12
111 ; CHECK-NEXT:    cbnz w8, LBB0_24
112 ; CHECK-NEXT:  ; %bb.10: ; %if.then23
113 ; CHECK-NEXT:    ldr x12, [x0, #16]
114 ; CHECK-NEXT:    ldrb w8, [x9, x11]
115 ; CHECK-NEXT:    ldrb w13, [x12]
116 ; CHECK-NEXT:    cmp w13, #83
117 ; CHECK-NEXT:    b.eq LBB0_19
118 ; CHECK-NEXT:  LBB0_11: ; %while.cond59.preheader
119 ; CHECK-NEXT:    cbz w8, LBB0_23
120 ; CHECK-NEXT:  LBB0_12: ; %land.rhs.preheader
121 ; CHECK-NEXT:    add x12, x9, x11
122 ; CHECK-NEXT:    add x9, x10, x11
123 ; CHECK-NEXT:    add x10, x12, #1
124 ; CHECK-NEXT:  LBB0_13: ; %land.rhs
125 ; CHECK-NEXT:    ; =>This Inner Loop Header: Depth=1
126 ; CHECK-NEXT:    ldrb w11, [x9], #1
127 ; CHECK-NEXT:    cbz w11, LBB0_23
128 ; CHECK-NEXT:  ; %bb.14: ; %while.body66
129 ; CHECK-NEXT:    ; in Loop: Header=BB0_13 Depth=1
130 ; CHECK-NEXT:    cmp w8, #42
131 ; CHECK-NEXT:    b.eq LBB0_18
132 ; CHECK-NEXT:  ; %bb.15: ; %while.body66
133 ; CHECK-NEXT:    ; in Loop: Header=BB0_13 Depth=1
134 ; CHECK-NEXT:    cmp w11, #42
135 ; CHECK-NEXT:    b.eq LBB0_18
136 ; CHECK-NEXT:  ; %bb.16: ; %lor.lhs.false74
137 ; CHECK-NEXT:    ; in Loop: Header=BB0_13 Depth=1
138 ; CHECK-NEXT:    cmp w8, w11
139 ; CHECK-NEXT:    mov w0, wzr
140 ; CHECK-NEXT:    b.ne LBB0_43
141 ; CHECK-NEXT:  ; %bb.17: ; %lor.lhs.false74
142 ; CHECK-NEXT:    ; in Loop: Header=BB0_13 Depth=1
143 ; CHECK-NEXT:    cmp w8, #94
144 ; CHECK-NEXT:    b.eq LBB0_43
145 ; CHECK-NEXT:  LBB0_18: ; %if.then83
146 ; CHECK-NEXT:    ; in Loop: Header=BB0_13 Depth=1
147 ; CHECK-NEXT:    ldrb w8, [x10], #1
148 ; CHECK-NEXT:    mov w0, #1 ; =0x1
149 ; CHECK-NEXT:    cbnz w8, LBB0_13
150 ; CHECK-NEXT:    b LBB0_43
151 ; CHECK-NEXT:  LBB0_19: ; %land.lhs.true28
152 ; CHECK-NEXT:    cbz w8, LBB0_23
153 ; CHECK-NEXT:  ; %bb.20: ; %land.lhs.true28
154 ; CHECK-NEXT:    cmp w8, #112
155 ; CHECK-NEXT:    b.ne LBB0_12
156 ; CHECK-NEXT:  ; %bb.21: ; %land.lhs.true35
157 ; CHECK-NEXT:    ldrb w13, [x10, x11]
158 ; CHECK-NEXT:    cmp w13, #112
159 ; CHECK-NEXT:    b.ne LBB0_12
160 ; CHECK-NEXT:  ; %bb.22: ; %land.lhs.true43
161 ; CHECK-NEXT:    sub x12, x9, x12
162 ; CHECK-NEXT:    add x12, x12, x11
163 ; CHECK-NEXT:    cmp x12, #1
164 ; CHECK-NEXT:    b.ne LBB0_44
165 ; CHECK-NEXT:  LBB0_23:
166 ; CHECK-NEXT:    mov w0, #1 ; =0x1
167 ; CHECK-NEXT:    b LBB0_43
168 ; CHECK-NEXT:  LBB0_24: ; %if.else88
169 ; CHECK-NEXT:    cmp w12, #1
170 ; CHECK-NEXT:    b.ne LBB0_33
171 ; CHECK-NEXT:  ; %bb.25: ; %if.else88
172 ; CHECK-NEXT:    cmp w13, #2
173 ; CHECK-NEXT:    b.ne LBB0_33
174 ; CHECK-NEXT:  ; %bb.26: ; %while.cond95.preheader
175 ; CHECK-NEXT:    ldrb w12, [x9, x11]
176 ; CHECK-NEXT:    cbz w12, LBB0_23
177 ; CHECK-NEXT:  ; %bb.27: ; %land.rhs99.preheader
178 ; CHECK-NEXT:    mov x8, xzr
179 ; CHECK-NEXT:    mov w0, #1 ; =0x1
180 ; CHECK-NEXT:    b LBB0_29
181 ; CHECK-NEXT:  LBB0_28: ; %if.then117
182 ; CHECK-NEXT:    ; in Loop: Header=BB0_29 Depth=1
183 ; CHECK-NEXT:    add x12, x9, x8
184 ; CHECK-NEXT:    add x8, x8, #1
185 ; CHECK-NEXT:    add x12, x12, x11
186 ; CHECK-NEXT:    ldrb w12, [x12, #1]
187 ; CHECK-NEXT:    cbz w12, LBB0_43
188 ; CHECK-NEXT:  LBB0_29: ; %land.rhs99
189 ; CHECK-NEXT:    ; =>This Inner Loop Header: Depth=1
190 ; CHECK-NEXT:    add x13, x10, x8
191 ; CHECK-NEXT:    ldrb w13, [x13, x11]
192 ; CHECK-NEXT:    cbz w13, LBB0_23
193 ; CHECK-NEXT:  ; %bb.30: ; %while.body104
194 ; CHECK-NEXT:    ; in Loop: Header=BB0_29 Depth=1
195 ; CHECK-NEXT:    cmp w12, w13
196 ; CHECK-NEXT:    b.eq LBB0_28
197 ; CHECK-NEXT:  ; %bb.31: ; %while.body104
198 ; CHECK-NEXT:    ; in Loop: Header=BB0_29 Depth=1
199 ; CHECK-NEXT:    cmp w12, #42
200 ; CHECK-NEXT:    b.eq LBB0_28
201 ; CHECK-NEXT:  ; %bb.32: ; %while.body104
202 ; CHECK-NEXT:    ; in Loop: Header=BB0_29 Depth=1
203 ; CHECK-NEXT:    cmp w13, #94
204 ; CHECK-NEXT:    b.eq LBB0_28
205 ; CHECK-NEXT:    b LBB0_42
206 ; CHECK-NEXT:  LBB0_33: ; %if.else123
207 ; CHECK-NEXT:    cmp w13, #1
208 ; CHECK-NEXT:    mov w0, wzr
209 ; CHECK-NEXT:    b.ne LBB0_43
210 ; CHECK-NEXT:  ; %bb.34: ; %if.else123
211 ; CHECK-NEXT:    cmp w12, #2
212 ; CHECK-NEXT:    b.ne LBB0_43
213 ; CHECK-NEXT:  ; %bb.35: ; %while.cond130.preheader
214 ; CHECK-NEXT:    ldrb w8, [x9, x11]
215 ; CHECK-NEXT:    cbz w8, LBB0_23
216 ; CHECK-NEXT:  ; %bb.36: ; %land.rhs134.preheader
217 ; CHECK-NEXT:    mov x12, xzr
218 ; CHECK-NEXT:    mov w0, #1 ; =0x1
219 ; CHECK-NEXT:    b LBB0_38
220 ; CHECK-NEXT:  LBB0_37: ; %if.then152
221 ; CHECK-NEXT:    ; in Loop: Header=BB0_38 Depth=1
222 ; CHECK-NEXT:    add x8, x9, x12
223 ; CHECK-NEXT:    add x12, x12, #1
224 ; CHECK-NEXT:    add x8, x8, x11
225 ; CHECK-NEXT:    ldrb w8, [x8, #1]
226 ; CHECK-NEXT:    cbz w8, LBB0_43
227 ; CHECK-NEXT:  LBB0_38: ; %land.rhs134
228 ; CHECK-NEXT:    ; =>This Inner Loop Header: Depth=1
229 ; CHECK-NEXT:    add x13, x10, x12
230 ; CHECK-NEXT:    ldrb w13, [x13, x11]
231 ; CHECK-NEXT:    cbz w13, LBB0_23
232 ; CHECK-NEXT:  ; %bb.39: ; %while.body139
233 ; CHECK-NEXT:    ; in Loop: Header=BB0_38 Depth=1
234 ; CHECK-NEXT:    cmp w8, w13
235 ; CHECK-NEXT:    b.eq LBB0_37
236 ; CHECK-NEXT:  ; %bb.40: ; %while.body139
237 ; CHECK-NEXT:    ; in Loop: Header=BB0_38 Depth=1
238 ; CHECK-NEXT:    cmp w13, #42
239 ; CHECK-NEXT:    b.eq LBB0_37
240 ; CHECK-NEXT:  ; %bb.41: ; %while.body139
241 ; CHECK-NEXT:    ; in Loop: Header=BB0_38 Depth=1
242 ; CHECK-NEXT:    cmp w8, #94
243 ; CHECK-NEXT:    b.eq LBB0_37
244 ; CHECK-NEXT:  LBB0_42:
245 ; CHECK-NEXT:    mov w0, wzr
246 ; CHECK-NEXT:  LBB0_43:
247 ; CHECK-NEXT:    ldp x29, x30, [sp, #48] ; 16-byte Folded Reload
248 ; CHECK-NEXT:    add sp, sp, #64
249 ; CHECK-NEXT:    ret
250 ; CHECK-NEXT:  LBB0_44: ; %lor.lhs.false47
251 ; CHECK-NEXT:    cmp x12, #2
252 ; CHECK-NEXT:    b.ne LBB0_11
253 ; CHECK-NEXT:  ; %bb.45: ; %land.lhs.true52
254 ; CHECK-NEXT:    add x12, x9, x11
255 ; CHECK-NEXT:    mov w0, #1 ; =0x1
256 ; CHECK-NEXT:    ldurb w12, [x12, #-1]
257 ; CHECK-NEXT:    cmp w12, #73
258 ; CHECK-NEXT:    b.eq LBB0_43
259 ; CHECK-NEXT:  ; %bb.46: ; %land.lhs.true52
260 ; CHECK-NEXT:    cbz w8, LBB0_43
261 ; CHECK-NEXT:    b LBB0_12
262 ; CHECK-NEXT:  LBB0_47:
263 ; CHECK-NEXT:    mov w0, wzr
264 ; CHECK-NEXT:    ret
265 ; CHECK-NEXT:    .loh AdrpLdrGot Lloh0, Lloh1
266 ; CHECK-NEXT:    .loh AdrpLdrGot Lloh2, Lloh3
267 ; CHECK-NEXT:    .loh AdrpLdrGot Lloh4, Lloh5
268 entry:
269   %0 = load i16, ptr %a, align 2
270   %1 = load i16, ptr %b, align 2
271   %cmp = icmp eq i16 %0, %1
272   br i1 %cmp, label %if.end, label %return, !prof !988
273 if.end:
274   %priority = getelementptr inbounds %struct.Connector_struct, ptr %a, i64 0, i32 2
275   %2 = load i8, ptr %priority, align 1
276   %priority5 = getelementptr inbounds %struct.Connector_struct, ptr %b, i64 0, i32 2
277   %3 = load i8, ptr %priority5, align 1
278   %string = getelementptr inbounds %struct.Connector_struct, ptr %a, i64 0, i32 5
279   %4 = load ptr, ptr %string, align 8
280   %string7 = getelementptr inbounds %struct.Connector_struct, ptr %b, i64 0, i32 5
281   %5 = load ptr, ptr %string7, align 8
282   br label %while.cond
283 while.cond:
284   %lsr.iv27 = phi i64 [ %lsr.iv.next28, %if.end17 ], [ 0, %if.end ]
285   %scevgep55 = getelementptr i8, ptr %4, i64 %lsr.iv27
286   %6 = load i8, ptr %scevgep55, align 1
287   %idxprom.i.i = sext i8 %6 to i64
288   %isascii.i.i224 = icmp sgt i8 %6, -1
289   br i1 %isascii.i.i224, label %cond.true.i.i, label %cond.false.i.i, !prof !181
290 cond.true.i.i:
291   %arrayidx.i.i = getelementptr inbounds %struct._RuneLocale, ptr @_DefaultRuneLocale, i64 0, i32 5, i64 %idxprom.i.i
292   %7 = load i32, ptr %arrayidx.i.i, align 4
293   %and.i.i = and i32 %7, 32768
294   br label %isupper.exit
295 cond.false.i.i:
296   %8 = trunc i64 %idxprom.i.i to i8
297   %conv8 = sext i8 %8 to i32
298   %call3.i.i = tail call i32 @__maskrune(i32 %conv8, i64 32768) #3
299   br label %isupper.exit
300 isupper.exit:
301   %tobool1.sink.i.in.i = phi i32 [ %and.i.i, %cond.true.i.i ], [ %call3.i.i, %cond.false.i.i ]
302   %tobool1.sink.i.i = icmp eq i32 %tobool1.sink.i.in.i, 0
303   br i1 %tobool1.sink.i.i, label %lor.rhs, label %while.body, !prof !989
304 lor.rhs:
305   %sunkaddr = ptrtoint ptr %5 to i64
306   %sunkaddr58 = add i64 %sunkaddr, %lsr.iv27
307   %sunkaddr59 = inttoptr i64 %sunkaddr58 to ptr
308   %9 = load i8, ptr %sunkaddr59, align 1
309   %idxprom.i.i214 = sext i8 %9 to i64
310   %isascii.i.i213225 = icmp sgt i8 %9, -1
311   br i1 %isascii.i.i213225, label %cond.true.i.i217, label %cond.false.i.i219, !prof !181
312 cond.true.i.i217:
313   %arrayidx.i.i215 = getelementptr inbounds %struct._RuneLocale, ptr @_DefaultRuneLocale, i64 0, i32 5, i64 %idxprom.i.i214
314   %10 = load i32, ptr %arrayidx.i.i215, align 4
315   %and.i.i216 = and i32 %10, 32768
316   br label %isupper.exit223
317 cond.false.i.i219:
318   %11 = trunc i64 %idxprom.i.i214 to i8
319   %conv9 = sext i8 %11 to i32
320   %call3.i.i218 = tail call i32 @__maskrune(i32 %conv9, i64 32768) #3
321   br label %isupper.exit223
322 isupper.exit223:
323   %tobool1.sink.i.in.i220 = phi i32 [ %and.i.i216, %cond.true.i.i217 ], [ %call3.i.i218, %cond.false.i.i219 ]
324   %tobool1.sink.i.i221 = icmp eq i32 %tobool1.sink.i.in.i220, 0
325   br i1 %tobool1.sink.i.i221, label %while.end, label %while.body, !prof !990
326 while.body:
327   %sunkaddr60 = ptrtoint ptr %4 to i64
328   %sunkaddr61 = add i64 %sunkaddr60, %lsr.iv27
329   %sunkaddr62 = inttoptr i64 %sunkaddr61 to ptr
330   %12 = load i8, ptr %sunkaddr62, align 1
331   %sunkaddr63 = ptrtoint ptr %5 to i64
332   %sunkaddr64 = add i64 %sunkaddr63, %lsr.iv27
333   %sunkaddr65 = inttoptr i64 %sunkaddr64 to ptr
334   %13 = load i8, ptr %sunkaddr65, align 1
335   %cmp14 = icmp eq i8 %12, %13
336   br i1 %cmp14, label %if.end17, label %return, !prof !991
337 if.end17:
338   %lsr.iv.next28 = add i64 %lsr.iv27, 1
339   br label %while.cond
340 while.end:
341   %14 = or i8 %3, %2
342   %15 = icmp eq i8 %14, 0
343   br i1 %15, label %if.then23, label %if.else88, !prof !992
344 if.then23:
345   %sunkaddr66 = ptrtoint ptr %a to i64
346   %sunkaddr67 = add i64 %sunkaddr66, 16
347   %sunkaddr68 = inttoptr i64 %sunkaddr67 to ptr
348   %16 = load ptr, ptr %sunkaddr68, align 8
349   %17 = load i8, ptr %16, align 1
350   %cmp26 = icmp eq i8 %17, 83
351   %sunkaddr69 = ptrtoint ptr %4 to i64
352   %sunkaddr70 = add i64 %sunkaddr69, %lsr.iv27
353   %sunkaddr71 = inttoptr i64 %sunkaddr70 to ptr
354   %18 = load i8, ptr %sunkaddr71, align 1
355   br i1 %cmp26, label %land.lhs.true28, label %while.cond59.preheader, !prof !993
356 land.lhs.true28:
357   switch i8 %18, label %land.rhs.preheader [
358     i8 112, label %land.lhs.true35
359     i8 0, label %return
360   ], !prof !994
361 land.lhs.true35:
362   %sunkaddr72 = ptrtoint ptr %5 to i64
363   %sunkaddr73 = add i64 %sunkaddr72, %lsr.iv27
364   %sunkaddr74 = inttoptr i64 %sunkaddr73 to ptr
365   %19 = load i8, ptr %sunkaddr74, align 1
366   switch i8 %19, label %land.rhs.preheader [
367     i8 112, label %land.lhs.true43
368   ], !prof !995
369 land.lhs.true43:
370   %20 = ptrtoint ptr %16 to i64
371   %21 = sub i64 0, %20
372   %scevgep52 = getelementptr i8, ptr %4, i64 %21
373   %scevgep53 = getelementptr i8, ptr %scevgep52, i64 %lsr.iv27
374   %scevgep54 = getelementptr i8, ptr %scevgep53, i64 -1
375   %cmp45 = icmp eq ptr %scevgep54, null
376   br i1 %cmp45, label %return, label %lor.lhs.false47, !prof !996
377 lor.lhs.false47:
378   %22 = ptrtoint ptr %16 to i64
379   %23 = sub i64 0, %22
380   %scevgep47 = getelementptr i8, ptr %4, i64 %23
381   %scevgep48 = getelementptr i8, ptr %scevgep47, i64 %lsr.iv27
382   %scevgep49 = getelementptr i8, ptr %scevgep48, i64 -2
383   %cmp50 = icmp eq ptr %scevgep49, null
384   br i1 %cmp50, label %land.lhs.true52, label %while.cond59.preheader, !prof !997
385 land.lhs.true52:
386   %sunkaddr75 = ptrtoint ptr %4 to i64
387   %sunkaddr76 = add i64 %sunkaddr75, %lsr.iv27
388   %sunkaddr77 = add i64 %sunkaddr76, -1
389   %sunkaddr78 = inttoptr i64 %sunkaddr77 to ptr
390   %24 = load i8, ptr %sunkaddr78, align 1
391   %cmp55 = icmp eq i8 %24, 73
392   %cmp61233 = icmp eq i8 %18, 0
393   %or.cond265 = or i1 %cmp55, %cmp61233
394   br i1 %or.cond265, label %return, label %land.rhs.preheader, !prof !998
395 while.cond59.preheader:
396   %cmp61233.old = icmp eq i8 %18, 0
397   br i1 %cmp61233.old, label %return, label %land.rhs.preheader, !prof !999
398 land.rhs.preheader:
399   %scevgep33 = getelementptr i8, ptr %5, i64 %lsr.iv27
400   %scevgep43 = getelementptr i8, ptr %4, i64 %lsr.iv27
401   br label %land.rhs
402 land.rhs:
403   %lsr.iv = phi i64 [ 0, %land.rhs.preheader ], [ %lsr.iv.next, %if.then83 ]
404   %25 = phi i8 [ %27, %if.then83 ], [ %18, %land.rhs.preheader ]
405   %scevgep34 = getelementptr i8, ptr %scevgep33, i64 %lsr.iv
406   %26 = load i8, ptr %scevgep34, align 1
407   %cmp64 = icmp eq i8 %26, 0
408   br i1 %cmp64, label %return, label %while.body66, !prof !1000
409 while.body66:
410   %cmp68 = icmp eq i8 %25, 42
411   %cmp72 = icmp eq i8 %26, 42
412   %or.cond = or i1 %cmp68, %cmp72
413   br i1 %or.cond, label %if.then83, label %lor.lhs.false74, !prof !1001
414 lor.lhs.false74:
415   %cmp77 = icmp ne i8 %25, %26
416   %cmp81 = icmp eq i8 %25, 94
417   %or.cond208 = or i1 %cmp77, %cmp81
418   br i1 %or.cond208, label %return, label %if.then83, !prof !1002
419 if.then83:
420   %scevgep44 = getelementptr i8, ptr %scevgep43, i64 %lsr.iv
421   %scevgep45 = getelementptr i8, ptr %scevgep44, i64 1
422   %27 = load i8, ptr %scevgep45, align 1
423   %cmp61 = icmp eq i8 %27, 0
424   %lsr.iv.next = add i64 %lsr.iv, 1
425   br i1 %cmp61, label %return, label %land.rhs, !prof !999
426 if.else88:
427   %cmp89 = icmp eq i8 %2, 1
428   %cmp92 = icmp eq i8 %3, 2
429   %or.cond159 = and i1 %cmp89, %cmp92
430   br i1 %or.cond159, label %while.cond95.preheader, label %if.else123, !prof !1003
431 while.cond95.preheader:
432   %sunkaddr79 = ptrtoint ptr %4 to i64
433   %sunkaddr80 = add i64 %sunkaddr79, %lsr.iv27
434   %sunkaddr81 = inttoptr i64 %sunkaddr80 to ptr
435   %28 = load i8, ptr %sunkaddr81, align 1
436   %cmp97238 = icmp eq i8 %28, 0
437   br i1 %cmp97238, label %return, label %land.rhs99.preheader, !prof !1004
438 land.rhs99.preheader:
439   %scevgep31 = getelementptr i8, ptr %5, i64 %lsr.iv27
440   %scevgep40 = getelementptr i8, ptr %4, i64 %lsr.iv27
441   br label %land.rhs99
442 land.rhs99:
443   %lsr.iv17 = phi i64 [ 0, %land.rhs99.preheader ], [ %lsr.iv.next18, %if.then117 ]
444   %29 = phi i8 [ %31, %if.then117 ], [ %28, %land.rhs99.preheader ]
445   %scevgep32 = getelementptr i8, ptr %scevgep31, i64 %lsr.iv17
446   %30 = load i8, ptr %scevgep32, align 1
447   %cmp101 = icmp eq i8 %30, 0
448   br i1 %cmp101, label %return, label %while.body104, !prof !1005
449 while.body104:
450   %cmp107 = icmp eq i8 %29, %30
451   %cmp111 = icmp eq i8 %29, 42
452   %or.cond209 = or i1 %cmp107, %cmp111
453   %cmp115 = icmp eq i8 %30, 94
454   %or.cond210 = or i1 %or.cond209, %cmp115
455   br i1 %or.cond210, label %if.then117, label %return, !prof !1006
456 if.then117:
457   %scevgep41 = getelementptr i8, ptr %scevgep40, i64 %lsr.iv17
458   %scevgep42 = getelementptr i8, ptr %scevgep41, i64 1
459   %31 = load i8, ptr %scevgep42, align 1
460   %cmp97 = icmp eq i8 %31, 0
461   %lsr.iv.next18 = add i64 %lsr.iv17, 1
462   br i1 %cmp97, label %return, label %land.rhs99, !prof !1004
463 if.else123:
464   %cmp124 = icmp eq i8 %3, 1
465   %cmp127 = icmp eq i8 %2, 2
466   %or.cond160 = and i1 %cmp124, %cmp127
467   br i1 %or.cond160, label %while.cond130.preheader, label %return, !prof !1007
468 while.cond130.preheader:
469   %sunkaddr82 = ptrtoint ptr %4 to i64
470   %sunkaddr83 = add i64 %sunkaddr82, %lsr.iv27
471   %sunkaddr84 = inttoptr i64 %sunkaddr83 to ptr
472   %32 = load i8, ptr %sunkaddr84, align 1
473   %cmp132244 = icmp eq i8 %32, 0
474   br i1 %cmp132244, label %return, label %land.rhs134.preheader, !prof !1008
475 land.rhs134.preheader:
476   %scevgep29 = getelementptr i8, ptr %5, i64 %lsr.iv27
477   %scevgep37 = getelementptr i8, ptr %4, i64 %lsr.iv27
478   br label %land.rhs134
479 land.rhs134:
480   %lsr.iv22 = phi i64 [ 0, %land.rhs134.preheader ], [ %lsr.iv.next23, %if.then152 ]
481   %33 = phi i8 [ %35, %if.then152 ], [ %32, %land.rhs134.preheader ]
482   %scevgep30 = getelementptr i8, ptr %scevgep29, i64 %lsr.iv22
483   %34 = load i8, ptr %scevgep30, align 1
484   %cmp136 = icmp eq i8 %34, 0
485   br i1 %cmp136, label %return, label %while.body139, !prof !1009
486 while.body139:
487   %cmp142 = icmp eq i8 %33, %34
488   %cmp146 = icmp eq i8 %34, 42
489   %or.cond211 = or i1 %cmp142, %cmp146
490   %cmp150 = icmp eq i8 %33, 94
491   %or.cond212 = or i1 %or.cond211, %cmp150
492   br i1 %or.cond212, label %if.then152, label %return, !prof !1010
493 if.then152:
494   %scevgep38 = getelementptr i8, ptr %scevgep37, i64 %lsr.iv22
495   %scevgep39 = getelementptr i8, ptr %scevgep38, i64 1
496   %35 = load i8, ptr %scevgep39, align 1
497   %cmp132 = icmp eq i8 %35, 0
498   %lsr.iv.next23 = add i64 %lsr.iv22, 1
499   br i1 %cmp132, label %return, label %land.rhs134, !prof !1008
500 return:
501   %retval.0 = phi i32 [ 0, %entry ], [ 1, %land.lhs.true52 ], [ 1, %land.lhs.true43 ], [ 0, %if.else123 ], [ 1, %while.cond59.preheader ], [ 1, %while.cond95.preheader ], [ 1, %while.cond130.preheader ], [ 1, %land.lhs.true28 ], [ 1, %if.then83 ], [ 0, %lor.lhs.false74 ], [ 1, %land.rhs ], [ 1, %if.then117 ], [ 0, %while.body104 ], [ 1, %land.rhs99 ], [ 1, %if.then152 ], [ 0, %while.body139 ], [ 1, %land.rhs134 ], [ 0, %while.body ]
502   ret i32 %retval.0
504 !181 = !{!"branch_weights", i32 662038, i32 1}
505 !988 = !{!"branch_weights", i32 12091450, i32 1916}
506 !989 = !{!"branch_weights", i32 7564670, i32 4526781}
507 !990 = !{!"branch_weights", i32 7484958, i32 13283499}
508 !991 = !{!"branch_weights", i32 8677007, i32 4606493}
509 !992 = !{!"branch_weights", i32 -1172426948, i32 145094705}
510 !993 = !{!"branch_weights", i32 1468914, i32 5683688}
511 !994 = !{!"branch_weights", i32 114025221, i32 -1217548794, i32 -1199521551}
512 !995 = !{!"branch_weights", i32 1853716452, i32 -444717951}
513 !996 = !{!"branch_weights", i32 1004870, i32 20259}
514 !997 = !{!"branch_weights", i32 20071, i32 189}
515 !998 = !{!"branch_weights", i32 -1020255939, i32 572177766}
516 !999 = !{!"branch_weights", i32 2666513, i32 3466431}
517 !1000 = !{!"branch_weights", i32 5117635, i32 1859780}
518 !1001 = !{!"branch_weights", i32 354902465, i32 -1444604407}
519 !1002 = !{!"branch_weights", i32 -1762419279, i32 1592770684}
520 !1003 = !{!"branch_weights", i32 1435905930, i32 -1951930624}
521 !1004 = !{!"branch_weights", i32 1, i32 504888}
522 !1005 = !{!"branch_weights", i32 94662, i32 504888}
523 !1006 = !{!"branch_weights", i32 -1897793104, i32 160196332}
524 !1007 = !{!"branch_weights", i32 2074643678, i32 -29579071}
525 !1008 = !{!"branch_weights", i32 1, i32 226163}
526 !1009 = !{!"branch_weights", i32 58357, i32 226163}
527 !1010 = !{!"branch_weights", i32 -2072848646, i32 92907517}