blob: 8d3a5ff9d4aabe16f056309008b06eadd73f6eff [file] [log] [blame]
;; This test verifies that basic-block-sections works with address-taken basic blocks.
; RUN: llc < %s -mtriple=x86_64 -basic-block-sections=all | FileCheck %s
define void @foo(i1 zeroext %0) nounwind {
entry:
%1 = select i1 %0, i8* blockaddress(@foo, %bb1), i8* blockaddress(@foo, %bb2) ; <i8*> [#uses=1]
indirectbr i8* %1, [label %bb1, label %bb2]
; CHECK: .text
; CHECK: .section .text.foo,"ax",@progbits
; CHECK-LABEL: foo:
; CHECK: movl $.Ltmp0, %eax
; CHECK-NEXT: movl $.Ltmp1, %ecx
; CHECK-NEXT: cmovneq %rax, %rcx
; CHECK-NEXT: jmpq *%rcx
bb1: ; preds = %entry
%2 = call i32 @bar()
ret void
; CHECK: .section .text.foo,"ax",@progbits,unique,1
; CHECK-NEXT: .Ltmp0:
; CHECK-NEXT: foo.__part.1
; CHECK-NEXT: callq bar
;
bb2: ; preds = %entry
%3 = call i32 @baz()
ret void
; CHECK: .section .text.foo,"ax",@progbits,unique,2
; CHECK-NEXT: .Ltmp1:
; CHECK-NEXT: foo.__part.2
; CHECK-NEXT: callq baz
}
declare i32 @bar()
declare i32 @baz()