From 05a17aa82ae9285f60c8aa4e0d8c2974c89d25cb Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Mon, 28 Sep 2015 16:22:39 +0000 Subject: [WebAssembly] Support for direct call and call_indirect. llvm-svn: 248716 --- llvm/lib/Target/WebAssembly/WebAssemblyInstrCall.td | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'llvm/lib') diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrCall.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrCall.td index 23f6eff58be..82a42f564ab 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrCall.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrCall.td @@ -22,8 +22,10 @@ def : I<(outs), (ins i64imm:$amt1, i64imm:$amt2), } // isCodeGenOnly = 1 multiclass CALL { - def CALL_#vt : I<(outs vt:$dst), (ins I32:$callee, variable_ops), - [(set vt:$dst, (WebAssemblycall1 I32:$callee))]>; + def CALL_#vt : I<(outs vt:$dst), (ins global:$callee, variable_ops), + [(set vt:$dst, (WebAssemblycall1 (WebAssemblywrapper tglobaladdr:$callee)))]>; + def CALL_INDIRECT_#vt : I<(outs vt:$dst), (ins I32:$callee, variable_ops), + [(set vt:$dst, (WebAssemblycall1 I32:$callee))]>; } let Uses = [SP32, SP64], isCall = 1 in { defm : CALL; @@ -31,14 +33,14 @@ let Uses = [SP32, SP64], isCall = 1 in { defm : CALL; defm : CALL; - def CALL_VOID : I<(outs), (ins I32:$callee, variable_ops), - [(WebAssemblycall0 I32:$callee)]>; + def CALL_VOID : I<(outs), (ins global:$callee, variable_ops), + [(WebAssemblycall0 (WebAssemblywrapper tglobaladdr:$callee))]>; + def CALL_INDIRECT_VOID : I<(outs), (ins I32:$callee, variable_ops), + [(WebAssemblycall0 I32:$callee)]>; } // Uses = [SP32,SP64], isCall = 1 /* * TODO(jfb): Add the following. * - * call: call function directly - * call_indirect: call function indirectly * addressof: obtain a function pointer value for a given function */ -- cgit v1.2.3