xref: /llvm-project/llvm/test/CodeGen/X86/tail-calls-compatible-attrs.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=x86_64-linux < %s | FileCheck %s
3
4declare dso_local ptr @foo()
5
6define dereferenceable(8) ptr @test1() nounwind {
7; CHECK-LABEL: test1:
8; CHECK:       # %bb.0:
9; CHECK-NEXT:    jmp foo # TAILCALL
10  %ret = tail call ptr @foo()
11  ret ptr %ret
12}
13
14define ptr @test2() nounwind {
15; CHECK-LABEL: test2:
16; CHECK:       # %bb.0:
17; CHECK-NEXT:    jmp foo # TAILCALL
18  %ret = tail call dereferenceable(8)  ptr @foo()
19  ret ptr %ret
20}
21
22define dereferenceable_or_null(8) ptr @test3() nounwind {
23; CHECK-LABEL: test3:
24; CHECK:       # %bb.0:
25; CHECK-NEXT:    jmp foo # TAILCALL
26  %ret = tail call ptr @foo()
27  ret ptr %ret
28}
29
30define ptr @test4() nounwind {
31; CHECK-LABEL: test4:
32; CHECK:       # %bb.0:
33; CHECK-NEXT:    jmp foo # TAILCALL
34  %ret = tail call dereferenceable_or_null(8) ptr @foo()
35  ret ptr %ret
36}
37
38define align 8 ptr @test5() nounwind {
39; CHECK-LABEL: test5:
40; CHECK:       # %bb.0:
41; CHECK-NEXT:    jmp foo # TAILCALL
42  %ret = tail call ptr @foo()
43  ret ptr %ret
44}
45
46define ptr @test6() nounwind {
47; CHECK-LABEL: test6:
48; CHECK:       # %bb.0:
49; CHECK-NEXT:    jmp foo # TAILCALL
50  %ret = tail call align 8 ptr @foo()
51  ret ptr %ret
52}
53
54
55define noundef ptr @test7() nounwind {
56; CHECK-LABEL: test7:
57; CHECK:       # %bb.0:
58; CHECK-NEXT:    jmp foo # TAILCALL
59  %ret = tail call ptr @foo()
60  ret ptr %ret
61}
62
63define ptr @test8() nounwind {
64; CHECK-LABEL: test8:
65; CHECK:       # %bb.0:
66; CHECK-NEXT:    jmp foo # TAILCALL
67  %ret = tail call noundef ptr @foo()
68  ret ptr %ret
69}
70