diff options
author | Lang Hames <lhames@gmail.com> | 2018-02-21 21:55:49 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2018-02-21 21:55:49 +0000 |
commit | 589eece1323e5ba20e8887bc4314db9af477ba77 (patch) | |
tree | 88ef672592bfa38e0beea4ee2761a9b27e196991 /llvm/unittests/ExecutionEngine/Orc | |
parent | c1b46381dbfc070ccdba327d36053c154cde2b4f (diff) | |
download | bcm5719-llvm-589eece1323e5ba20e8887bc4314db9af477ba77.tar.gz bcm5719-llvm-589eece1323e5ba20e8887bc4314db9af477ba77.zip |
[ORC] Switch RTDyldObjectLinkingLayer to take a unique_ptr<MemoryBuffer> rather
than a shared ObjectFile/MemoryBuffer pair.
There's no need to pre-parse the buffer into an ObjectFile before passing it
down to the linking layer, and moving the parsing into the linking layer allows
us remove the parsing code at each call site.
llvm-svn: 325725
Diffstat (limited to 'llvm/unittests/ExecutionEngine/Orc')
4 files changed, 21 insertions, 42 deletions
diff --git a/llvm/unittests/ExecutionEngine/Orc/ObjectTransformLayerTest.cpp b/llvm/unittests/ExecutionEngine/Orc/ObjectTransformLayerTest.cpp index 3f7d530d57e..3d0ee365f1c 100644 --- a/llvm/unittests/ExecutionEngine/Orc/ObjectTransformLayerTest.cpp +++ b/llvm/unittests/ExecutionEngine/Orc/ObjectTransformLayerTest.cpp @@ -288,16 +288,13 @@ TEST(ObjectTransformLayerTest, Main) { std::make_shared<NullResolver>()}; }); - auto IdentityTransform = - [](std::shared_ptr<llvm::object::OwningBinary<llvm::object::ObjectFile>> - Obj) { - return Obj; - }; + auto IdentityTransform = [](std::unique_ptr<llvm::MemoryBuffer> Obj) { + return Obj; + }; ObjectTransformLayer<decltype(BaseLayer), decltype(IdentityTransform)> TransformLayer(BaseLayer, IdentityTransform); auto NullCompiler = [](llvm::Module &) { - return llvm::object::OwningBinary<llvm::object::ObjectFile>(nullptr, - nullptr); + return std::unique_ptr<llvm::MemoryBuffer>(nullptr); }; IRCompileLayer<decltype(TransformLayer), decltype(NullCompiler)> CompileLayer(TransformLayer, NullCompiler); diff --git a/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp b/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp index d9448d47667..ca445b4d4e1 100644 --- a/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp +++ b/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp @@ -38,13 +38,11 @@ protected: return MB.takeModule(); } - std::shared_ptr<object::OwningBinary<object::ObjectFile>> - createTestObject() { + std::unique_ptr<MemoryBuffer> createTestObject() { orc::SimpleCompiler IRCompiler(*TM); auto M = createTestModule(TM->getTargetTriple()); M->setDataLayout(TM->createDataLayout()); - return std::make_shared<object::OwningBinary<object::ObjectFile>>( - IRCompiler(*M)); + return IRCompiler(*M); } typedef int (*MainFnTy)(); @@ -148,12 +146,7 @@ TEST_F(OrcCAPIExecutionTest, TestAddObjectFile) { if (!TM) return; - std::unique_ptr<MemoryBuffer> ObjBuffer; - { - auto OwningObj = createTestObject(); - auto ObjAndBuffer = OwningObj->takeBinary(); - ObjBuffer = std::move(ObjAndBuffer.second); - } + auto ObjBuffer = createTestObject(); LLVMOrcJITStackRef JIT = LLVMOrcCreateInstance(wrap(TM.get())); diff --git a/llvm/unittests/ExecutionEngine/Orc/RTDyldObjectLinkingLayerTest.cpp b/llvm/unittests/ExecutionEngine/Orc/RTDyldObjectLinkingLayerTest.cpp index 740abedeed9..2156ae883a8 100644 --- a/llvm/unittests/ExecutionEngine/Orc/RTDyldObjectLinkingLayerTest.cpp +++ b/llvm/unittests/ExecutionEngine/Orc/RTDyldObjectLinkingLayerTest.cpp @@ -95,14 +95,13 @@ TEST(RTDyldObjectLinkingLayerTest, TestSetProcessAllSections) { if (!TM) return; - auto Obj = - std::make_shared<object::OwningBinary<object::ObjectFile>>( - SimpleCompiler(*TM)(*M)); + auto Obj = SimpleCompiler(*TM)(*M); { // Test with ProcessAllSections = false (the default). auto K = ES.allocateVModule(); - cantFail(ObjLayer.addObject(K, Obj)); + cantFail(ObjLayer.addObject( + K, MemoryBuffer::getMemBufferCopy(Obj->getBuffer()))); cantFail(ObjLayer.emitAndFinalize(K)); EXPECT_EQ(DebugSectionSeen, false) << "Unexpected debug info section"; @@ -113,7 +112,7 @@ TEST(RTDyldObjectLinkingLayerTest, TestSetProcessAllSections) { // Test with ProcessAllSections = true. ObjLayer.setProcessAllSections(true); auto K = ES.allocateVModule(); - cantFail(ObjLayer.addObject(K, Obj)); + cantFail(ObjLayer.addObject(K, std::move(Obj))); cantFail(ObjLayer.emitAndFinalize(K)); EXPECT_EQ(DebugSectionSeen, true) << "Expected debug info section not seen"; @@ -164,9 +163,7 @@ TEST_F(RTDyldObjectLinkingLayerExecutionTest, NoDuplicateFinalization) { Builder.CreateRet(FourtyTwo); } - auto Obj1 = - std::make_shared<object::OwningBinary<object::ObjectFile>>( - Compile(*MB1.getModule())); + auto Obj1 = Compile(*MB1.getModule()); ModuleBuilder MB2(Context, "", "dummy"); { @@ -177,9 +174,7 @@ TEST_F(RTDyldObjectLinkingLayerExecutionTest, NoDuplicateFinalization) { IRBuilder<> Builder(FooEntry); Builder.CreateRet(Builder.CreateCall(BarDecl)); } - auto Obj2 = - std::make_shared<object::OwningBinary<object::ObjectFile>>( - Compile(*MB2.getModule())); + auto Obj2 = Compile(*MB2.getModule()); auto K1 = ES.allocateVModule(); Resolvers[K1] = std::make_shared<NullResolver>(); @@ -249,9 +244,7 @@ TEST_F(RTDyldObjectLinkingLayerExecutionTest, NoPrematureAllocation) { Builder.CreateRet(FourtyTwo); } - auto Obj1 = - std::make_shared<object::OwningBinary<object::ObjectFile>>( - Compile(*MB1.getModule())); + auto Obj1 = Compile(*MB1.getModule()); ModuleBuilder MB2(Context, "", "dummy"); { @@ -263,9 +256,7 @@ TEST_F(RTDyldObjectLinkingLayerExecutionTest, NoPrematureAllocation) { Value *Seven = ConstantInt::getSigned(Int32Ty, 7); Builder.CreateRet(Seven); } - auto Obj2 = - std::make_shared<object::OwningBinary<object::ObjectFile>>( - Compile(*MB2.getModule())); + auto Obj2 = Compile(*MB2.getModule()); auto K = ES.allocateVModule(); cantFail(ObjLayer.addObject(K, std::move(Obj1))); @@ -288,7 +279,7 @@ TEST_F(RTDyldObjectLinkingLayerExecutionTest, TestNotifyLoadedSignature) { return RTDyldObjectLinkingLayer::Resources{ nullptr, std::make_shared<NullResolver>()}; }, - [](VModuleKey, const RTDyldObjectLinkingLayer::ObjectPtr &obj, + [](VModuleKey, const object::ObjectFile &obj, const RuntimeDyld::LoadedObjectInfo &info) {}); } diff --git a/llvm/unittests/ExecutionEngine/Orc/RemoteObjectLayerTest.cpp b/llvm/unittests/ExecutionEngine/Orc/RemoteObjectLayerTest.cpp index d24aafed9b0..ae408a06f84 100644 --- a/llvm/unittests/ExecutionEngine/Orc/RemoteObjectLayerTest.cpp +++ b/llvm/unittests/ExecutionEngine/Orc/RemoteObjectLayerTest.cpp @@ -24,8 +24,7 @@ public: using ObjHandleT = uint64_t; - using ObjectPtr = - std::shared_ptr<object::OwningBinary<object::ObjectFile>>; + using ObjectPtr = std::unique_ptr<MemoryBuffer>; using LookupFn = std::function<JITSymbol(StringRef, bool)>; using SymbolLookupTable = std::map<ObjHandleT, LookupFn>; @@ -43,7 +42,7 @@ public: Expected<ObjHandleT> addObject(ObjectPtr Obj, std::shared_ptr<JITSymbolResolver> Resolver) { - return AddObject(Obj, SymTab); + return AddObject(std::move(Obj), SymTab); } Error removeObject(ObjHandleT H) { @@ -102,8 +101,7 @@ MockObjectLayer::ObjectPtr createTestObject() { B.CreateRet(ConstantInt::getSigned(Type::getInt32Ty(Ctx), 42)); SimpleCompiler IRCompiler(*TM); - return std::make_shared<object::OwningBinary<object::ObjectFile>>( - IRCompiler(*MB.getModule())); + return IRCompiler(*MB.getModule()); } TEST(RemoteObjectLayer, AddObject) { @@ -121,7 +119,7 @@ TEST(RemoteObjectLayer, AddObject) { // Copy the bytes out of the test object: the copy will be used to verify // that the original is correctly transmitted over RPC to the mock layer. - StringRef ObjBytes = TestObject->getBinary()->getData(); + StringRef ObjBytes = TestObject->getBuffer(); std::vector<char> ObjContents(ObjBytes.size()); std::copy(ObjBytes.begin(), ObjBytes.end(), ObjContents.begin()); @@ -134,7 +132,7 @@ TEST(RemoteObjectLayer, AddObject) { MockObjectLayer::SymbolLookupTable &SymTab) { // Check that the received object file content matches the original. - StringRef RPCObjContents = Obj->getBinary()->getData(); + StringRef RPCObjContents = Obj->getBuffer(); EXPECT_EQ(RPCObjContents.size(), ObjContents.size()) << "RPC'd object file has incorrect size"; EXPECT_TRUE(std::equal(RPCObjContents.begin(), RPCObjContents.end(), |