summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ExecutionEngine
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2017-09-17 03:25:03 +0000
committerLang Hames <lhames@gmail.com>2017-09-17 03:25:03 +0000
commitec30063ff313c9dffbfdc65243a87a80833d0c5b (patch)
treec17831be8f6f3c6c5e9ff826e13a453a2d1103b7 /llvm/unittests/ExecutionEngine
parent4b93d23abb9f484b82ffc63e25082653335fb360 (diff)
downloadbcm5719-llvm-ec30063ff313c9dffbfdc65243a87a80833d0c5b.tar.gz
bcm5719-llvm-ec30063ff313c9dffbfdc65243a87a80833d0c5b.zip
[ORC] Hook up the LLVMOrcAddObjectFile function in the Orc C Bindings.
This can be used to add a relocatable object to the JIT session. llvm-svn: 313474
Diffstat (limited to 'llvm/unittests/ExecutionEngine')
-rw-r--r--llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp b/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp
index 5a4d6b4a225..d9448d47667 100644
--- a/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp
@@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
#include "OrcTestCommon.h"
+#include "llvm/ExecutionEngine/Orc/CompileUtils.h"
#include "llvm-c/Core.h"
#include "llvm-c/OrcBindings.h"
#include "llvm-c/Target.h"
@@ -37,6 +38,15 @@ protected:
return MB.takeModule();
}
+ std::shared_ptr<object::OwningBinary<object::ObjectFile>>
+ createTestObject() {
+ orc::SimpleCompiler IRCompiler(*TM);
+ auto M = createTestModule(TM->getTargetTriple());
+ M->setDataLayout(TM->createDataLayout());
+ return std::make_shared<object::OwningBinary<object::ObjectFile>>(
+ IRCompiler(*M));
+ }
+
typedef int (*MainFnTy)();
static int myTestFuncImpl() {
@@ -134,6 +144,36 @@ TEST_F(OrcCAPIExecutionTest, TestLazyIRCompilation) {
LLVMOrcDisposeInstance(JIT);
}
+TEST_F(OrcCAPIExecutionTest, TestAddObjectFile) {
+ if (!TM)
+ return;
+
+ std::unique_ptr<MemoryBuffer> ObjBuffer;
+ {
+ auto OwningObj = createTestObject();
+ auto ObjAndBuffer = OwningObj->takeBinary();
+ ObjBuffer = std::move(ObjAndBuffer.second);
+ }
+
+ LLVMOrcJITStackRef JIT =
+ LLVMOrcCreateInstance(wrap(TM.get()));
+ LLVMOrcGetMangledSymbol(JIT, &testFuncName, "testFunc");
+
+ LLVMOrcModuleHandle H;
+ LLVMOrcAddObjectFile(JIT, &H, wrap(ObjBuffer.release()), myResolver, nullptr);
+ LLVMOrcTargetAddress MainAddr;
+ LLVMOrcGetSymbolAddress(JIT, &MainAddr, "main");
+ MainFnTy MainFn = (MainFnTy)MainAddr;
+ int Result = MainFn();
+ EXPECT_EQ(Result, 42)
+ << "Lazily JIT'd code did not return expected result";
+
+ LLVMOrcRemoveModule(JIT, H);
+
+ LLVMOrcDisposeMangledSymbol(testFuncName);
+ LLVMOrcDisposeInstance(JIT);
+}
+
TEST_F(OrcCAPIExecutionTest, TestDirectCallbacksAPI) {
if (!TM)
return;
OpenPOWER on IntegriCloud