aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/ExecutionEngine/Orc/ObjectTransformLayer.cpp
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2019-11-14 15:58:21 -0800
committerLang Hames <lhames@gmail.com>2019-11-14 21:27:19 -0800
commit16f38dda292c6e2963e77f722042a9eb5da56d28 (patch)
tree412b958c6d721df8ad15a3b014872fc5c8d9292e /llvm/lib/ExecutionEngine/Orc/ObjectTransformLayer.cpp
parentbc11830c6a67025186d39fd9de6e49b3b570e2bd (diff)
downloadllvm-16f38dda292c6e2963e77f722042a9eb5da56d28.zip
llvm-16f38dda292c6e2963e77f722042a9eb5da56d28.tar.gz
llvm-16f38dda292c6e2963e77f722042a9eb5da56d28.tar.bz2
[ORC] Add a utility to support dumping JIT'd objects to disk for debugging.
Adds a DumpObjects utility that can be used to dump JIT'd objects to disk. Instances of DebugObjects may be used by ObjectTransformLayer as no-op transforms. This patch also adds an ObjectTransformLayer to LLJIT and an example of how to use this utility to dump JIT'd objects in LLJIT.
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/ObjectTransformLayer.cpp')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/ObjectTransformLayer.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/ObjectTransformLayer.cpp b/llvm/lib/ExecutionEngine/Orc/ObjectTransformLayer.cpp
index 8155173..d18eb38 100644
--- a/llvm/lib/ExecutionEngine/Orc/ObjectTransformLayer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ObjectTransformLayer.cpp
@@ -21,12 +21,18 @@ void ObjectTransformLayer::emit(MaterializationResponsibility R,
std::unique_ptr<MemoryBuffer> O) {
assert(O && "Module must not be null");
- if (auto TransformedObj = Transform(std::move(O)))
- BaseLayer.emit(std::move(R), std::move(*TransformedObj));
- else {
- R.failMaterialization();
- getExecutionSession().reportError(TransformedObj.takeError());
+ // If there is a transform set then apply it.
+ if (Transform) {
+ if (auto TransformedObj = Transform(std::move(O)))
+ O = std::move(*TransformedObj);
+ else {
+ R.failMaterialization();
+ getExecutionSession().reportError(TransformedObj.takeError());
+ return;
+ }
}
+
+ BaseLayer.emit(std::move(R), std::move(O));
}
} // End namespace orc.