diff options
author | Justin Lebar <jlebar@google.com> | 2018-12-26 19:12:31 +0000 |
---|---|---|
committer | Justin Lebar <jlebar@google.com> | 2018-12-26 19:12:31 +0000 |
commit | 49fac56ea3bd3aae02cf03bff812128dc30b4a53 (patch) | |
tree | 0e0fa0811298051e44a07b57ec3a52e1cacecfbd /llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp | |
parent | 423b65333d490f119fc82acd4de079980d92413b (diff) | |
download | llvm-49fac56ea3bd3aae02cf03bff812128dc30b4a53.zip llvm-49fac56ea3bd3aae02cf03bff812128dc30b4a53.tar.gz llvm-49fac56ea3bd3aae02cf03bff812128dc30b4a53.tar.bz2 |
[NVPTX] Allow libcalls that are defined in the current module.
The patch adds a possibility to make library calls on NVPTX.
An important thing about library functions - they must be defined within
the current module. This basically should guarantee that we produce a
valid PTX assembly (without calls to not defined functions). The one who
wants to use the libcalls is probably will have to link against
compiler-rt or any other implementation.
Currently, it's completely impossible to make library calls because of
error LLVM ERROR: Cannot select: i32 = ExternalSymbol '...'. But we can
lower ExternalSymbol to TargetExternalSymbol and verify if the function
definition is available.
Also, there was an issue with a DAG during legalisation. When we expand
instruction into libcall, the inner call-chain isn't being "integrated"
into outer chain. Since the last "data-flow" (call retval load) node is
located in call-chain earlier than CALLSEQ_END node, the latter becomes
a leaf and therefore a dead node (and is being removed quite fast).
Proposed here solution relies on another data-flow pseudo nodes
(ProxyReg) which purpose is only to keep CALLSEQ_END at legalisation and
instruction selection phases - we remove the pseudo instructions before
register scheduling phase.
Patch by Denys Zariaiev!
Differential Revision: https://reviews.llvm.org/D34708
llvm-svn: 350069
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp')
0 files changed, 0 insertions, 0 deletions