blob: 511248f83b2592c7c691fa93badc8bde153cfb5d [file] [log] [blame]
Lang Hames5216ac92018-05-23 21:27:07 +00001//===-------------- IRTransformLayer.cpp - IR Transform Layer -------------===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Lang Hames5216ac92018-05-23 21:27:07 +00006//
7//===----------------------------------------------------------------------===//
8
9#include "llvm/ExecutionEngine/Orc/IRTransformLayer.h"
10#include "llvm/Support/MemoryBuffer.h"
11
12namespace llvm {
13namespace orc {
14
Lang Hamesce2207a2020-01-21 16:28:30 -080015IRTransformLayer::IRTransformLayer(ExecutionSession &ES, IRLayer &BaseLayer,
16 TransformFunction Transform)
17 : IRLayer(ES, BaseLayer.getManglingOptions()), BaseLayer(BaseLayer),
18 Transform(std::move(Transform)) {}
Lang Hames5216ac92018-05-23 21:27:07 +000019
Lang Hames8b942742018-10-16 20:13:06 +000020void IRTransformLayer::emit(MaterializationResponsibility R,
21 ThreadSafeModule TSM) {
Lang Hames809e9d12019-08-02 15:21:37 +000022 assert(TSM && "Module must not be null");
Lang Hames5216ac92018-05-23 21:27:07 +000023
Lang Hames3e709d52018-09-28 21:49:53 +000024 if (auto TransformedTSM = Transform(std::move(TSM), R))
Lang Hames8b942742018-10-16 20:13:06 +000025 BaseLayer.emit(std::move(R), std::move(*TransformedTSM));
Lang Hames5216ac92018-05-23 21:27:07 +000026 else {
27 R.failMaterialization();
Lang Hames8d76c712018-09-26 01:24:12 +000028 getExecutionSession().reportError(TransformedTSM.takeError());
Lang Hames5216ac92018-05-23 21:27:07 +000029 }
30}
31
32} // End namespace orc.
33} // End namespace llvm.