brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.3 KiB · c248235 Raw
679 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-macosx -regalloc=greedy | FileCheck %s3 4; This testing case is reduced from 254.gap SyFgets function.5; We make sure a spill is hoisted to a cold BB inside the hotter outer loop.6 7%struct.TMP.1 = type { ptr, ptr, [1024 x i8] }8%struct.TMP.2 = type { ptr, i32, i32, i16, i16, %struct.TMP.3, i32, ptr, ptr, ptr, ptr, ptr, %struct.TMP.3, ptr, i32, [3 x i8], [1 x i8], %struct.TMP.3, i32, i64 }9%struct.TMP.4 = type opaque10%struct.TMP.3 = type { ptr, i32 }11 12@syBuf = external global [16 x %struct.TMP.1], align 1613@syHistory = external global [8192 x i8], align 1614@SyFgets.yank = external global [512 x i8], align 1615@syCTRO = external global i32, align 416 17define ptr @SyFgets(ptr %line, i64 %length, i64 %fid) {18; CHECK-LABEL: SyFgets:19; CHECK:       ## %bb.0: ## %entry20; CHECK-NEXT:    pushq %rbp21; CHECK-NEXT:    .cfi_def_cfa_offset 1622; CHECK-NEXT:    pushq %r1523; CHECK-NEXT:    .cfi_def_cfa_offset 2424; CHECK-NEXT:    pushq %r1425; CHECK-NEXT:    .cfi_def_cfa_offset 3226; CHECK-NEXT:    pushq %r1327; CHECK-NEXT:    .cfi_def_cfa_offset 4028; CHECK-NEXT:    pushq %r1229; CHECK-NEXT:    .cfi_def_cfa_offset 4830; CHECK-NEXT:    pushq %rbx31; CHECK-NEXT:    .cfi_def_cfa_offset 5632; CHECK-NEXT:    subq $552, %rsp ## imm = 0x22833; CHECK-NEXT:    .cfi_def_cfa_offset 60834; CHECK-NEXT:    .cfi_offset %rbx, -5635; CHECK-NEXT:    .cfi_offset %r12, -4836; CHECK-NEXT:    .cfi_offset %r13, -4037; CHECK-NEXT:    .cfi_offset %r14, -3238; CHECK-NEXT:    .cfi_offset %r15, -2439; CHECK-NEXT:    .cfi_offset %rbp, -1640; CHECK-NEXT:    testq $-3, %rdx41; CHECK-NEXT:    jne LBB0_442; CHECK-NEXT:  ## %bb.1: ## %if.end43; CHECK-NEXT:    xorl %eax, %eax44; CHECK-NEXT:    testb %al, %al45; CHECK-NEXT:    jne LBB0_546; CHECK-NEXT:  ## %bb.2: ## %if.then447; CHECK-NEXT:    testb %al, %al48; CHECK-NEXT:    je LBB0_5449; CHECK-NEXT:  ## %bb.3: ## %SyTime.exit50; CHECK-NEXT:    testb %al, %al51; CHECK-NEXT:    je LBB0_5452; CHECK-NEXT:  LBB0_4: ## %cleanup53; CHECK-NEXT:    addq $552, %rsp ## imm = 0x22854; CHECK-NEXT:    popq %rbx55; CHECK-NEXT:    popq %r1256; CHECK-NEXT:    popq %r1357; CHECK-NEXT:    popq %r1458; CHECK-NEXT:    popq %r1559; CHECK-NEXT:    popq %rbp60; CHECK-NEXT:    retq61; CHECK-NEXT:  LBB0_5: ## %if.end2562; CHECK-NEXT:    testb %al, %al63; CHECK-NEXT:    je LBB0_5464; CHECK-NEXT:  ## %bb.6: ## %SyTime.exit272065; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rax66; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx67; CHECK-NEXT:    cmpq %rax, %rcx68; CHECK-NEXT:    jae LBB0_869; CHECK-NEXT:  ## %bb.7: ## %for.body.lr.ph70; CHECK-NEXT:    movq %rdx, %rbx71; CHECK-NEXT:    movl $512, %edx ## imm = 0x20072; CHECK-NEXT:    movl $32, %esi73; CHECK-NEXT:    movq %rdi, %r1474; CHECK-NEXT:    callq _memset75; CHECK-NEXT:    movq %r14, %rdi76; CHECK-NEXT:    movq %rbx, %rdx77; CHECK-NEXT:  LBB0_8: ## %while.body.preheader78; CHECK-NEXT:    imulq $1040, %rdx, %rax ## imm = 0x41079; CHECK-NEXT:    movq _syBuf@GOTPCREL(%rip), %rcx80; CHECK-NEXT:    leaq 8(%rcx,%rax), %rdx81; CHECK-NEXT:    movq _syCTRO@GOTPCREL(%rip), %rax82; CHECK-NEXT:    movl $1, %r13d83; CHECK-NEXT:    movb $1, %cl84; CHECK-NEXT:    .p2align 485; CHECK-NEXT:  LBB0_9: ## %do.body86; CHECK-NEXT:    ## =>This Inner Loop Header: Depth=187; CHECK-NEXT:    movl $0, (%rax)88; CHECK-NEXT:    testb %cl, %cl89; CHECK-NEXT:    jne LBB0_990; CHECK-NEXT:  ## %bb.10: ## %do.end91; CHECK-NEXT:    movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill92; CHECK-NEXT:    movq %rdi, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill93; CHECK-NEXT:    xorl %ebp, %ebp94; CHECK-NEXT:    testb %al, %al95; CHECK-NEXT:    jne LBB0_1196; CHECK-NEXT:  ## %bb.12: ## %while.body200.preheader97; CHECK-NEXT:    xorl %r12d, %r12d98; CHECK-NEXT:    leaq LJTI0_0(%rip), %rdx99; CHECK-NEXT:    leaq LJTI0_1(%rip), %r14100; CHECK-NEXT:    movb $1, %sil101; CHECK-NEXT:    movl $0, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Folded Spill102; CHECK-NEXT:    xorl %r15d, %r15d103; CHECK-NEXT:    jmp LBB0_13104; CHECK-NEXT:  LBB0_43: ## %while.cond1037.preheader105; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1106; CHECK-NEXT:    testb %r12b, %r12b107; CHECK-NEXT:    je LBB0_54108; CHECK-NEXT:    .p2align 4109; CHECK-NEXT:  LBB0_20: ## %while.cond197.backedge110; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1111; CHECK-NEXT:    decl %r13d112; CHECK-NEXT:    testl %r13d, %r13d113; CHECK-NEXT:    movl %ebp, %r15d114; CHECK-NEXT:    jle LBB0_21115; CHECK-NEXT:  LBB0_13: ## %while.body200116; CHECK-NEXT:    ## =>This Loop Header: Depth=1117; CHECK-NEXT:    ## Child Loop BB0_28 Depth 2118; CHECK-NEXT:    ## Child Loop BB0_37 Depth 2119; CHECK-NEXT:    leal -268(%rbp), %eax120; CHECK-NEXT:    cmpl $105, %eax121; CHECK-NEXT:    ja LBB0_14122; CHECK-NEXT:  ## %bb.55: ## %while.body200123; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1124; CHECK-NEXT:    movslq (%r14,%rax,4), %rax125; CHECK-NEXT:    addq %r14, %rax126; CHECK-NEXT:    jmpq *%rax127; CHECK-NEXT:  LBB0_25: ## %sw.bb474128; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1129; CHECK-NEXT:    testb %r12b, %r12b130; CHECK-NEXT:    ## implicit-def: $rbx131; CHECK-NEXT:    jne LBB0_33132; CHECK-NEXT:  ## %bb.26: ## %do.body479.preheader133; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1134; CHECK-NEXT:    testb %r12b, %r12b135; CHECK-NEXT:    ## implicit-def: $rbx136; CHECK-NEXT:    jne LBB0_33137; CHECK-NEXT:  ## %bb.27: ## %land.rhs485.preheader138; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1139; CHECK-NEXT:    ## implicit-def: $rax140; CHECK-NEXT:    jmp LBB0_28141; CHECK-NEXT:    .p2align 4142; CHECK-NEXT:  LBB0_31: ## %do.body479.backedge143; CHECK-NEXT:    ## in Loop: Header=BB0_28 Depth=2144; CHECK-NEXT:    leaq 1(%rbx), %rax145; CHECK-NEXT:    testb %r12b, %r12b146; CHECK-NEXT:    je LBB0_32147; CHECK-NEXT:  LBB0_28: ## %land.rhs485148; CHECK-NEXT:    ## Parent Loop BB0_13 Depth=1149; CHECK-NEXT:    ## => This Inner Loop Header: Depth=2150; CHECK-NEXT:    testb %sil, %sil151; CHECK-NEXT:    jne LBB0_54152; CHECK-NEXT:  ## %bb.29: ## %cond.true.i.i2780153; CHECK-NEXT:    ## in Loop: Header=BB0_28 Depth=2154; CHECK-NEXT:    movq %rax, %rbx155; CHECK-NEXT:    testb %al, %al156; CHECK-NEXT:    jne LBB0_31157; CHECK-NEXT:  ## %bb.30: ## %lor.rhs500158; CHECK-NEXT:    ## in Loop: Header=BB0_28 Depth=2159; CHECK-NEXT:    movl $256, %esi ## imm = 0x100160; CHECK-NEXT:    callq ___maskrune161; CHECK-NEXT:    movb $1, %sil162; CHECK-NEXT:    testb %al, %al163; CHECK-NEXT:    jne LBB0_31164; CHECK-NEXT:    jmp LBB0_33165; CHECK-NEXT:    .p2align 4166; CHECK-NEXT:  LBB0_14: ## %while.body200167; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1168; CHECK-NEXT:    leal 1(%rbp), %eax169; CHECK-NEXT:    cmpl $21, %eax170; CHECK-NEXT:    ja LBB0_20171; CHECK-NEXT:  ## %bb.15: ## %while.body200172; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1173; CHECK-NEXT:    movslq (%rdx,%rax,4), %rax174; CHECK-NEXT:    addq %rdx, %rax175; CHECK-NEXT:    jmpq *%rax176; CHECK-NEXT:  LBB0_18: ## %while.cond201.preheader177; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1178; CHECK-NEXT:    movl $1, %ebp179; CHECK-NEXT:    jmp LBB0_20180; CHECK-NEXT:  LBB0_44: ## %sw.bb1134181; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1182; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rax183; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx184; CHECK-NEXT:    cmpq %rax, %rcx185; CHECK-NEXT:    jb LBB0_54186; CHECK-NEXT:  ## %bb.45: ## in Loop: Header=BB0_13 Depth=1187; CHECK-NEXT:    movl $0, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Folded Spill188; CHECK-NEXT:    movl $268, %ebp ## imm = 0x10C189; CHECK-NEXT:    jmp LBB0_20190; CHECK-NEXT:  LBB0_39: ## %sw.bb566191; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1192; CHECK-NEXT:    movl $20, %ebp193; CHECK-NEXT:    jmp LBB0_20194; CHECK-NEXT:  LBB0_19: ## %sw.bb243195; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1196; CHECK-NEXT:    movl $2, %ebp197; CHECK-NEXT:    jmp LBB0_20198; CHECK-NEXT:  LBB0_32: ## %if.end517.loopexitsplit199; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1200; CHECK-NEXT:    incq %rbx201; CHECK-NEXT:  LBB0_33: ## %if.end517202; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1203; CHECK-NEXT:    leal -324(%r15), %eax204; CHECK-NEXT:    cmpl $59, %eax205; CHECK-NEXT:    ja LBB0_34206; CHECK-NEXT:  ## %bb.56: ## %if.end517207; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1208; CHECK-NEXT:    movabsq $576460756598390785, %rcx ## imm = 0x800000100000001209; CHECK-NEXT:    btq %rax, %rcx210; CHECK-NEXT:    jb LBB0_37211; CHECK-NEXT:  LBB0_34: ## %if.end517212; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1213; CHECK-NEXT:    cmpl $11, %r15d214; CHECK-NEXT:    je LBB0_37215; CHECK-NEXT:  ## %bb.35: ## %if.end517216; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1217; CHECK-NEXT:    cmpl $24, %r15d218; CHECK-NEXT:    je LBB0_37219; CHECK-NEXT:  ## %bb.36: ## %if.then532220; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1221; CHECK-NEXT:    movq _SyFgets.yank@GOTPCREL(%rip), %rax222; CHECK-NEXT:    movb $0, (%rax)223; CHECK-NEXT:    .p2align 4224; CHECK-NEXT:  LBB0_37: ## %for.cond534225; CHECK-NEXT:    ## Parent Loop BB0_13 Depth=1226; CHECK-NEXT:    ## => This Inner Loop Header: Depth=2227; CHECK-NEXT:    testb %r12b, %r12b228; CHECK-NEXT:    jne LBB0_37229; CHECK-NEXT:  ## %bb.38: ## %for.cond542.preheader230; CHECK-NEXT:    ## in Loop: Header=BB0_13 Depth=1231; CHECK-NEXT:    testb %al, %al232; CHECK-NEXT:    movb $0, (%rbx)233; CHECK-NEXT:    leaq LJTI0_0(%rip), %rdx234; CHECK-NEXT:    jmp LBB0_20235; CHECK-NEXT:    .p2align 4236; CHECK-NEXT:  LBB0_41: ## %while.cond864237; CHECK-NEXT:    ## =>This Inner Loop Header: Depth=1238; CHECK-NEXT:    jmp LBB0_41239; CHECK-NEXT:    .p2align 4240; CHECK-NEXT:  LBB0_42: ## %while.cond962241; CHECK-NEXT:    ## =>This Inner Loop Header: Depth=1242; CHECK-NEXT:    jmp LBB0_42243; CHECK-NEXT:    .p2align 4244; CHECK-NEXT:  LBB0_24: ## %for.cond357245; CHECK-NEXT:    ## =>This Inner Loop Header: Depth=1246; CHECK-NEXT:    jmp LBB0_24247; CHECK-NEXT:  LBB0_11:248; CHECK-NEXT:    movl $0, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Folded Spill249; CHECK-NEXT:  LBB0_21: ## %while.end1465250; CHECK-NEXT:    incl %ebp251; CHECK-NEXT:    cmpl $16, %ebp252; CHECK-NEXT:    ja LBB0_49253; CHECK-NEXT:  ## %bb.22: ## %while.end1465254; CHECK-NEXT:    movl $83969, %eax ## imm = 0x14801255; CHECK-NEXT:    btl %ebp, %eax256; CHECK-NEXT:    jae LBB0_49257; CHECK-NEXT:  ## %bb.23:258; CHECK-NEXT:    xorl %ebx, %ebx259; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 ## 8-byte Reload260; CHECK-NEXT:  LBB0_47: ## %if.then1477261; CHECK-NEXT:    movl $1, %edx262; CHECK-NEXT:    callq _write263; CHECK-NEXT:    subq %rbx, %r14264; CHECK-NEXT:    movq _syHistory@GOTPCREL(%rip), %rax265; CHECK-NEXT:    leaq 8189(%r14,%rax), %rax266; CHECK-NEXT:    .p2align 4267; CHECK-NEXT:  LBB0_48: ## %for.body1723268; CHECK-NEXT:    ## =>This Inner Loop Header: Depth=1269; CHECK-NEXT:    decq %rax270; CHECK-NEXT:    jmp LBB0_48271; CHECK-NEXT:  LBB0_46: ## %if.then1477.loopexit272; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 ## 8-byte Reload273; CHECK-NEXT:    movq %r14, %rbx274; CHECK-NEXT:    jmp LBB0_47275; CHECK-NEXT:  LBB0_16: ## %while.cond635.preheader276; CHECK-NEXT:    testb %al, %al277; CHECK-NEXT:    je LBB0_40278; CHECK-NEXT:    .p2align 4279; CHECK-NEXT:  LBB0_17: ## %for.body643.us280; CHECK-NEXT:    ## =>This Inner Loop Header: Depth=1281; CHECK-NEXT:    jmp LBB0_17282; CHECK-NEXT:    .p2align 4283; CHECK-NEXT:  LBB0_40: ## %while.cond661284; CHECK-NEXT:    ## =>This Inner Loop Header: Depth=1285; CHECK-NEXT:    jmp LBB0_40286; CHECK-NEXT:  LBB0_49: ## %for.cond1480.preheader287; CHECK-NEXT:    xorl %eax, %eax288; CHECK-NEXT:    testb %al, %al289; CHECK-NEXT:    je LBB0_54290; CHECK-NEXT:  ## %bb.50: ## %for.body1664.lr.ph291; CHECK-NEXT:    xorl %eax, %eax292; CHECK-NEXT:    testb %al, %al293; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 ## 8-byte Reload294; CHECK-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %ebp ## 4-byte Reload295; CHECK-NEXT:    jne LBB0_53296; CHECK-NEXT:  ## %bb.51: ## %while.body1679.preheader297; CHECK-NEXT:    incl %ebp298; CHECK-NEXT:    xorl %ebx, %ebx299; CHECK-NEXT:    .p2align 4300; CHECK-NEXT:  LBB0_52: ## %while.body1679301; CHECK-NEXT:    ## =>This Inner Loop Header: Depth=1302; CHECK-NEXT:    movq (%r14), %rdi303; CHECK-NEXT:    callq _fileno304; CHECK-NEXT:    incl %ebp305; CHECK-NEXT:    testb %bl, %bl306; CHECK-NEXT:    jne LBB0_52307; CHECK-NEXT:  LBB0_53: ## %while.cond1683.preheader308; CHECK-NEXT:    testb %al, %al309; CHECK-NEXT:  LBB0_54: ## %if.then.i310; CHECK-NEXT:    ud2311entry:312  %sub.ptr.rhs.cast646 = ptrtoint ptr %line to i64313  %old = alloca [512 x i8], align 16314  switch i64 %fid, label %if.then [315    i64 2, label %if.end316    i64 0, label %if.end317  ]318 319if.then:320  br label %cleanup321 322if.end:323  switch i64 undef, label %if.end25 [324    i64 0, label %if.then4325    i64 1, label %if.end25326  ]327 328if.then4:329  br i1 poison, label %SyTime.exit, label %if.then.i330 331if.then.i:332  unreachable333 334SyTime.exit:335  br i1 poison, label %SyTime.exit2681, label %if.then.i2673336 337if.then.i2673:338  unreachable339 340SyTime.exit2681:341  br label %cleanup342 343land.lhs.true14:344  unreachable345 346if.end25:347  br i1 poison, label %SyTime.exit2720, label %if.then.i2712348 349if.then.i2712:350  unreachable351 352SyTime.exit2720:353  %add.ptr = getelementptr [512 x i8], ptr %old, i64 0, i64 512354  %cmp293427 = icmp ult ptr %old, %add.ptr355  br i1 %cmp293427, label %for.body.lr.ph, label %while.body.preheader356 357for.body.lr.ph:358  call void @llvm.memset.p0.i64(ptr align 16 undef, i8 32, i64 512, i1 false)359  br label %while.body.preheader360 361while.body.preheader:362  %add.ptr1603 = getelementptr [512 x i8], ptr null, i64 0, i64 512363  %echo.i3101 = getelementptr [16 x %struct.TMP.1], ptr @syBuf, i64 0, i64 %fid, i32 1364  %0 = xor i64 %sub.ptr.rhs.cast646, -1365  br label %do.body366 367do.body:368  %ch2.0 = phi i32 [ 0, %while.body.preheader ], [ %ch.12.ch2.12, %do.body ]369  %rep.0 = phi i32 [ 1, %while.body.preheader ], [ %rep.6, %do.body ]370  store i32 0, ptr @syCTRO, align 4, !tbaa !1371  %ch.0.ch2.0 = select i1 undef, i32 14, i32 %ch2.0372  %ch2.2 = select i1 undef, i32 0, i32 %ch.0.ch2.0373  %ch.2.ch2.2 = select i1 undef, i32 0, i32 %ch2.2374  %ch2.4 = select i1 undef, i32 278, i32 %ch.2.ch2.2375  %ch2.5 = select i1 undef, i32 0, i32 %ch2.4376  %rep.2 = select i1 undef, i32 undef, i32 %rep.0377  %ch.5.ch2.5 = select i1 undef, i32 undef, i32 %ch2.5378  %ch2.7 = select i1 undef, i32 0, i32 %ch.5.ch2.5379  %rep.3 = select i1 undef, i32 undef, i32 %rep.2380  %ch.7.ch2.7 = select i1 false, i32 0, i32 %ch2.7381  %mul98.rep.3 = select i1 false, i32 0, i32 %rep.3382  %ch2.9 = select i1 undef, i32 undef, i32 %ch.7.ch2.7383  %rep.5 = select i1 undef, i32 undef, i32 %mul98.rep.3384  %ch2.10 = select i1 false, i32 undef, i32 %ch2.9385  %rep.6 = select i1 false, i32 undef, i32 %rep.5386  %isdigittmp = add i32 %ch2.10, -48387  %isdigit = icmp ult i32 %isdigittmp, 10388  %cmp119 = icmp eq i32 undef, 22389  %or.cond1875 = and i1 %isdigit, %cmp119390  %ch.10.ch2.10 = select i1 %or.cond1875, i32 undef, i32 %ch2.10391  %.ch.10 = select i1 %or.cond1875, i32 0, i32 undef392  %ch2.12 = select i1 undef, i32 %.ch.10, i32 %ch.10.ch2.10393  %ch.12 = select i1 undef, i32 0, i32 %.ch.10394  %ch.12.ch2.12 = select i1 false, i32 %ch.12, i32 %ch2.12395  %.ch.12 = select i1 false, i32 0, i32 %ch.12396  %cmp147 = icmp eq i32 %.ch.12, 0397  br i1 %cmp147, label %do.body, label %do.end398 399do.end:400  %cmp164 = icmp eq i32 %ch.12.ch2.12, 21401  %mul167 = shl i32 %rep.6, 2402  %rep.8 = select i1 %cmp164, i32 %mul167, i32 %rep.6403  %..ch.19 = select i1 false, i32 2, i32 0404  br i1 poison, label %while.body200, label %while.end1465405 406while.body200:407  %dec3386.in = phi i32 [ %dec3386, %while.cond197.backedge ], [ %rep.8, %do.end ]408  %oldc.13384 = phi i32 [ %oldc.1.be, %while.cond197.backedge ], [ 0, %do.end ]409  %ch.213379 = phi i32 [ %last.1.be, %while.cond197.backedge ], [ %..ch.19, %do.end ]410  %last.13371 = phi i32 [ %last.1.be, %while.cond197.backedge ], [ 0, %do.end ]411  %dec3386 = add i32 %dec3386.in, -1412  switch i32 %ch.213379, label %sw.default [413    i32 1, label %while.cond201.preheader414    i32 322, label %sw.bb206415    i32 354, label %sw.bb206416    i32 2, label %sw.bb243417    i32 364, label %sw.bb1077418    i32 326, label %sw.bb256419    i32 358, label %sw.bb256420    i32 341, label %sw.bb979421    i32 323, label %while.cond1037.preheader422    i32 373, label %sw.bb979423    i32 4, label %if.then1477424    i32 332, label %sw.bb1077425    i32 11, label %for.cond357426    i32 355, label %while.cond1037.preheader427    i32 324, label %sw.bb474428    i32 356, label %sw.bb474429    i32 20, label %sw.bb566430    i32 -1, label %while.cond197.backedge431    i32 268, label %sw.bb1134432    i32 16, label %while.cond635.preheader433    i32 18, label %sw.bb956434    i32 316, label %while.cond864435  ]436 437while.cond1037.preheader:438  %cmp10393273 = icmp eq i8 undef, 0439  br i1 %cmp10393273, label %if.end1070, label %land.rhs1041440 441while.cond635.preheader:442  br i1 poison, label %for.body643.us, label %while.cond661443 444for.body643.us:445  br label %for.body643.us446 447while.cond201.preheader:448  %umax = select i1 false, i64 undef, i64 %0449  %1 = xor i64 %umax, -1450  %2 = inttoptr i64 %1 to ptr451  br label %while.cond197.backedge452 453sw.bb206:454  br label %while.cond197.backedge455 456sw.bb243:457  br label %while.cond197.backedge458 459sw.bb256:460  br label %while.cond197.backedge461 462while.cond197.backedge:463  %last.1.be = phi i32 [ %ch.213379, %sw.default ], [ -1, %while.body200 ], [ %ch.213379, %sw.bb1077 ], [ %ch.213379, %sw.bb979 ], [ 18, %sw.bb956 ], [ 20, %sw.bb566 ], [ %ch.213379, %for.end552 ], [ %ch.213379, %sw.bb256 ], [ 2, %sw.bb243 ], [ 1, %while.cond201.preheader ], [ 268, %for.cond1145.preheader ], [ %ch.213379, %sw.bb206 ]464  %oldc.1.be = phi i32 [ %oldc.13384, %sw.default ], [ %oldc.13384, %while.body200 ], [ %oldc.13384, %sw.bb1077 ], [ %oldc.13384, %sw.bb979 ], [ %oldc.13384, %sw.bb956 ], [ %oldc.13384, %sw.bb566 ], [ %oldc.13384, %for.end552 ], [ %oldc.13384, %sw.bb256 ], [ %oldc.13384, %sw.bb243 ], [ %oldc.13384, %while.cond201.preheader ], [ 0, %for.cond1145.preheader ], [ %oldc.13384, %sw.bb206 ]465  %cmp198 = icmp sgt i32 %dec3386, 0466  br i1 %cmp198, label %while.body200, label %while.end1465467 468for.cond357:469  br label %for.cond357470 471sw.bb474:472  ; spill is hoisted here. Although loop depth1 is even hotter than loop depth2, sw.bb474 is still cold.473  %cmp476 = icmp eq i8 undef, 0474  br i1 %cmp476, label %if.end517, label %do.body479.preheader475 476do.body479.preheader:477  %cmp4833314 = icmp eq i8 undef, 0478  br i1 %cmp4833314, label %if.end517, label %land.rhs485479 480land.rhs485:481  %incdec.ptr4803316 = phi ptr [ %incdec.ptr480, %do.body479.backedge.land.rhs485_crit_edge ], [ undef, %do.body479.preheader ]482  %isascii.i.i27763151 = icmp sgt i8 undef, -1483  br i1 %isascii.i.i27763151, label %cond.true.i.i2780, label %cond.false.i.i2782484 485cond.true.i.i2780:486  br i1 poison, label %land.lhs.true490, label %lor.rhs500487 488cond.false.i.i2782:489  unreachable490 491land.lhs.true490:492  br i1 false, label %lor.rhs500, label %do.body479.backedge493 494lor.rhs500:495  ; Make sure spill is hoisted to a cold preheader in outside loop.496  %call3.i.i2792 = call i32 @__maskrune(i32 undef, i64 256)497  br i1 poison, label %land.lhs.true504, label %do.body479.backedge498 499land.lhs.true504:500  br i1 poison, label %do.body479.backedge, label %if.end517501 502do.body479.backedge:503  %incdec.ptr480 = getelementptr i8, ptr %incdec.ptr4803316, i64 1504  %cmp483 = icmp eq i8 undef, 0505  br i1 %cmp483, label %if.end517, label %do.body479.backedge.land.rhs485_crit_edge506 507do.body479.backedge.land.rhs485_crit_edge:508  br label %land.rhs485509 510if.end517:511  %q.4 = phi ptr [ undef, %sw.bb474 ], [ undef, %do.body479.preheader ], [ %incdec.ptr480, %do.body479.backedge ], [ %incdec.ptr4803316, %land.lhs.true504 ]512  switch i32 %last.13371, label %if.then532 [513    i32 383, label %for.cond534514    i32 356, label %for.cond534515    i32 324, label %for.cond534516    i32 24, label %for.cond534517    i32 11, label %for.cond534518  ]519 520if.then532:521  store i8 0, ptr @SyFgets.yank, align 16, !tbaa !5522  br label %for.cond534523 524for.cond534:525  %cmp536 = icmp eq i8 undef, 0526  br i1 %cmp536, label %for.cond542.preheader, label %for.cond534527 528for.cond542.preheader:529  br i1 poison, label %for.body545, label %for.end552530 531for.body545:532  br i1 poison, label %for.end552, label %for.body545533 534for.end552:535  %s.2.lcssa = phi ptr [ undef, %for.cond542.preheader ], [ %q.4, %for.body545 ]536  %sub.ptr.lhs.cast553 = ptrtoint ptr %s.2.lcssa to i64537  %sub.ptr.sub555 = sub i64 %sub.ptr.lhs.cast553, 0538  %arrayidx556 = getelementptr i8, ptr null, i64 %sub.ptr.sub555539  store i8 0, ptr %arrayidx556, align 1, !tbaa !5540  br label %while.cond197.backedge541 542sw.bb566:543  br label %while.cond197.backedge544 545while.cond661:546  br label %while.cond661547 548while.cond864:549  br label %while.cond864550 551sw.bb956:552  br i1 poison, label %if.then959, label %while.cond197.backedge553 554if.then959:555  br label %while.cond962556 557while.cond962:558  br label %while.cond962559 560sw.bb979:561  br label %while.cond197.backedge562 563land.rhs1041:564  unreachable565 566if.end1070:567  br label %sw.bb1077568 569sw.bb1077:570  br label %while.cond197.backedge571 572sw.bb1134:573  br i1 false, label %for.body1139, label %for.cond1145.preheader574 575for.cond1145.preheader:576  br i1 %cmp293427, label %for.body1150.lr.ph, label %while.cond197.backedge577 578for.body1150.lr.ph:579  unreachable580 581for.body1139:582  unreachable583 584sw.default:585  br label %while.cond197.backedge586 587while.end1465:588  %oldc.1.lcssa = phi i32 [ 0, %do.end ], [ %oldc.1.be, %while.cond197.backedge ]589  %ch.21.lcssa = phi i32 [ %..ch.19, %do.end ], [ %last.1.be, %while.cond197.backedge ]590  switch i32 %ch.21.lcssa, label %for.cond1480.preheader [591    i32 -1, label %if.then1477592    i32 15, label %if.then1477593    i32 13, label %if.then1477594    i32 10, label %if.then1477595  ]596 597for.cond1480.preheader:598  br i1 poison, label %for.body1606.lr.ph, label %for.end1609599 600if.then1477:601  %p.1.lcssa3539 = phi ptr [ null, %while.end1465 ], [ null, %while.end1465 ], [ null, %while.end1465 ], [ null, %while.end1465 ], [ %line, %while.body200 ]602  %call1.i3057 = call i64 @"\01_write"(i32 undef, ptr undef, i64 1)603  %sub.ptr.lhs.cast1717 = ptrtoint ptr %p.1.lcssa3539 to i64604  %sub.ptr.sub1719 = sub i64 %sub.ptr.lhs.cast1717, %sub.ptr.rhs.cast646605  %idx.neg1727 = sub i64 0, %sub.ptr.sub1719606  br label %for.body1723607 608for.body1606.lr.ph:609  br label %for.end1609610 611for.end1609:612  br i1 poison, label %for.cond1659.preheader, label %land.lhs.true1614613 614land.lhs.true1614:615  br label %for.cond1659.preheader616 617for.cond1659.preheader:618  %cmp16623414 = icmp ult ptr undef, %add.ptr1603619  br i1 %cmp16623414, label %for.body1664.lr.ph, label %while.body1703.lr.ph620 621for.body1664.lr.ph:622  %cmp16773405 = icmp slt i64 undef, undef623  br i1 %cmp16773405, label %while.body1679, label %while.cond1683.preheader624 625while.body1703.lr.ph:626  unreachable627 628while.cond1683.preheader:629  br i1 poison, label %while.body1691, label %while.end1693630 631while.body1679:632  %oldc.43406 = phi i32 [ %inc, %syEchoch.exit3070 ], [ %oldc.1.lcssa, %for.body1664.lr.ph ]633  %3 = load ptr, ptr %echo.i3101, align 8, !tbaa !6634  %call.i3062 = call i32 @fileno(ptr %3)635  br i1 poison, label %if.then.i3069, label %syEchoch.exit3070636 637if.then.i3069:638  br label %syEchoch.exit3070639 640syEchoch.exit3070:641  %inc = add i32 %oldc.43406, 1642  %conv1672 = sext i32 %inc to i64643  %cmp1677 = icmp slt i64 %conv1672, undef644  br i1 %cmp1677, label %while.body1679, label %while.cond1683.preheader645 646while.body1691:647  unreachable648 649while.end1693:650  unreachable651 652for.body1723:653  %q.303203 = phi ptr [ getelementptr inbounds ([8192 x i8], ptr @syHistory, i64 0, i64 8189), %if.then1477 ], [ %incdec.ptr1730, %for.body1723 ]654  %add.ptr1728 = getelementptr i8, ptr %q.303203, i64 %idx.neg1727655  %4 = load i8, ptr %add.ptr1728, align 1, !tbaa !5656  %incdec.ptr1730 = getelementptr i8, ptr %q.303203, i64 -1657  br label %for.body1723658 659cleanup:660  ret ptr undef661}662 663declare i32 @fileno(ptr nocapture)664declare i64 @"\01_write"(i32, ptr, i64)665declare i32 @__maskrune(i32, i64)666declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1)667 668!llvm.ident = !{!0}669 670!0 = !{!"clang version 3.5.0 (trunk 204257)"}671!1 = !{!2, !2, i64 0}672!2 = !{!"int", !3, i64 0}673!3 = !{!"omnipotent char", !4, i64 0}674!4 = !{!"Simple C/C++ TBAA"}675!5 = !{!3, !3, i64 0}676!6 = !{!7, !8, i64 8}677!7 = !{!"", !8, i64 0, !8, i64 8, !3, i64 16}678!8 = !{!"any pointer", !3, i64 0}679