003 File Manager
Current Path:
/usr/src/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc
usr
/
src
/
contrib
/
llvm-project
/
llvm
/
lib
/
ExecutionEngine
/
Orc
/
📁
..
📄
CompileOnDemandLayer.cpp
(12.91 KB)
📄
CompileUtils.cpp
(2.8 KB)
📄
Core.cpp
(71.56 KB)
📄
DebugUtils.cpp
(10.4 KB)
📄
ExecutionUtils.cpp
(13.7 KB)
📄
IRCompileLayer.cpp
(1.55 KB)
📄
IRTransformLayer.cpp
(1.17 KB)
📄
IndirectionUtils.cpp
(12.36 KB)
📄
JITTargetMachineBuilder.cpp
(3.71 KB)
📄
LLJIT.cpp
(41.6 KB)
📄
Layer.cpp
(7.61 KB)
📄
LazyReexports.cpp
(7.9 KB)
📄
Legacy.cpp
(2.08 KB)
📄
MachOPlatform.cpp
(17.2 KB)
📄
Mangling.cpp
(5.03 KB)
📄
NullResolver.cpp
(1.12 KB)
📄
ObjectLinkingLayer.cpp
(20.23 KB)
📄
ObjectTransformLayer.cpp
(1.33 KB)
📄
OrcABISupport.cpp
(41.44 KB)
📄
OrcCBindings.cpp
(5.73 KB)
📄
OrcCBindingsStack.h
(18.01 KB)
📄
OrcMCJITReplacement.cpp
(4.68 KB)
📄
OrcMCJITReplacement.h
(17.73 KB)
📄
OrcV2CBindings.cpp
(7.81 KB)
📄
RTDyldObjectLinkingLayer.cpp
(11 KB)
📄
SpeculateAnalyses.cpp
(9.8 KB)
📄
Speculation.cpp
(5.82 KB)
📄
ThreadSafeModule.cpp
(2.04 KB)
Editing: CompileUtils.cpp
//===------ CompileUtils.cpp - Utilities for compiling IR in the JIT ------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/ExecutionEngine/Orc/CompileUtils.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ExecutionEngine/ObjectCache.h" #include "llvm/IR/LegacyPassManager.h" #include "llvm/IR/Module.h" #include "llvm/Object/ObjectFile.h" #include "llvm/Support/Error.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/SmallVectorMemoryBuffer.h" #include "llvm/Target/TargetMachine.h" #include <algorithm> namespace llvm { namespace orc { IRSymbolMapper::ManglingOptions irManglingOptionsFromTargetOptions(const TargetOptions &Opts) { IRSymbolMapper::ManglingOptions MO; MO.EmulatedTLS = Opts.EmulatedTLS; return MO; } /// Compile a Module to an ObjectFile. Expected<SimpleCompiler::CompileResult> SimpleCompiler::operator()(Module &M) { CompileResult CachedObject = tryToLoadFromObjectCache(M); if (CachedObject) return std::move(CachedObject); SmallVector<char, 0> ObjBufferSV; { raw_svector_ostream ObjStream(ObjBufferSV); legacy::PassManager PM; MCContext *Ctx; if (TM.addPassesToEmitMC(PM, Ctx, ObjStream)) return make_error<StringError>("Target does not support MC emission", inconvertibleErrorCode()); PM.run(M); } auto ObjBuffer = std::make_unique<SmallVectorMemoryBuffer>( std::move(ObjBufferSV), M.getModuleIdentifier() + "-jitted-objectbuffer"); auto Obj = object::ObjectFile::createObjectFile(ObjBuffer->getMemBufferRef()); if (!Obj) return Obj.takeError(); notifyObjectCompiled(M, *ObjBuffer); return std::move(ObjBuffer); } SimpleCompiler::CompileResult SimpleCompiler::tryToLoadFromObjectCache(const Module &M) { if (!ObjCache) return CompileResult(); return ObjCache->getObject(&M); } void SimpleCompiler::notifyObjectCompiled(const Module &M, const MemoryBuffer &ObjBuffer) { if (ObjCache) ObjCache->notifyObjectCompiled(&M, ObjBuffer.getMemBufferRef()); } ConcurrentIRCompiler::ConcurrentIRCompiler(JITTargetMachineBuilder JTMB, ObjectCache *ObjCache) : IRCompiler(irManglingOptionsFromTargetOptions(JTMB.getOptions())), JTMB(std::move(JTMB)), ObjCache(ObjCache) {} Expected<std::unique_ptr<MemoryBuffer>> ConcurrentIRCompiler::operator()(Module &M) { auto TM = cantFail(JTMB.createTargetMachine()); SimpleCompiler C(*TM, ObjCache); return C(M); } } // end namespace orc } // end namespace llvm
Upload File
Create Folder