xref: /llvm-project/llvm/test/CodeGen/X86/callbr-asm-label-addr.ll (revision 02ba5b8c6b9f0c1ce6df421db5dd5eb307d7d27d)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
3
4define i32 @test1(i32 %x) {
5; CHECK-LABEL: test1:
6; CHECK:       # %bb.0: # %entry
7; CHECK-NEXT:    #APP
8; CHECK-NEXT:    .quad .Ltmp0
9; CHECK-NEXT:    .quad .LBB0_1
10; CHECK-NEXT:    #NO_APP
11; CHECK-NEXT:  .LBB0_1: # Block address taken
12; CHECK-NEXT:    # %bar
13; CHECK-NEXT:    # Label of block must be emitted
14; CHECK-NEXT:    pushq %rax
15; CHECK-NEXT:    .cfi_def_cfa_offset 16
16; CHECK-NEXT:    callq foo@PLT
17; CHECK-NEXT:    addq $8, %rsp
18; CHECK-NEXT:    .cfi_def_cfa_offset 8
19; CHECK-NEXT:  .Ltmp0: # Block address taken
20; CHECK-NEXT:  # %bb.2: # %baz
21; CHECK-NEXT:    movl %eax, %edi
22; CHECK-NEXT:    jmp mux@PLT # TAILCALL
23entry:
24  callbr void asm sideeffect ".quad ${0:l}\0A\09.quad ${1:l}", "i,!i,~{dirflag},~{fpsr},~{flags}"(ptr blockaddress(@test1, %baz))
25          to label %asm.fallthrough [label %bar]
26
27asm.fallthrough:
28  br label %bar
29
30bar:
31  %call = tail call i32 @foo(i32 %x)
32  br label %baz
33
34baz:
35  %call1 = tail call i32 @mux(i32 %call)
36  ret i32 %call1
37}
38
39declare i32 @foo(i32)
40
41declare i32 @mux(i32)
42