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