Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / X86 / basic-block-sections-blockaddress-taken.ll
blob2e562c350be6f46fc99aaef3b8e5c9091b502b87
1 ;; This test verifies that basic-block-sections works with address-taken basic blocks.
2 ; RUN: llc < %s -mtriple=x86_64 -basic-block-sections=all | FileCheck %s
4 define void @foo(i1 zeroext %0) nounwind {
5 entry:
6   %1 = select i1 %0, ptr blockaddress(@foo, %bb1), ptr blockaddress(@foo, %bb2) ; <ptr> [#uses=1]
7   indirectbr ptr %1, [label %bb1, label %bb2]
9 ; CHECK:         .text
10 ; CHECK:         .section .text.foo,"ax",@progbits
11 ; CHECK-LABEL: foo:
12 ; CHECK:         movl    $.Ltmp0, %eax
13 ; CHECK-NEXT:    movl    $.Ltmp1, %ecx
14 ; CHECK-NEXT:    cmovneq %rax, %rcx
15 ; CHECK-NEXT:    jmpq    *%rcx
17 bb1:                                                ; preds = %entry
18   %2 = call i32 @bar()
19   ret void
20 ; CHECK:         .section .text.foo,"ax",@progbits,unique,1
21 ; CHECK-NEXT:  .Ltmp0:
22 ; CHECK-NEXT:  foo.__part.1
23 ; CHECK-NEXT:    callq   bar
26 bb2:                                                ; preds = %entry
27   %3 = call i32 @baz()
28   ret void
29 ; CHECK:         .section .text.foo,"ax",@progbits,unique,2
30 ; CHECK-NEXT:  .Ltmp1:
31 ; CHECK-NEXT:  foo.__part.2
32 ; CHECK-NEXT:    callq   baz
35 declare i32 @bar()
36 declare i32 @baz()