xref: /llvm-project/llvm/test/CodeGen/X86/no-plt.ll (revision deab451e7a7f2dff42097049274637052c87eabd)
1; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic \
2; RUN:   | FileCheck -check-prefix=X64 --check-prefix=PIC %s
3; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnu \
4; RUN:   | FileCheck -check-prefix=X64 --check-prefix=STATIC %s
5
6define i32 @fp_weakfunc() {
7; X64: weakfunc@GOTPCREL(%rip)
8  %c = icmp ne ptr @weakfunc, null
9  %s = select i1 %c, i32 1, i32 0
10  ret i32 %s
11}
12declare extern_weak i32 @weakfunc() nonlazybind
13
14define void @memset_call(ptr nocapture %a, i8 %c, i32 %n) {
15; X64: callq *memset@GOTPCREL(%rip)
16  call void @llvm.memset.p0.i32(ptr %a, i8 %c, i32 %n, i1 false)
17  ret void
18}
19
20define void @memcpy_call(ptr nocapture %a, ptr nocapture readonly %b, i64 %n) {
21; X64: callq *memcpy@GOTPCREL(%rip)
22  call void @llvm.memcpy.p0.p0.i64(ptr %a, ptr %b, i64 %n, i32 1, i1 false)
23  ret void
24}
25
26define i32 @main() {
27; X64:    callq *foo@GOTPCREL(%rip)
28; PIC:    callq bar@PLT
29; STATIC: callq bar@PLT
30; X64:    callq baz
31
32  %retval = alloca i32, align 4
33  store i32 0, ptr %retval, align 4
34  %call1 = call i32 @foo()
35  %call2 = call i32 @bar()
36  %call3 = call i32 @baz()
37  ret i32 0
38}
39
40declare i32 @foo() nonlazybind
41declare i32 @bar()
42declare hidden i32 @baz() nonlazybind
43declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i32, i1)
44declare void @llvm.memset.p0.i32(ptr nocapture, i8, i32, i1)
45
46!llvm.module.flags = !{!1}
47!1 = !{i32 7, !"RtLibUseGOT", i32 1}
48