81 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s3 4; %ptr has a hint to %rdi in entry block, it also has a interference with %rdi5; in block if.then. It should be split in cold block if.then.6; Similarly %p2, %p3, %p4, %p5 and %p6 should also be split in cold block7; if.then.8 9define ptr @foo(ptr %ptr, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6) {10; CHECK-LABEL: foo:11; CHECK: # %bb.0: # %entry12; CHECK-NEXT: testq %rdi, %rdi13; CHECK-NEXT: je .LBB0_114; CHECK-NEXT: # %bb.2: # %if.end15; CHECK-NEXT: incq %rdi16; CHECK-NEXT: jmp qux@PLT # TAILCALL17; CHECK-NEXT: .LBB0_1: # %if.then18; CHECK-NEXT: pushq %r1519; CHECK-NEXT: .cfi_def_cfa_offset 1620; CHECK-NEXT: pushq %r1421; CHECK-NEXT: .cfi_def_cfa_offset 2422; CHECK-NEXT: pushq %r1323; CHECK-NEXT: .cfi_def_cfa_offset 3224; CHECK-NEXT: pushq %r1225; CHECK-NEXT: .cfi_def_cfa_offset 4026; CHECK-NEXT: pushq %rbx27; CHECK-NEXT: .cfi_def_cfa_offset 4828; CHECK-NEXT: .cfi_offset %rbx, -4829; CHECK-NEXT: .cfi_offset %r12, -4030; CHECK-NEXT: .cfi_offset %r13, -3231; CHECK-NEXT: .cfi_offset %r14, -2432; CHECK-NEXT: .cfi_offset %r15, -1633; CHECK-NEXT: movq %rsi, %rbx34; CHECK-NEXT: movq %rdx, %r1435; CHECK-NEXT: movq %rcx, %r1536; CHECK-NEXT: movq %r8, %r1237; CHECK-NEXT: movq %r9, %r1338; CHECK-NEXT: callq bar@PLT39; CHECK-NEXT: movq %rbx, %rsi40; CHECK-NEXT: movq %r14, %rdx41; CHECK-NEXT: movq %r15, %rcx42; CHECK-NEXT: movq %r12, %r843; CHECK-NEXT: movq %r13, %r944; CHECK-NEXT: movq %rax, %rdi45; CHECK-NEXT: popq %rbx46; CHECK-NEXT: .cfi_def_cfa_offset 4047; CHECK-NEXT: popq %r1248; CHECK-NEXT: .cfi_def_cfa_offset 3249; CHECK-NEXT: popq %r1350; CHECK-NEXT: .cfi_def_cfa_offset 2451; CHECK-NEXT: popq %r1452; CHECK-NEXT: .cfi_def_cfa_offset 1653; CHECK-NEXT: popq %r1554; CHECK-NEXT: .cfi_def_cfa_offset 855; CHECK-NEXT: .cfi_restore %rbx56; CHECK-NEXT: .cfi_restore %r1257; CHECK-NEXT: .cfi_restore %r1358; CHECK-NEXT: .cfi_restore %r1459; CHECK-NEXT: .cfi_restore %r1560; CHECK-NEXT: incq %rdi61; CHECK-NEXT: jmp qux@PLT # TAILCALL62entry:63 %tobool.not = icmp eq ptr %ptr, null64 br i1 %tobool.not, label %if.then, label %if.end, !prof !565 66if.then: ; preds = %entry67 %call = tail call ptr @bar(ptr %ptr, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6)68 br label %if.end69 70if.end: ; preds = %if.then, %entry71 %ptr.addr.0 = phi ptr [ %call, %if.then ], [ %ptr, %entry ]72 %incdec.ptr = getelementptr inbounds i8, ptr %ptr.addr.0, i64 173 %call2 = tail call ptr @qux(ptr %incdec.ptr, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6)74 ret ptr %call275}76 77!5 = !{!"branch_weights", i32 1, i32 2000}78 79declare ptr @bar(ptr, i64, i64, i64, i64, i64)80declare ptr @qux(ptr, i64, i64, i64, i64, i64)81