[LKH] Add ObjectTransformLayer2.
llvm-svn: 333128
This commit is contained in:
parent
4caa2f70ac
commit
85642262b2
@ -15,7 +15,7 @@
|
||||
#define LLVM_EXECUTIONENGINE_ORC_OBJECTTRANSFORMLAYER_H
|
||||
|
||||
#include "llvm/ExecutionEngine/JITSymbol.h"
|
||||
#include "llvm/ExecutionEngine/Orc/Core.h"
|
||||
#include "llvm/ExecutionEngine/Orc/Layer.h"
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
@ -23,6 +23,23 @@
|
||||
namespace llvm {
|
||||
namespace orc {
|
||||
|
||||
class ObjectTransformLayer2 : public ObjectLayer {
|
||||
public:
|
||||
using TransformFunction =
|
||||
std::function<Expected<std::unique_ptr<MemoryBuffer>>(
|
||||
std::unique_ptr<MemoryBuffer>)>;
|
||||
|
||||
ObjectTransformLayer2(ExecutionSession &ES, ObjectLayer &BaseLayer,
|
||||
TransformFunction Transform);
|
||||
|
||||
void emit(MaterializationResponsibility R, VModuleKey K,
|
||||
std::unique_ptr<MemoryBuffer> O) override;
|
||||
|
||||
private:
|
||||
ObjectLayer &BaseLayer;
|
||||
TransformFunction Transform;
|
||||
};
|
||||
|
||||
/// Object mutating layer.
|
||||
///
|
||||
/// This layer accepts sets of ObjectFiles (via addObject). It
|
||||
|
||||
@ -6,6 +6,7 @@ add_llvm_library(LLVMOrcJIT
|
||||
Legacy.cpp
|
||||
Layer.cpp
|
||||
NullResolver.cpp
|
||||
ObjectTransformLayer.cpp
|
||||
OrcABISupport.cpp
|
||||
OrcCBindings.cpp
|
||||
OrcError.cpp
|
||||
|
||||
34
llvm/lib/ExecutionEngine/Orc/ObjectTransformLayer.cpp
Normal file
34
llvm/lib/ExecutionEngine/Orc/ObjectTransformLayer.cpp
Normal file
@ -0,0 +1,34 @@
|
||||
//===---------- ObjectTransformLayer.cpp - Object Transform Layer ---------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/ExecutionEngine/Orc/ObjectTransformLayer.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
|
||||
namespace llvm {
|
||||
namespace orc {
|
||||
|
||||
ObjectTransformLayer2::ObjectTransformLayer2(ExecutionSession &ES,
|
||||
ObjectLayer &BaseLayer,
|
||||
TransformFunction Transform)
|
||||
: ObjectLayer(ES), BaseLayer(BaseLayer), Transform(std::move(Transform)) {}
|
||||
|
||||
void ObjectTransformLayer2::emit(MaterializationResponsibility R, VModuleKey K,
|
||||
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(K), std::move(*TransformedObj));
|
||||
else {
|
||||
R.failMaterialization();
|
||||
getExecutionSession().reportError(TransformedObj.takeError());
|
||||
}
|
||||
}
|
||||
|
||||
} // End namespace orc.
|
||||
} // End namespace llvm.
|
||||
Loading…
x
Reference in New Issue
Block a user