74 lines · plain
1; RUN: llc < %s -mtriple=i686-pc-linux-gnu -relocation-model=pic | FileCheck %s2 3; While many of these could be tail called, we don't do it because it forces4; early binding.5 6declare void @external()7 8define hidden void @tailcallee_hidden() {9entry:10 ret void11}12 13define void @tailcall_hidden() {14entry:15 tail call void @tailcallee_hidden()16 ret void17}18; CHECK: tailcall_hidden:19; CHECK: jmp tailcallee_hidden20 21define internal void @tailcallee_internal() {22entry:23 ret void24}25 26define void @tailcall_internal() {27entry:28 tail call void @tailcallee_internal()29 ret void30}31; CHECK: tailcall_internal:32; CHECK: jmp tailcallee_internal33 34define default void @tailcallee_default() {35entry:36 ret void37}38 39define void @tailcall_default() {40entry:41 tail call void @tailcallee_default()42 ret void43}44; CHECK: tailcall_default:45; CHECK: calll tailcallee_default@PLT46 47define void @tailcallee_default_implicit() {48entry:49 ret void50}51 52define void @tailcall_default_implicit() {53entry:54 tail call void @tailcallee_default_implicit()55 ret void56}57; CHECK: tailcall_default_implicit:58; CHECK: calll tailcallee_default_implicit@PLT59 60define void @tailcall_external() {61 tail call void @external()62 ret void63}64; CHECK: tailcall_external:65; CHECK: calll external@PLT66 67define void @musttail_external() {68 musttail call void @external()69 ret void70}71; CHECK: musttail_external:72; CHECK: movl external@GOT73; CHECK: jmpl74