LLVM 17.0.0git
JITTargetMachineBuilder.h
Go to the documentation of this file.
1//===- JITTargetMachineBuilder.h - Build TargetMachines for JIT -*- C++ -*-===//
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// A utitily for building TargetMachines for JITs.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_EXECUTIONENGINE_ORC_JITTARGETMACHINEBUILDER_H
14#define LLVM_EXECUTIONENGINE_ORC_JITTARGETMACHINEBUILDER_H
15
18#include "llvm/Support/Error.h"
22#include <memory>
23#include <optional>
24#include <string>
25#include <vector>
26
27namespace llvm {
28
29class raw_ostream;
30
31namespace orc {
32
33/// A utility class for building TargetMachines for JITs.
35#ifndef NDEBUG
37#endif
38public:
39 /// Create a JITTargetMachineBuilder based on the given triple.
40 ///
41 /// Note: TargetOptions is default-constructed, then EmulatedTLS and
42 /// ExplicitEmulatedTLS are set to true. If EmulatedTLS is not
43 /// required, these values should be reset before calling
44 /// createTargetMachine.
46
47 /// Create a JITTargetMachineBuilder for the host system.
48 ///
49 /// Note: TargetOptions is default-constructed, then EmulatedTLS and
50 /// ExplicitEmulatedTLS are set to true. If EmulatedTLS is not
51 /// required, these values should be reset before calling
52 /// createTargetMachine.
54
55 /// Create a TargetMachine.
56 ///
57 /// This operation will fail if the requested target is not registered,
58 /// in which case see llvm/Support/TargetSelect.h. To JIT IR the Target and
59 /// the target's AsmPrinter must both be registered. To JIT assembly
60 /// (including inline and module level assembly) the target's AsmParser must
61 /// also be registered.
63
64 /// Get the default DataLayout for the target.
65 ///
66 /// Note: This is reasonably expensive, as it creates a temporary
67 /// TargetMachine instance under the hood. It is only suitable for use during
68 /// JIT setup.
70 auto TM = createTargetMachine();
71 if (!TM)
72 return TM.takeError();
73 return (*TM)->createDataLayout();
74 }
75
76 /// Set the CPU string.
77 JITTargetMachineBuilder &setCPU(std::string CPU) {
78 this->CPU = std::move(CPU);
79 return *this;
80 }
81
82 /// Returns the CPU string.
83 const std::string &getCPU() const { return CPU; }
84
85 /// Set the relocation model.
86 JITTargetMachineBuilder &setRelocationModel(std::optional<Reloc::Model> RM) {
87 this->RM = std::move(RM);
88 return *this;
89 }
90
91 /// Get the relocation model.
92 const std::optional<Reloc::Model> &getRelocationModel() const { return RM; }
93
94 /// Set the code model.
95 JITTargetMachineBuilder &setCodeModel(std::optional<CodeModel::Model> CM) {
96 this->CM = std::move(CM);
97 return *this;
98 }
99
100 /// Get the code model.
101 const std::optional<CodeModel::Model> &getCodeModel() const { return CM; }
102
103 /// Set the LLVM CodeGen optimization level.
105 this->OptLevel = OptLevel;
106 return *this;
107 }
108
109 /// Set subtarget features.
111 Features = SubtargetFeatures(FeatureString);
112 return *this;
113 }
114
115 /// Add subtarget features.
117 addFeatures(const std::vector<std::string> &FeatureVec);
118
119 /// Access subtarget features.
120 SubtargetFeatures &getFeatures() { return Features; }
121
122 /// Access subtarget features.
123 const SubtargetFeatures &getFeatures() const { return Features; }
124
125 /// Set TargetOptions.
126 ///
127 /// Note: This operation will overwrite any previously configured options,
128 /// including EmulatedTLS, ExplicitEmulatedTLS, and UseInitArray which
129 /// the JITTargetMachineBuilder sets by default. Clients are responsible
130 /// for re-enabling these overwritten options.
132 this->Options = std::move(Options);
133 return *this;
134 }
135
136 /// Access TargetOptions.
138
139 /// Access TargetOptions.
140 const TargetOptions &getOptions() const { return Options; }
141
142 /// Access Triple.
143 Triple &getTargetTriple() { return TT; }
144
145 /// Access Triple.
146 const Triple &getTargetTriple() const { return TT; }
147
148private:
149 Triple TT;
150 std::string CPU;
151 SubtargetFeatures Features;
153 std::optional<Reloc::Model> RM;
154 std::optional<CodeModel::Model> CM;
156};
157
158#ifndef NDEBUG
160public:
162 StringRef Indent)
163 : JTMB(JTMB), Indent(Indent) {}
164 void print(raw_ostream &OS) const;
165
167 const JITTargetMachineBuilderPrinter &JTMBP) {
168 JTMBP.print(OS);
169 return OS;
170 }
171
172private:
174 StringRef Indent;
175};
176#endif // NDEBUG
177
178} // end namespace orc
179} // end namespace llvm
180
181#endif // LLVM_EXECUTIONENGINE_ORC_JITTARGETMACHINEBUILDER_H
static LVOptions Options
Definition: LVOptions.cpp:25
const char LLVMTargetMachineRef TM
raw_pwrite_stream & OS
Tagged union holding either a T or a Error.
Definition: Error.h:470
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
Manages the enabling and disabling of subtarget specific features.
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
JITTargetMachineBuilderPrinter(JITTargetMachineBuilder &JTMB, StringRef Indent)
friend raw_ostream & operator<<(raw_ostream &OS, const JITTargetMachineBuilderPrinter &JTMBP)
A utility class for building TargetMachines for JITs.
JITTargetMachineBuilder & setCodeGenOptLevel(CodeGenOpt::Level OptLevel)
Set the LLVM CodeGen optimization level.
const std::string & getCPU() const
Returns the CPU string.
const std::optional< Reloc::Model > & getRelocationModel() const
Get the relocation model.
TargetOptions & getOptions()
Access TargetOptions.
const std::optional< CodeModel::Model > & getCodeModel() const
Get the code model.
JITTargetMachineBuilder & addFeatures(const std::vector< std::string > &FeatureVec)
Add subtarget features.
SubtargetFeatures & getFeatures()
Access subtarget features.
JITTargetMachineBuilder & setOptions(TargetOptions Options)
Set TargetOptions.
const Triple & getTargetTriple() const
Access Triple.
JITTargetMachineBuilder & setRelocationModel(std::optional< Reloc::Model > RM)
Set the relocation model.
const TargetOptions & getOptions() const
Access TargetOptions.
static Expected< JITTargetMachineBuilder > detectHost()
Create a JITTargetMachineBuilder for the host system.
JITTargetMachineBuilder & setCodeModel(std::optional< CodeModel::Model > CM)
Set the code model.
Expected< DataLayout > getDefaultDataLayoutForTarget()
Get the default DataLayout for the target.
JITTargetMachineBuilder & setFeatures(StringRef FeatureString)
Set subtarget features.
const SubtargetFeatures & getFeatures() const
Access subtarget features.
Expected< std::unique_ptr< TargetMachine > > createTargetMachine()
Create a TargetMachine.
JITTargetMachineBuilder & setCPU(std::string CPU)
Set the CPU string.
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
Level
Code generation optimization level.
Definition: CodeGen.h:57
@ Default
-O2, -Os
Definition: CodeGen.h:60
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18