10b57cec5SDimitry Andric //===-------------- IRTransformLayer.cpp - IR Transform Layer -------------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric
90b57cec5SDimitry Andric #include "llvm/ExecutionEngine/Orc/IRTransformLayer.h"
100b57cec5SDimitry Andric #include "llvm/Support/MemoryBuffer.h"
110b57cec5SDimitry Andric
120b57cec5SDimitry Andric namespace llvm {
130b57cec5SDimitry Andric namespace orc {
140b57cec5SDimitry Andric
IRTransformLayer(ExecutionSession & ES,IRLayer & BaseLayer,TransformFunction Transform)1513138422SDimitry Andric IRTransformLayer::IRTransformLayer(ExecutionSession &ES, IRLayer &BaseLayer,
160b57cec5SDimitry Andric TransformFunction Transform)
1713138422SDimitry Andric : IRLayer(ES, BaseLayer.getManglingOptions()), BaseLayer(BaseLayer),
1813138422SDimitry Andric Transform(std::move(Transform)) {}
190b57cec5SDimitry Andric
emit(std::unique_ptr<MaterializationResponsibility> R,ThreadSafeModule TSM)20*e8d8bef9SDimitry Andric void IRTransformLayer::emit(std::unique_ptr<MaterializationResponsibility> R,
210b57cec5SDimitry Andric ThreadSafeModule TSM) {
228bcb0991SDimitry Andric assert(TSM && "Module must not be null");
230b57cec5SDimitry Andric
24*e8d8bef9SDimitry Andric if (auto TransformedTSM = Transform(std::move(TSM), *R))
250b57cec5SDimitry Andric BaseLayer.emit(std::move(R), std::move(*TransformedTSM));
260b57cec5SDimitry Andric else {
27*e8d8bef9SDimitry Andric R->failMaterialization();
280b57cec5SDimitry Andric getExecutionSession().reportError(TransformedTSM.takeError());
290b57cec5SDimitry Andric }
300b57cec5SDimitry Andric }
310b57cec5SDimitry Andric
320b57cec5SDimitry Andric } // End namespace orc.
330b57cec5SDimitry Andric } // End namespace llvm.
34