aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp
diff options
context:
space:
mode:
authorJustin Lebar <jlebar@google.com>2018-12-26 19:12:31 +0000
committerJustin Lebar <jlebar@google.com>2018-12-26 19:12:31 +0000
commit49fac56ea3bd3aae02cf03bff812128dc30b4a53 (patch)
tree0e0fa0811298051e44a07b57ec3a52e1cacecfbd /llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp
parent423b65333d490f119fc82acd4de079980d92413b (diff)
downloadllvm-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