IRTransformLayer.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. //===-------------- IRTransformLayer.cpp - IR Transform Layer -------------===//
  2. //
  3. // 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
  6. //
  7. //===----------------------------------------------------------------------===//
  8. #include "llvm/ExecutionEngine/Orc/IRTransformLayer.h"
  9. #include "llvm/Support/MemoryBuffer.h"
  10. namespace llvm {
  11. namespace orc {
  12. IRTransformLayer::IRTransformLayer(ExecutionSession &ES, IRLayer &BaseLayer,
  13. TransformFunction Transform)
  14. : IRLayer(ES, BaseLayer.getManglingOptions()), BaseLayer(BaseLayer),
  15. Transform(std::move(Transform)) {}
  16. void IRTransformLayer::emit(std::unique_ptr<MaterializationResponsibility> R,
  17. ThreadSafeModule TSM) {
  18. assert(TSM && "Module must not be null");
  19. if (auto TransformedTSM = Transform(std::move(TSM), *R))
  20. BaseLayer.emit(std::move(R), std::move(*TransformedTSM));
  21. else {
  22. R->failMaterialization();
  23. getExecutionSession().reportError(TransformedTSM.takeError());
  24. }
  25. }
  26. } // End namespace orc.
  27. } // End namespace llvm.