diff options
| author | Dan Gohman <dan433584@gmail.com> | 2015-09-28 16:22:39 +0000 |
|---|---|---|
| committer | Dan Gohman <dan433584@gmail.com> | 2015-09-28 16:22:39 +0000 |
| commit | 05a17aa82ae9285f60c8aa4e0d8c2974c89d25cb (patch) | |
| tree | 1672073526c70d97ff8d1fb41bc1b5dab62ddb32 /llvm/lib | |
| parent | 1309fc0378919cfeae33c0b5732e122ed97c95dc (diff) | |
| download | bcm5719-llvm-05a17aa82ae9285f60c8aa4e0d8c2974c89d25cb.tar.gz bcm5719-llvm-05a17aa82ae9285f60c8aa4e0d8c2974c89d25cb.zip | |
[WebAssembly] Support for direct call and call_indirect.
llvm-svn: 248716
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 */ |

