blob: 5b501762418ef5070ea45ac1dca6f550e73a4c8b [file] [log] [blame]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
; RUN: llc < %s -mtriple=arm64-apple-ios7.0 -regalloc=greedy -regalloc-csr-first-time-cost=15 | FileCheck %s
; This testing case is reduced from 197.parser prune_match function.
; We make sure that we do not use callee-saved registers (x19 to x25).
; rdar://16162005
%struct.List_o_links_struct = type { i32, i32, i32, ptr }
%struct.Connector_struct = type { i16, i16, i8, i8, ptr, ptr }
%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 }
%struct._RuneRange = type { i32, ptr }
%struct._RuneEntry = type { i32, i32, i32, ptr }
%struct._RuneCharClass = type { [14 x i8], i32 }
%struct.Exp_struct = type { i8, i8, i8, i8, %union.anon }
%union.anon = type { ptr }
%struct.E_list_struct = type { ptr, ptr }
%struct.domain_struct = type { ptr, i32, ptr, i32, i32, ptr, ptr }
%struct.d_tree_leaf_struct = type { ptr, i32, ptr }
@_DefaultRuneLocale = external global %struct._RuneLocale
declare i32 @__maskrune(i32, i64) #7
define fastcc i32 @prune_match(ptr nocapture readonly %a, ptr nocapture readonly %b) #9 {
; CHECK-LABEL: prune_match:
; CHECK: ; %bb.0: ; %entry
; CHECK-NEXT: ldrh w8, [x0]
; CHECK-NEXT: ldrh w9, [x1]
; CHECK-NEXT: cmp w8, w9
; CHECK-NEXT: b.ne LBB0_47
; CHECK-NEXT: ; %bb.1: ; %if.end
; CHECK-NEXT: sub sp, sp, #64
; CHECK-NEXT: stp x29, x30, [sp, #48] ; 16-byte Folded Spill
; CHECK-NEXT: .cfi_def_cfa_offset 64
; CHECK-NEXT: .cfi_offset w30, -8
; CHECK-NEXT: .cfi_offset w29, -16
; CHECK-NEXT: Lloh0:
; CHECK-NEXT: adrp x14, __DefaultRuneLocale@GOTPAGE
; CHECK-NEXT: ldrb w12, [x0, #4]
; CHECK-NEXT: ldrb w13, [x1, #4]
; CHECK-NEXT: ldr x9, [x0, #16]
; CHECK-NEXT: ldr x10, [x1, #16]
; CHECK-NEXT: mov x11, xzr
; CHECK-NEXT: Lloh1:
; CHECK-NEXT: ldr x14, [x14, __DefaultRuneLocale@GOTPAGEOFF]
; CHECK-NEXT: ldrsb x8, [x9, x11]
; CHECK-NEXT: tbz x8, #63, LBB0_3
; CHECK-NEXT: LBB0_2: ; %cond.false.i.i
; CHECK-NEXT: stp x9, x0, [sp, #32] ; 16-byte Folded Spill
; CHECK-NEXT: mov w0, w8
; CHECK-NEXT: mov w1, #32768 ; =0x8000
; CHECK-NEXT: str x10, [sp, #8] ; 8-byte Folded Spill
; CHECK-NEXT: str x11, [sp, #24] ; 8-byte Folded Spill
; CHECK-NEXT: str w12, [sp, #4] ; 4-byte Folded Spill
; CHECK-NEXT: str w13, [sp, #20] ; 4-byte Folded Spill
; CHECK-NEXT: bl ___maskrune
; CHECK-NEXT: Lloh2:
; CHECK-NEXT: adrp x14, __DefaultRuneLocale@GOTPAGE
; CHECK-NEXT: mov w8, w0
; CHECK-NEXT: Lloh3:
; CHECK-NEXT: ldr x14, [x14, __DefaultRuneLocale@GOTPAGEOFF]
; CHECK-NEXT: ldp x11, x9, [sp, #24] ; 16-byte Folded Reload
; CHECK-NEXT: ldr w13, [sp, #20] ; 4-byte Folded Reload
; CHECK-NEXT: ldr w12, [sp, #4] ; 4-byte Folded Reload
; CHECK-NEXT: ldr x10, [sp, #8] ; 8-byte Folded Reload
; CHECK-NEXT: ldr x0, [sp, #40] ; 8-byte Folded Reload
; CHECK-NEXT: cbz w8, LBB0_4
; CHECK-NEXT: b LBB0_6
; CHECK-NEXT: LBB0_3: ; %cond.true.i.i
; CHECK-NEXT: add x8, x14, x8, lsl #2
; CHECK-NEXT: ldr w8, [x8, #60]
; CHECK-NEXT: and w8, w8, #0x8000
; CHECK-NEXT: cbnz w8, LBB0_6
; CHECK-NEXT: LBB0_4: ; %lor.rhs
; CHECK-NEXT: ldrsb x8, [x10, x11]
; CHECK-NEXT: tbnz x8, #63, LBB0_8
; CHECK-NEXT: ; %bb.5: ; %cond.true.i.i217
; CHECK-NEXT: add x8, x14, x8, lsl #2
; CHECK-NEXT: ldr w8, [x8, #60]
; CHECK-NEXT: and w8, w8, #0x8000
; CHECK-NEXT: cbz w8, LBB0_9
; CHECK-NEXT: LBB0_6: ; %while.body
; CHECK-NEXT: ldrb w8, [x9, x11]
; CHECK-NEXT: ldrb w15, [x10, x11]
; CHECK-NEXT: cmp w8, w15
; CHECK-NEXT: b.ne LBB0_42
; CHECK-NEXT: ; %bb.7: ; %if.end17
; CHECK-NEXT: add x11, x11, #1
; CHECK-NEXT: ldrsb x8, [x9, x11]
; CHECK-NEXT: tbz x8, #63, LBB0_3
; CHECK-NEXT: b LBB0_2
; CHECK-NEXT: LBB0_8: ; %cond.false.i.i219
; CHECK-NEXT: stp x9, x0, [sp, #32] ; 16-byte Folded Spill
; CHECK-NEXT: mov w0, w8
; CHECK-NEXT: mov w1, #32768 ; =0x8000
; CHECK-NEXT: str x10, [sp, #8] ; 8-byte Folded Spill
; CHECK-NEXT: str x11, [sp, #24] ; 8-byte Folded Spill
; CHECK-NEXT: str w12, [sp, #4] ; 4-byte Folded Spill
; CHECK-NEXT: str w13, [sp, #20] ; 4-byte Folded Spill
; CHECK-NEXT: bl ___maskrune
; CHECK-NEXT: Lloh4:
; CHECK-NEXT: adrp x14, __DefaultRuneLocale@GOTPAGE
; CHECK-NEXT: mov w8, w0
; CHECK-NEXT: Lloh5:
; CHECK-NEXT: ldr x14, [x14, __DefaultRuneLocale@GOTPAGEOFF]
; CHECK-NEXT: ldp x11, x9, [sp, #24] ; 16-byte Folded Reload
; CHECK-NEXT: ldr w13, [sp, #20] ; 4-byte Folded Reload
; CHECK-NEXT: ldr w12, [sp, #4] ; 4-byte Folded Reload
; CHECK-NEXT: ldr x10, [sp, #8] ; 8-byte Folded Reload
; CHECK-NEXT: ldr x0, [sp, #40] ; 8-byte Folded Reload
; CHECK-NEXT: cbnz w8, LBB0_6
; CHECK-NEXT: LBB0_9: ; %while.end
; CHECK-NEXT: orr w8, w13, w12
; CHECK-NEXT: cbnz w8, LBB0_24
; CHECK-NEXT: ; %bb.10: ; %if.then23
; CHECK-NEXT: ldr x12, [x0, #16]
; CHECK-NEXT: ldrb w8, [x9, x11]
; CHECK-NEXT: ldrb w13, [x12]
; CHECK-NEXT: cmp w13, #83
; CHECK-NEXT: b.eq LBB0_19
; CHECK-NEXT: LBB0_11: ; %while.cond59.preheader
; CHECK-NEXT: cbz w8, LBB0_23
; CHECK-NEXT: LBB0_12: ; %land.rhs.preheader
; CHECK-NEXT: add x12, x9, x11
; CHECK-NEXT: add x9, x10, x11
; CHECK-NEXT: add x10, x12, #1
; CHECK-NEXT: LBB0_13: ; %land.rhs
; CHECK-NEXT: ; =>This Inner Loop Header: Depth=1
; CHECK-NEXT: ldrb w11, [x9], #1
; CHECK-NEXT: cbz w11, LBB0_23
; CHECK-NEXT: ; %bb.14: ; %while.body66
; CHECK-NEXT: ; in Loop: Header=BB0_13 Depth=1
; CHECK-NEXT: cmp w8, #42
; CHECK-NEXT: b.eq LBB0_18
; CHECK-NEXT: ; %bb.15: ; %while.body66
; CHECK-NEXT: ; in Loop: Header=BB0_13 Depth=1
; CHECK-NEXT: cmp w11, #42
; CHECK-NEXT: b.eq LBB0_18
; CHECK-NEXT: ; %bb.16: ; %lor.lhs.false74
; CHECK-NEXT: ; in Loop: Header=BB0_13 Depth=1
; CHECK-NEXT: cmp w8, w11
; CHECK-NEXT: mov w0, wzr
; CHECK-NEXT: b.ne LBB0_43
; CHECK-NEXT: ; %bb.17: ; %lor.lhs.false74
; CHECK-NEXT: ; in Loop: Header=BB0_13 Depth=1
; CHECK-NEXT: cmp w8, #94
; CHECK-NEXT: b.eq LBB0_43
; CHECK-NEXT: LBB0_18: ; %if.then83
; CHECK-NEXT: ; in Loop: Header=BB0_13 Depth=1
; CHECK-NEXT: ldrb w8, [x10], #1
; CHECK-NEXT: mov w0, #1 ; =0x1
; CHECK-NEXT: cbnz w8, LBB0_13
; CHECK-NEXT: b LBB0_43
; CHECK-NEXT: LBB0_19: ; %land.lhs.true28
; CHECK-NEXT: cbz w8, LBB0_23
; CHECK-NEXT: ; %bb.20: ; %land.lhs.true28
; CHECK-NEXT: cmp w8, #112
; CHECK-NEXT: b.ne LBB0_12
; CHECK-NEXT: ; %bb.21: ; %land.lhs.true35
; CHECK-NEXT: ldrb w13, [x10, x11]
; CHECK-NEXT: cmp w13, #112
; CHECK-NEXT: b.ne LBB0_12
; CHECK-NEXT: ; %bb.22: ; %land.lhs.true43
; CHECK-NEXT: sub x12, x9, x12
; CHECK-NEXT: add x12, x12, x11
; CHECK-NEXT: cmp x12, #1
; CHECK-NEXT: b.ne LBB0_44
; CHECK-NEXT: LBB0_23:
; CHECK-NEXT: mov w0, #1 ; =0x1
; CHECK-NEXT: b LBB0_43
; CHECK-NEXT: LBB0_24: ; %if.else88
; CHECK-NEXT: cmp w12, #1
; CHECK-NEXT: b.ne LBB0_33
; CHECK-NEXT: ; %bb.25: ; %if.else88
; CHECK-NEXT: cmp w13, #2
; CHECK-NEXT: b.ne LBB0_33
; CHECK-NEXT: ; %bb.26: ; %while.cond95.preheader
; CHECK-NEXT: ldrb w12, [x9, x11]
; CHECK-NEXT: cbz w12, LBB0_23
; CHECK-NEXT: ; %bb.27: ; %land.rhs99.preheader
; CHECK-NEXT: mov x8, xzr
; CHECK-NEXT: mov w0, #1 ; =0x1
; CHECK-NEXT: b LBB0_29
; CHECK-NEXT: LBB0_28: ; %if.then117
; CHECK-NEXT: ; in Loop: Header=BB0_29 Depth=1
; CHECK-NEXT: add x12, x9, x8
; CHECK-NEXT: add x8, x8, #1
; CHECK-NEXT: add x12, x12, x11
; CHECK-NEXT: ldrb w12, [x12, #1]
; CHECK-NEXT: cbz w12, LBB0_43
; CHECK-NEXT: LBB0_29: ; %land.rhs99
; CHECK-NEXT: ; =>This Inner Loop Header: Depth=1
; CHECK-NEXT: add x13, x10, x8
; CHECK-NEXT: ldrb w13, [x13, x11]
; CHECK-NEXT: cbz w13, LBB0_23
; CHECK-NEXT: ; %bb.30: ; %while.body104
; CHECK-NEXT: ; in Loop: Header=BB0_29 Depth=1
; CHECK-NEXT: cmp w12, w13
; CHECK-NEXT: b.eq LBB0_28
; CHECK-NEXT: ; %bb.31: ; %while.body104
; CHECK-NEXT: ; in Loop: Header=BB0_29 Depth=1
; CHECK-NEXT: cmp w12, #42
; CHECK-NEXT: b.eq LBB0_28
; CHECK-NEXT: ; %bb.32: ; %while.body104
; CHECK-NEXT: ; in Loop: Header=BB0_29 Depth=1
; CHECK-NEXT: cmp w13, #94
; CHECK-NEXT: b.eq LBB0_28
; CHECK-NEXT: b LBB0_42
; CHECK-NEXT: LBB0_33: ; %if.else123
; CHECK-NEXT: cmp w13, #1
; CHECK-NEXT: mov w0, wzr
; CHECK-NEXT: b.ne LBB0_43
; CHECK-NEXT: ; %bb.34: ; %if.else123
; CHECK-NEXT: cmp w12, #2
; CHECK-NEXT: b.ne LBB0_43
; CHECK-NEXT: ; %bb.35: ; %while.cond130.preheader
; CHECK-NEXT: ldrb w8, [x9, x11]
; CHECK-NEXT: cbz w8, LBB0_23
; CHECK-NEXT: ; %bb.36: ; %land.rhs134.preheader
; CHECK-NEXT: mov x12, xzr
; CHECK-NEXT: mov w0, #1 ; =0x1
; CHECK-NEXT: b LBB0_38
; CHECK-NEXT: LBB0_37: ; %if.then152
; CHECK-NEXT: ; in Loop: Header=BB0_38 Depth=1
; CHECK-NEXT: add x8, x9, x12
; CHECK-NEXT: add x12, x12, #1
; CHECK-NEXT: add x8, x8, x11
; CHECK-NEXT: ldrb w8, [x8, #1]
; CHECK-NEXT: cbz w8, LBB0_43
; CHECK-NEXT: LBB0_38: ; %land.rhs134
; CHECK-NEXT: ; =>This Inner Loop Header: Depth=1
; CHECK-NEXT: add x13, x10, x12
; CHECK-NEXT: ldrb w13, [x13, x11]
; CHECK-NEXT: cbz w13, LBB0_23
; CHECK-NEXT: ; %bb.39: ; %while.body139
; CHECK-NEXT: ; in Loop: Header=BB0_38 Depth=1
; CHECK-NEXT: cmp w8, w13
; CHECK-NEXT: b.eq LBB0_37
; CHECK-NEXT: ; %bb.40: ; %while.body139
; CHECK-NEXT: ; in Loop: Header=BB0_38 Depth=1
; CHECK-NEXT: cmp w13, #42
; CHECK-NEXT: b.eq LBB0_37
; CHECK-NEXT: ; %bb.41: ; %while.body139
; CHECK-NEXT: ; in Loop: Header=BB0_38 Depth=1
; CHECK-NEXT: cmp w8, #94
; CHECK-NEXT: b.eq LBB0_37
; CHECK-NEXT: LBB0_42:
; CHECK-NEXT: mov w0, wzr
; CHECK-NEXT: LBB0_43:
; CHECK-NEXT: ldp x29, x30, [sp, #48] ; 16-byte Folded Reload
; CHECK-NEXT: add sp, sp, #64
; CHECK-NEXT: ret
; CHECK-NEXT: LBB0_44: ; %lor.lhs.false47
; CHECK-NEXT: cmp x12, #2
; CHECK-NEXT: b.ne LBB0_11
; CHECK-NEXT: ; %bb.45: ; %land.lhs.true52
; CHECK-NEXT: add x12, x9, x11
; CHECK-NEXT: mov w0, #1 ; =0x1
; CHECK-NEXT: ldurb w12, [x12, #-1]
; CHECK-NEXT: cmp w12, #73
; CHECK-NEXT: b.eq LBB0_43
; CHECK-NEXT: ; %bb.46: ; %land.lhs.true52
; CHECK-NEXT: cbz w8, LBB0_43
; CHECK-NEXT: b LBB0_12
; CHECK-NEXT: LBB0_47:
; CHECK-NEXT: mov w0, wzr
; CHECK-NEXT: ret
; CHECK-NEXT: .loh AdrpLdrGot Lloh0, Lloh1
; CHECK-NEXT: .loh AdrpLdrGot Lloh2, Lloh3
; CHECK-NEXT: .loh AdrpLdrGot Lloh4, Lloh5
entry:
%0 = load i16, ptr %a, align 2
%1 = load i16, ptr %b, align 2
%cmp = icmp eq i16 %0, %1
br i1 %cmp, label %if.end, label %return, !prof !988
if.end:
%priority = getelementptr inbounds %struct.Connector_struct, ptr %a, i64 0, i32 2
%2 = load i8, ptr %priority, align 1
%priority5 = getelementptr inbounds %struct.Connector_struct, ptr %b, i64 0, i32 2
%3 = load i8, ptr %priority5, align 1
%string = getelementptr inbounds %struct.Connector_struct, ptr %a, i64 0, i32 5
%4 = load ptr, ptr %string, align 8
%string7 = getelementptr inbounds %struct.Connector_struct, ptr %b, i64 0, i32 5
%5 = load ptr, ptr %string7, align 8
br label %while.cond
while.cond:
%lsr.iv27 = phi i64 [ %lsr.iv.next28, %if.end17 ], [ 0, %if.end ]
%scevgep55 = getelementptr i8, ptr %4, i64 %lsr.iv27
%6 = load i8, ptr %scevgep55, align 1
%idxprom.i.i = sext i8 %6 to i64
%isascii.i.i224 = icmp sgt i8 %6, -1
br i1 %isascii.i.i224, label %cond.true.i.i, label %cond.false.i.i, !prof !181
cond.true.i.i:
%arrayidx.i.i = getelementptr inbounds %struct._RuneLocale, ptr @_DefaultRuneLocale, i64 0, i32 5, i64 %idxprom.i.i
%7 = load i32, ptr %arrayidx.i.i, align 4
%and.i.i = and i32 %7, 32768
br label %isupper.exit
cond.false.i.i:
%8 = trunc i64 %idxprom.i.i to i8
%conv8 = sext i8 %8 to i32
%call3.i.i = tail call i32 @__maskrune(i32 %conv8, i64 32768) #3
br label %isupper.exit
isupper.exit:
%tobool1.sink.i.in.i = phi i32 [ %and.i.i, %cond.true.i.i ], [ %call3.i.i, %cond.false.i.i ]
%tobool1.sink.i.i = icmp eq i32 %tobool1.sink.i.in.i, 0
br i1 %tobool1.sink.i.i, label %lor.rhs, label %while.body, !prof !989
lor.rhs:
%sunkaddr = ptrtoint ptr %5 to i64
%sunkaddr58 = add i64 %sunkaddr, %lsr.iv27
%sunkaddr59 = inttoptr i64 %sunkaddr58 to ptr
%9 = load i8, ptr %sunkaddr59, align 1
%idxprom.i.i214 = sext i8 %9 to i64
%isascii.i.i213225 = icmp sgt i8 %9, -1
br i1 %isascii.i.i213225, label %cond.true.i.i217, label %cond.false.i.i219, !prof !181
cond.true.i.i217:
%arrayidx.i.i215 = getelementptr inbounds %struct._RuneLocale, ptr @_DefaultRuneLocale, i64 0, i32 5, i64 %idxprom.i.i214
%10 = load i32, ptr %arrayidx.i.i215, align 4
%and.i.i216 = and i32 %10, 32768
br label %isupper.exit223
cond.false.i.i219:
%11 = trunc i64 %idxprom.i.i214 to i8
%conv9 = sext i8 %11 to i32
%call3.i.i218 = tail call i32 @__maskrune(i32 %conv9, i64 32768) #3
br label %isupper.exit223
isupper.exit223:
%tobool1.sink.i.in.i220 = phi i32 [ %and.i.i216, %cond.true.i.i217 ], [ %call3.i.i218, %cond.false.i.i219 ]
%tobool1.sink.i.i221 = icmp eq i32 %tobool1.sink.i.in.i220, 0
br i1 %tobool1.sink.i.i221, label %while.end, label %while.body, !prof !990
while.body:
%sunkaddr60 = ptrtoint ptr %4 to i64
%sunkaddr61 = add i64 %sunkaddr60, %lsr.iv27
%sunkaddr62 = inttoptr i64 %sunkaddr61 to ptr
%12 = load i8, ptr %sunkaddr62, align 1
%sunkaddr63 = ptrtoint ptr %5 to i64
%sunkaddr64 = add i64 %sunkaddr63, %lsr.iv27
%sunkaddr65 = inttoptr i64 %sunkaddr64 to ptr
%13 = load i8, ptr %sunkaddr65, align 1
%cmp14 = icmp eq i8 %12, %13
br i1 %cmp14, label %if.end17, label %return, !prof !991
if.end17:
%lsr.iv.next28 = add i64 %lsr.iv27, 1
br label %while.cond
while.end:
%14 = or i8 %3, %2
%15 = icmp eq i8 %14, 0
br i1 %15, label %if.then23, label %if.else88, !prof !992
if.then23:
%sunkaddr66 = ptrtoint ptr %a to i64
%sunkaddr67 = add i64 %sunkaddr66, 16
%sunkaddr68 = inttoptr i64 %sunkaddr67 to ptr
%16 = load ptr, ptr %sunkaddr68, align 8
%17 = load i8, ptr %16, align 1
%cmp26 = icmp eq i8 %17, 83
%sunkaddr69 = ptrtoint ptr %4 to i64
%sunkaddr70 = add i64 %sunkaddr69, %lsr.iv27
%sunkaddr71 = inttoptr i64 %sunkaddr70 to ptr
%18 = load i8, ptr %sunkaddr71, align 1
br i1 %cmp26, label %land.lhs.true28, label %while.cond59.preheader, !prof !993
land.lhs.true28:
switch i8 %18, label %land.rhs.preheader [
i8 112, label %land.lhs.true35
i8 0, label %return
], !prof !994
land.lhs.true35:
%sunkaddr72 = ptrtoint ptr %5 to i64
%sunkaddr73 = add i64 %sunkaddr72, %lsr.iv27
%sunkaddr74 = inttoptr i64 %sunkaddr73 to ptr
%19 = load i8, ptr %sunkaddr74, align 1
switch i8 %19, label %land.rhs.preheader [
i8 112, label %land.lhs.true43
], !prof !995
land.lhs.true43:
%20 = ptrtoint ptr %16 to i64
%21 = sub i64 0, %20
%scevgep52 = getelementptr i8, ptr %4, i64 %21
%scevgep53 = getelementptr i8, ptr %scevgep52, i64 %lsr.iv27
%scevgep54 = getelementptr i8, ptr %scevgep53, i64 -1
%cmp45 = icmp eq ptr %scevgep54, null
br i1 %cmp45, label %return, label %lor.lhs.false47, !prof !996
lor.lhs.false47:
%22 = ptrtoint ptr %16 to i64
%23 = sub i64 0, %22
%scevgep47 = getelementptr i8, ptr %4, i64 %23
%scevgep48 = getelementptr i8, ptr %scevgep47, i64 %lsr.iv27
%scevgep49 = getelementptr i8, ptr %scevgep48, i64 -2
%cmp50 = icmp eq ptr %scevgep49, null
br i1 %cmp50, label %land.lhs.true52, label %while.cond59.preheader, !prof !997
land.lhs.true52:
%sunkaddr75 = ptrtoint ptr %4 to i64
%sunkaddr76 = add i64 %sunkaddr75, %lsr.iv27
%sunkaddr77 = add i64 %sunkaddr76, -1
%sunkaddr78 = inttoptr i64 %sunkaddr77 to ptr
%24 = load i8, ptr %sunkaddr78, align 1
%cmp55 = icmp eq i8 %24, 73
%cmp61233 = icmp eq i8 %18, 0
%or.cond265 = or i1 %cmp55, %cmp61233
br i1 %or.cond265, label %return, label %land.rhs.preheader, !prof !998
while.cond59.preheader:
%cmp61233.old = icmp eq i8 %18, 0
br i1 %cmp61233.old, label %return, label %land.rhs.preheader, !prof !999
land.rhs.preheader:
%scevgep33 = getelementptr i8, ptr %5, i64 %lsr.iv27
%scevgep43 = getelementptr i8, ptr %4, i64 %lsr.iv27
br label %land.rhs
land.rhs:
%lsr.iv = phi i64 [ 0, %land.rhs.preheader ], [ %lsr.iv.next, %if.then83 ]
%25 = phi i8 [ %27, %if.then83 ], [ %18, %land.rhs.preheader ]
%scevgep34 = getelementptr i8, ptr %scevgep33, i64 %lsr.iv
%26 = load i8, ptr %scevgep34, align 1
%cmp64 = icmp eq i8 %26, 0
br i1 %cmp64, label %return, label %while.body66, !prof !1000
while.body66:
%cmp68 = icmp eq i8 %25, 42
%cmp72 = icmp eq i8 %26, 42
%or.cond = or i1 %cmp68, %cmp72
br i1 %or.cond, label %if.then83, label %lor.lhs.false74, !prof !1001
lor.lhs.false74:
%cmp77 = icmp ne i8 %25, %26
%cmp81 = icmp eq i8 %25, 94
%or.cond208 = or i1 %cmp77, %cmp81
br i1 %or.cond208, label %return, label %if.then83, !prof !1002
if.then83:
%scevgep44 = getelementptr i8, ptr %scevgep43, i64 %lsr.iv
%scevgep45 = getelementptr i8, ptr %scevgep44, i64 1
%27 = load i8, ptr %scevgep45, align 1
%cmp61 = icmp eq i8 %27, 0
%lsr.iv.next = add i64 %lsr.iv, 1
br i1 %cmp61, label %return, label %land.rhs, !prof !999
if.else88:
%cmp89 = icmp eq i8 %2, 1
%cmp92 = icmp eq i8 %3, 2
%or.cond159 = and i1 %cmp89, %cmp92
br i1 %or.cond159, label %while.cond95.preheader, label %if.else123, !prof !1003
while.cond95.preheader:
%sunkaddr79 = ptrtoint ptr %4 to i64
%sunkaddr80 = add i64 %sunkaddr79, %lsr.iv27
%sunkaddr81 = inttoptr i64 %sunkaddr80 to ptr
%28 = load i8, ptr %sunkaddr81, align 1
%cmp97238 = icmp eq i8 %28, 0
br i1 %cmp97238, label %return, label %land.rhs99.preheader, !prof !1004
land.rhs99.preheader:
%scevgep31 = getelementptr i8, ptr %5, i64 %lsr.iv27
%scevgep40 = getelementptr i8, ptr %4, i64 %lsr.iv27
br label %land.rhs99
land.rhs99:
%lsr.iv17 = phi i64 [ 0, %land.rhs99.preheader ], [ %lsr.iv.next18, %if.then117 ]
%29 = phi i8 [ %31, %if.then117 ], [ %28, %land.rhs99.preheader ]
%scevgep32 = getelementptr i8, ptr %scevgep31, i64 %lsr.iv17
%30 = load i8, ptr %scevgep32, align 1
%cmp101 = icmp eq i8 %30, 0
br i1 %cmp101, label %return, label %while.body104, !prof !1005
while.body104:
%cmp107 = icmp eq i8 %29, %30
%cmp111 = icmp eq i8 %29, 42
%or.cond209 = or i1 %cmp107, %cmp111
%cmp115 = icmp eq i8 %30, 94
%or.cond210 = or i1 %or.cond209, %cmp115
br i1 %or.cond210, label %if.then117, label %return, !prof !1006
if.then117:
%scevgep41 = getelementptr i8, ptr %scevgep40, i64 %lsr.iv17
%scevgep42 = getelementptr i8, ptr %scevgep41, i64 1
%31 = load i8, ptr %scevgep42, align 1
%cmp97 = icmp eq i8 %31, 0
%lsr.iv.next18 = add i64 %lsr.iv17, 1
br i1 %cmp97, label %return, label %land.rhs99, !prof !1004
if.else123:
%cmp124 = icmp eq i8 %3, 1
%cmp127 = icmp eq i8 %2, 2
%or.cond160 = and i1 %cmp124, %cmp127
br i1 %or.cond160, label %while.cond130.preheader, label %return, !prof !1007
while.cond130.preheader:
%sunkaddr82 = ptrtoint ptr %4 to i64
%sunkaddr83 = add i64 %sunkaddr82, %lsr.iv27
%sunkaddr84 = inttoptr i64 %sunkaddr83 to ptr
%32 = load i8, ptr %sunkaddr84, align 1
%cmp132244 = icmp eq i8 %32, 0
br i1 %cmp132244, label %return, label %land.rhs134.preheader, !prof !1008
land.rhs134.preheader:
%scevgep29 = getelementptr i8, ptr %5, i64 %lsr.iv27
%scevgep37 = getelementptr i8, ptr %4, i64 %lsr.iv27
br label %land.rhs134
land.rhs134:
%lsr.iv22 = phi i64 [ 0, %land.rhs134.preheader ], [ %lsr.iv.next23, %if.then152 ]
%33 = phi i8 [ %35, %if.then152 ], [ %32, %land.rhs134.preheader ]
%scevgep30 = getelementptr i8, ptr %scevgep29, i64 %lsr.iv22
%34 = load i8, ptr %scevgep30, align 1
%cmp136 = icmp eq i8 %34, 0
br i1 %cmp136, label %return, label %while.body139, !prof !1009
while.body139:
%cmp142 = icmp eq i8 %33, %34
%cmp146 = icmp eq i8 %34, 42
%or.cond211 = or i1 %cmp142, %cmp146
%cmp150 = icmp eq i8 %33, 94
%or.cond212 = or i1 %or.cond211, %cmp150
br i1 %or.cond212, label %if.then152, label %return, !prof !1010
if.then152:
%scevgep38 = getelementptr i8, ptr %scevgep37, i64 %lsr.iv22
%scevgep39 = getelementptr i8, ptr %scevgep38, i64 1
%35 = load i8, ptr %scevgep39, align 1
%cmp132 = icmp eq i8 %35, 0
%lsr.iv.next23 = add i64 %lsr.iv22, 1
br i1 %cmp132, label %return, label %land.rhs134, !prof !1008
return:
%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 ]
ret i32 %retval.0
}
!181 = !{!"branch_weights", i32 662038, i32 1}
!988 = !{!"branch_weights", i32 12091450, i32 1916}
!989 = !{!"branch_weights", i32 7564670, i32 4526781}
!990 = !{!"branch_weights", i32 7484958, i32 13283499}
!991 = !{!"branch_weights", i32 8677007, i32 4606493}
!992 = !{!"branch_weights", i32 -1172426948, i32 145094705}
!993 = !{!"branch_weights", i32 1468914, i32 5683688}
!994 = !{!"branch_weights", i32 114025221, i32 -1217548794, i32 -1199521551}
!995 = !{!"branch_weights", i32 1853716452, i32 -444717951}
!996 = !{!"branch_weights", i32 1004870, i32 20259}
!997 = !{!"branch_weights", i32 20071, i32 189}
!998 = !{!"branch_weights", i32 -1020255939, i32 572177766}
!999 = !{!"branch_weights", i32 2666513, i32 3466431}
!1000 = !{!"branch_weights", i32 5117635, i32 1859780}
!1001 = !{!"branch_weights", i32 354902465, i32 -1444604407}
!1002 = !{!"branch_weights", i32 -1762419279, i32 1592770684}
!1003 = !{!"branch_weights", i32 1435905930, i32 -1951930624}
!1004 = !{!"branch_weights", i32 1, i32 504888}
!1005 = !{!"branch_weights", i32 94662, i32 504888}
!1006 = !{!"branch_weights", i32 -1897793104, i32 160196332}
!1007 = !{!"branch_weights", i32 2074643678, i32 -29579071}
!1008 = !{!"branch_weights", i32 1, i32 226163}
!1009 = !{!"branch_weights", i32 58357, i32 226163}
!1010 = !{!"branch_weights", i32 -2072848646, i32 92907517}