summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyInstrCall.td14
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
*/
OpenPOWER on IntegriCloud