xref: /llvm-project/llvm/test/CodeGen/X86/ifunc-asm.ll (revision e6bf48d11047e970cb24554a01b65b566d6b5d22)
1; RUN: llc -mtriple=x86_64-unknown-linux-gnu %s -o - | FileCheck %s --check-prefixes=ELF
2; RUN: llc -mtriple=x86_64-apple-darwin %s -o - | FileCheck %s --check-prefixes=MACHO
3
4define internal ptr @foo_resolver() {
5entry:
6  ret ptr null
7}
8; ELF:             .type foo_resolver,@function
9; ELF-NEXT:    foo_resolver:
10
11; MACHO:           .p2align 4
12; MACHO-NEXT:  _foo_resolver
13
14
15@foo_ifunc = ifunc i32 (i32), ptr @foo_resolver
16; ELF:             .globl foo_ifunc
17; ELF-NEXT:        .type foo_ifunc,@gnu_indirect_function
18; ELF-NEXT:        .set foo_ifunc, foo_resolver
19
20; MACHO:           .section __DATA,__data
21; MACHO-NEXT:      .p2align 3, 0x0
22; MACHO-NEXT:  _foo_ifunc.lazy_pointer:
23; MACHO-NEXT:      .quad _foo_ifunc.stub_helper
24; MACHO-NEXT:      .section __TEXT,__text,regular,pure_instructions
25; MACHO-NEXT:      .globl _foo_ifunc
26; MACHO-NEXT:      .p2align 0
27; MACHO-NEXT:  _foo_ifunc:
28; MACHO-NEXT:      jmpl   *_foo_ifunc.lazy_pointer(%rip)
29; MACHO-NEXT:      .p2align 0
30; MACHO-NEXT:  _foo_ifunc.stub_helper:
31; MACHO-NEXT:      pushq   %rax
32; MACHO-NEXT:      pushq   %rdi
33; MACHO-NEXT:      pushq   %rsi
34; MACHO-NEXT:      pushq   %rdx
35; MACHO-NEXT:      pushq   %rcx
36; MACHO-NEXT:      pushq   %r8
37; MACHO-NEXT:      pushq   %r9
38; MACHO-NEXT:      callq   _foo_resolver
39; MACHO-NEXT:      movq    %rax, _foo_ifunc.lazy_pointer(%rip)
40; MACHO-NEXT:      popq    %r9
41; MACHO-NEXT:      popq    %r8
42; MACHO-NEXT:      popq    %rcx
43; MACHO-NEXT:      popq    %rdx
44; MACHO-NEXT:      popq    %rsi
45; MACHO-NEXT:      popq    %rdi
46; MACHO-NEXT:      popq    %rax
47; MACHO-NEXT:      jmpl    *_foo_ifunc.lazy_pointer(%rip)
48
49@weak_ifunc = weak ifunc i32 (i32), ptr @foo_resolver
50; ELF:             .type weak_ifunc,@gnu_indirect_function
51; MACHO-NOT:       .weak_reference _weak_ifunc.lazy_pointer
52; MACHO:       _weak_ifunc.lazy_pointer:
53; MACHO:           .weak_reference _weak_ifunc
54; MACHO:       _weak_ifunc:
55; MACHO-NOT:       .weak_reference _weak_ifunc.stub_helper
56; MACHO:       _weak_ifunc.stub_helper:
57