diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyInstrCall.td | 14 |
1 files changed, 8 insertions, 6 deletions
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<WebAssemblyRegClass vt> { - 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<I32>; @@ -31,14 +33,14 @@ let Uses = [SP32, SP64], isCall = 1 in { defm : CALL<F32>; defm : CALL<F64>; - 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 */ |

