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 3 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 7 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 20declare i32 @__maskrune(i32, i64) #7 21define 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 268entry: 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 273if.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 283while.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 290cond.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 295cond.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 300isupper.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 304lor.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 312cond.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 317cond.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 322isupper.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 326while.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 337if.end17: 338 %lsr.iv.next28 = add i64 %lsr.iv27, 1 339 br label %while.cond 340while.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 344if.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 356land.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 361land.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 369land.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 377lor.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 385land.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 395while.cond59.preheader: 396 %cmp61233.old = icmp eq i8 %18, 0 397 br i1 %cmp61233.old, label %return, label %land.rhs.preheader, !prof !999 398land.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 402land.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 409while.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 414lor.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 419if.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 426if.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 431while.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 438land.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 442land.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 449while.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 456if.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 463if.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 468while.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 475land.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 479land.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 486while.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 493if.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 500return: 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 503} 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} 528