185642262SLang Hames //===---------- ObjectTransformLayer.cpp - Object Transform Layer ---------===// 285642262SLang Hames // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 685642262SLang Hames // 785642262SLang Hames //===----------------------------------------------------------------------===// 885642262SLang Hames 985642262SLang Hames #include "llvm/ExecutionEngine/Orc/ObjectTransformLayer.h" 1085642262SLang Hames #include "llvm/Support/MemoryBuffer.h" 1185642262SLang Hames 1285642262SLang Hames namespace llvm { 1385642262SLang Hames namespace orc { 1485642262SLang Hames 15079df9abSLang Hames ObjectTransformLayer::ObjectTransformLayer(ExecutionSession &ES, 1685642262SLang Hames ObjectLayer &BaseLayer, 1785642262SLang Hames TransformFunction Transform) 1885642262SLang Hames : ObjectLayer(ES), BaseLayer(BaseLayer), Transform(std::move(Transform)) {} 1985642262SLang Hames 20*7dcd0042SLang Hames void ObjectTransformLayer::emit( 21*7dcd0042SLang Hames std::unique_ptr<MaterializationResponsibility> R, 2285642262SLang Hames std::unique_ptr<MemoryBuffer> O) { 2385642262SLang Hames assert(O && "Module must not be null"); 2485642262SLang Hames 2516f38ddaSLang Hames // If there is a transform set then apply it. 2616f38ddaSLang Hames if (Transform) { 2785642262SLang Hames if (auto TransformedObj = Transform(std::move(O))) 2816f38ddaSLang Hames O = std::move(*TransformedObj); 2985642262SLang Hames else { 30*7dcd0042SLang Hames R->failMaterialization(); 3185642262SLang Hames getExecutionSession().reportError(TransformedObj.takeError()); 3216f38ddaSLang Hames return; 3385642262SLang Hames } 3485642262SLang Hames } 3585642262SLang Hames 3616f38ddaSLang Hames BaseLayer.emit(std::move(R), std::move(O)); 3716f38ddaSLang Hames } 3816f38ddaSLang Hames 3985642262SLang Hames } // End namespace orc. 4085642262SLang Hames } // End namespace llvm. 41