Movatterモバイル変換


[0]ホーム

URL:


LLVM 20.0.0git
CompileUtils.cpp
Go to the documentation of this file.
1//===------ CompileUtils.cpp - Utilities for compiling IR in the JIT ------===//
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
9#include "llvm/ExecutionEngine/Orc/CompileUtils.h"
10
11#include "llvm/ADT/SmallVector.h"
12#include "llvm/ExecutionEngine/ObjectCache.h"
13#include "llvm/IR/LegacyPassManager.h"
14#include "llvm/IR/Module.h"
15#include "llvm/MC/MCContext.h"
16#include "llvm/Object/ObjectFile.h"
17#include "llvm/Support/Error.h"
18#include "llvm/Support/MemoryBuffer.h"
19#include "llvm/Support/SmallVectorMemoryBuffer.h"
20#include "llvm/Target/TargetMachine.h"
21
22namespacellvm {
23namespaceorc {
24
25IRSymbolMapper::ManglingOptions
26irManglingOptionsFromTargetOptions(constTargetOptions &Opts) {
27IRSymbolMapper::ManglingOptions MO;
28
29 MO.EmulatedTLS = Opts.EmulatedTLS;
30
31return MO;
32}
33
34/// Compile a Module to an ObjectFile.
35Expected<SimpleCompiler::CompileResult>SimpleCompiler::operator()(Module &M) {
36CompileResult CachedObject = tryToLoadFromObjectCache(M);
37if (CachedObject)
38return std::move(CachedObject);
39
40SmallVector<char, 0> ObjBufferSV;
41
42 {
43raw_svector_ostream ObjStream(ObjBufferSV);
44
45legacy::PassManager PM;
46MCContext *Ctx;
47if (TM.addPassesToEmitMC(PM, Ctx, ObjStream))
48return make_error<StringError>("Target does not support MC emission",
49inconvertibleErrorCode());
50 PM.run(M);
51 }
52
53auto ObjBuffer = std::make_unique<SmallVectorMemoryBuffer>(
54 std::move(ObjBufferSV), M.getModuleIdentifier() +"-jitted-objectbuffer",
55/*RequiresNullTerminator=*/false);
56
57auto Obj =object::ObjectFile::createObjectFile(ObjBuffer->getMemBufferRef());
58
59if (!Obj)
60return Obj.takeError();
61
62 notifyObjectCompiled(M, *ObjBuffer);
63return std::move(ObjBuffer);
64}
65
66SimpleCompiler::CompileResult
67SimpleCompiler::tryToLoadFromObjectCache(constModule &M) {
68if (!ObjCache)
69returnCompileResult();
70
71return ObjCache->getObject(&M);
72}
73
74void SimpleCompiler::notifyObjectCompiled(constModule &M,
75constMemoryBuffer &ObjBuffer) {
76if (ObjCache)
77 ObjCache->notifyObjectCompiled(&M, ObjBuffer.getMemBufferRef());
78}
79
80ConcurrentIRCompiler::ConcurrentIRCompiler(JITTargetMachineBuilder JTMB,
81ObjectCache *ObjCache)
82 : IRCompiler(irManglingOptionsFromTargetOptions(JTMB.getOptions())),
83 JTMB(std::move(JTMB)), ObjCache(ObjCache) {}
84
85Expected<std::unique_ptr<MemoryBuffer>>
86ConcurrentIRCompiler::operator()(Module &M) {
87auto TM =cantFail(JTMB.createTargetMachine());
88SimpleCompilerC(*TM, ObjCache);
89returnC(M);
90}
91
92}// end namespace orc
93}// end namespace llvm
CompileUtils.h
Module.h
Module.h This file contains the declarations for the Module class.
LegacyPassManager.h
MCContext.h
MemoryBuffer.h
ObjectCache.h
ObjectFile.h
SmallVectorMemoryBuffer.h
SmallVector.h
This file defines the SmallVector class.
llvm::Expected
Tagged union holding either a T or a Error.
Definition:Error.h:481
llvm::MCContext
Context object for machine code objects.
Definition:MCContext.h:83
llvm::MemoryBuffer
This interface provides simple read-only access to a block of memory, and provides simple methods for...
Definition:MemoryBuffer.h:51
llvm::MemoryBuffer::getMemBufferRef
MemoryBufferRef getMemBufferRef() const
Definition:MemoryBuffer.cpp:589
llvm::Module
A Module instance is used to store all the information related to an LLVM module.
Definition:Module.h:65
llvm::ObjectCache
This is the base ObjectCache type which can be provided to an ExecutionEngine for the purpose of avoi...
Definition:ObjectCache.h:23
llvm::ObjectCache::getObject
virtual std::unique_ptr< MemoryBuffer > getObject(const Module *M)=0
Returns a pointer to a newly allocated MemoryBuffer that contains the object which corresponds with M...
llvm::ObjectCache::notifyObjectCompiled
virtual void notifyObjectCompiled(const Module *M, MemoryBufferRef Obj)=0
notifyObjectCompiled - Provides a pointer to compiled code for Module M.
llvm::SmallVector
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition:SmallVector.h:1196
llvm::TargetMachine::addPassesToEmitMC
virtual bool addPassesToEmitMC(PassManagerBase &, MCContext *&, raw_pwrite_stream &, bool=true)
Add passes to the specified pass manager to get machine code emitted with the MCJIT.
Definition:TargetMachine.h:397
llvm::TargetOptions
Definition:TargetOptions.h:132
llvm::TargetOptions::EmulatedTLS
unsigned EmulatedTLS
EmulatedTLS - This flag enables emulated TLS model, using emutls function in the runtime library.
Definition:TargetOptions.h:298
llvm::legacy::PassManager
PassManager manages ModulePassManagers.
Definition:LegacyPassManager.h:52
llvm::legacy::PassManager::run
bool run(Module &M)
run - Execute all of the passes scheduled for execution.
Definition:LegacyPassManager.cpp:1647
llvm::object::ObjectFile::createObjectFile
static Expected< OwningBinary< ObjectFile > > createObjectFile(StringRef ObjectPath)
Definition:ObjectFile.cpp:209
llvm::orc::ConcurrentIRCompiler::ConcurrentIRCompiler
ConcurrentIRCompiler(JITTargetMachineBuilder JTMB, ObjectCache *ObjCache=nullptr)
Definition:CompileUtils.cpp:80
llvm::orc::ConcurrentIRCompiler::operator()
Expected< std::unique_ptr< MemoryBuffer > > operator()(Module &M) override
Definition:CompileUtils.cpp:86
llvm::orc::JITTargetMachineBuilder
A utility class for building TargetMachines for JITs.
Definition:JITTargetMachineBuilder.h:34
llvm::orc::JITTargetMachineBuilder::createTargetMachine
Expected< std::unique_ptr< TargetMachine > > createTargetMachine()
Create a TargetMachine.
Definition:JITTargetMachineBuilder.cpp:39
llvm::orc::SimpleCompiler
Simple compile functor: Takes a single IR module and returns an ObjectFile.
Definition:CompileUtils.h:36
llvm::orc::SimpleCompiler::CompileResult
std::unique_ptr< MemoryBuffer > CompileResult
Definition:CompileUtils.h:38
llvm::orc::SimpleCompiler::operator()
Expected< CompileResult > operator()(Module &M) override
Compile a Module to an ObjectFile.
Definition:CompileUtils.cpp:35
llvm::raw_svector_ostream
A raw_ostream that writes to an SmallVector or SmallString.
Definition:raw_ostream.h:691
Error.h
TargetMachine.h
llvm::CallingConv::C
@ C
The default llvm calling convention, compatible with C.
Definition:CallingConv.h:34
llvm::orc::irManglingOptionsFromTargetOptions
IRSymbolMapper::ManglingOptions irManglingOptionsFromTargetOptions(const TargetOptions &Opts)
Definition:CompileUtils.cpp:26
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:AddressRanges.h:18
llvm::inconvertibleErrorCode
std::error_code inconvertibleErrorCode()
The value returned by this function can be returned from convertToErrorCode for Error values where no...
Definition:Error.cpp:98
llvm::cantFail
void cantFail(Error Err, const char *Msg=nullptr)
Report a fatal error if Err is a failure value.
Definition:Error.h:756
llvm::move
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Definition:STLExtras.h:1873
std
Implement std::hash so that hash_code can be used in STL containers.
Definition:BitVector.h:858
llvm::orc::IRSymbolMapper::ManglingOptions
Definition:Mangling.h:41
llvm::orc::IRSymbolMapper::ManglingOptions::EmulatedTLS
bool EmulatedTLS
Definition:Mangling.h:42

Generated on Sun Jul 20 2025 09:26:50 for LLVM by doxygen 1.9.6
[8]ページ先頭

©2009-2025 Movatter.jp