File indexing completed on 2026-05-10 08:43:53
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef LLVM_EXECUTIONENGINE_ORC_IRTRANSFORMLAYER_H
0014 #define LLVM_EXECUTIONENGINE_ORC_IRTRANSFORMLAYER_H
0015
0016 #include "llvm/ADT/FunctionExtras.h"
0017 #include "llvm/ExecutionEngine/JITSymbol.h"
0018 #include "llvm/ExecutionEngine/Orc/Layer.h"
0019 #include <memory>
0020
0021 namespace llvm {
0022 namespace orc {
0023
0024
0025
0026
0027 class IRTransformLayer : public IRLayer {
0028 public:
0029 using TransformFunction = unique_function<Expected<ThreadSafeModule>(
0030 ThreadSafeModule, MaterializationResponsibility &R)>;
0031
0032 IRTransformLayer(ExecutionSession &ES, IRLayer &BaseLayer,
0033 TransformFunction Transform = identityTransform);
0034
0035 void setTransform(TransformFunction Transform) {
0036 this->Transform = std::move(Transform);
0037 }
0038
0039 void emit(std::unique_ptr<MaterializationResponsibility> R,
0040 ThreadSafeModule TSM) override;
0041
0042 static ThreadSafeModule identityTransform(ThreadSafeModule TSM,
0043 MaterializationResponsibility &R) {
0044 return TSM;
0045 }
0046
0047 private:
0048 IRLayer &BaseLayer;
0049 TransformFunction Transform;
0050 };
0051
0052 }
0053 }
0054
0055 #endif