1*cbdccb30SGuozhi Wei; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2*cbdccb30SGuozhi Wei; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s 3*cbdccb30SGuozhi Wei 4*cbdccb30SGuozhi Wei; %ptr has a hint to %rdi in entry block, it also has a interference with %rdi 5*cbdccb30SGuozhi Wei; in block if.then. It should be split in cold block if.then. 6*cbdccb30SGuozhi Wei; Similarly %p2, %p3, %p4, %p5 and %p6 should also be split in cold block 7*cbdccb30SGuozhi Wei; if.then. 8*cbdccb30SGuozhi Wei 9*cbdccb30SGuozhi Weidefine ptr @foo(ptr %ptr, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6) { 10*cbdccb30SGuozhi Wei; CHECK-LABEL: foo: 11*cbdccb30SGuozhi Wei; CHECK: # %bb.0: # %entry 12*cbdccb30SGuozhi Wei; CHECK-NEXT: testq %rdi, %rdi 13*cbdccb30SGuozhi Wei; CHECK-NEXT: je .LBB0_1 14*cbdccb30SGuozhi Wei; CHECK-NEXT: # %bb.2: # %if.end 15*cbdccb30SGuozhi Wei; CHECK-NEXT: incq %rdi 16*cbdccb30SGuozhi Wei; CHECK-NEXT: jmp qux@PLT # TAILCALL 17*cbdccb30SGuozhi Wei; CHECK-NEXT: .LBB0_1: # %if.then 18*cbdccb30SGuozhi Wei; CHECK-NEXT: pushq %r15 19*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_def_cfa_offset 16 20*cbdccb30SGuozhi Wei; CHECK-NEXT: pushq %r14 21*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_def_cfa_offset 24 22*cbdccb30SGuozhi Wei; CHECK-NEXT: pushq %r13 23*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_def_cfa_offset 32 24*cbdccb30SGuozhi Wei; CHECK-NEXT: pushq %r12 25*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_def_cfa_offset 40 26*cbdccb30SGuozhi Wei; CHECK-NEXT: pushq %rbx 27*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_def_cfa_offset 48 28*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_offset %rbx, -48 29*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_offset %r12, -40 30*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_offset %r13, -32 31*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_offset %r14, -24 32*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_offset %r15, -16 33*cbdccb30SGuozhi Wei; CHECK-NEXT: movq %rsi, %rbx 34*cbdccb30SGuozhi Wei; CHECK-NEXT: movq %rdx, %r14 35*cbdccb30SGuozhi Wei; CHECK-NEXT: movq %rcx, %r15 36*cbdccb30SGuozhi Wei; CHECK-NEXT: movq %r8, %r12 37*cbdccb30SGuozhi Wei; CHECK-NEXT: movq %r9, %r13 38*cbdccb30SGuozhi Wei; CHECK-NEXT: callq bar@PLT 39*cbdccb30SGuozhi Wei; CHECK-NEXT: movq %rbx, %rsi 40*cbdccb30SGuozhi Wei; CHECK-NEXT: movq %r14, %rdx 41*cbdccb30SGuozhi Wei; CHECK-NEXT: movq %r15, %rcx 42*cbdccb30SGuozhi Wei; CHECK-NEXT: movq %r12, %r8 43*cbdccb30SGuozhi Wei; CHECK-NEXT: movq %r13, %r9 44*cbdccb30SGuozhi Wei; CHECK-NEXT: movq %rax, %rdi 45*cbdccb30SGuozhi Wei; CHECK-NEXT: popq %rbx 46*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_def_cfa_offset 40 47*cbdccb30SGuozhi Wei; CHECK-NEXT: popq %r12 48*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_def_cfa_offset 32 49*cbdccb30SGuozhi Wei; CHECK-NEXT: popq %r13 50*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_def_cfa_offset 24 51*cbdccb30SGuozhi Wei; CHECK-NEXT: popq %r14 52*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_def_cfa_offset 16 53*cbdccb30SGuozhi Wei; CHECK-NEXT: popq %r15 54*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_def_cfa_offset 8 55*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_restore %rbx 56*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_restore %r12 57*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_restore %r13 58*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_restore %r14 59*cbdccb30SGuozhi Wei; CHECK-NEXT: .cfi_restore %r15 60*cbdccb30SGuozhi Wei; CHECK-NEXT: incq %rdi 61*cbdccb30SGuozhi Wei; CHECK-NEXT: jmp qux@PLT # TAILCALL 62*cbdccb30SGuozhi Weientry: 63*cbdccb30SGuozhi Wei %tobool.not = icmp eq ptr %ptr, null 64*cbdccb30SGuozhi Wei br i1 %tobool.not, label %if.then, label %if.end, !prof !5 65*cbdccb30SGuozhi Wei 66*cbdccb30SGuozhi Weiif.then: ; preds = %entry 67*cbdccb30SGuozhi Wei %call = tail call ptr @bar(ptr %ptr, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6) 68*cbdccb30SGuozhi Wei br label %if.end 69*cbdccb30SGuozhi Wei 70*cbdccb30SGuozhi Weiif.end: ; preds = %if.then, %entry 71*cbdccb30SGuozhi Wei %ptr.addr.0 = phi ptr [ %call, %if.then ], [ %ptr, %entry ] 72*cbdccb30SGuozhi Wei %incdec.ptr = getelementptr inbounds i8, ptr %ptr.addr.0, i64 1 73*cbdccb30SGuozhi Wei %call2 = tail call ptr @qux(ptr %incdec.ptr, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6) 74*cbdccb30SGuozhi Wei ret ptr %call2 75*cbdccb30SGuozhi Wei} 76*cbdccb30SGuozhi Wei 77*cbdccb30SGuozhi Wei!5 = !{!"branch_weights", i32 1, i32 2000} 78*cbdccb30SGuozhi Wei 79*cbdccb30SGuozhi Weideclare ptr @bar(ptr, i64, i64, i64, i64, i64) 80*cbdccb30SGuozhi Weideclare ptr @qux(ptr, i64, i64, i64, i64, i64) 81