16 #ifndef LLVM_CODEGEN_COMMANDFLAGS_H
17 #define LLVM_CODEGEN_COMMANDFLAGS_H
35 MArch(
"march",
cl::desc(
"Architecture to generate code for (see --version)"));
39 cl::desc(
"Target a specific cpu type (-mcpu=help for details)"),
46 cl::desc(
"Target specific attributes (-mattr=help for details)"),
55 "Target default relocation model"),
57 "Non-relocatable code"),
59 "Fully relocatable, position independent code"),
61 "Relocatable external references, non-relocatable code"),
69 "POSIX thread model"),
71 "Single thread model"),
79 "Target default code model"),
92 cl::desc(
"Choose a file type (not all types are supported by all targets):"),
95 "Emit an assembly ('.s') file"),
97 "Emit a native object ('.o') file"),
99 "Emit nothing, for performance testing"),
104 cl::desc(
"Enable less precise MAD instructions to be generated"),
109 cl::desc(
"Disable frame pointer elimination optimization"),
114 cl::desc(
"Enable optimizations that may decrease FP precision"),
119 cl::desc(
"Enable FP math optimizations that assume no +-Infs"),
124 cl::desc(
"Enable FP math optimizations that assume no NaNs"),
130 cl::desc(
"Force codegen to assume rounding mode can change dynamically"),
139 "Target default float ABI type"),
141 "Soft float ABI (implied by -soft-float)"),
143 "Hard float ABI (uses FP registers)"),
148 cl::desc(
"Enable aggressive formation of fused FP ops"),
152 "Fuse FP ops whenever profitable"),
154 "Only fuse 'blessed' FP ops."),
156 "Only fuse FP ops when the result won't be affected."),
162 cl::desc(
"Choose reciprocal operation types and parameters."),
163 cl::value_desc(
"all,none,default,divf,!vec-sqrtd,vec-divd:0,sqrt:9..."));
167 cl::desc(
"Don't place zero-initialized symbols into bss section"),
172 cl::desc(
"Turn fastcc calls into tail calls by (potentially) changing ABI."),
182 cl::desc(
"Override default stack alignment"),
187 cl::desc(
"Emit a call to trap function rather than a trap instruction"),
192 cl::desc(
"Assume the creation of a position independent executable."),
197 cl::desc(
"Use .ctors instead of .init_array."),
201 cl::desc(
"Stop compilation after a specific pass"),
205 cl::desc(
"Resume compilation after a specific pass"),
210 RunPass(
"run-pass",
cl::desc(
"Run compiler only for one specific pass"),
214 cl::desc(
"Emit data into separate sections"),
219 cl::desc(
"Emit functions into separate sections"),
223 cl::desc(
"Give unique names to every section"),
228 cl::desc(
"Choose the type of Jump-Instruction Table for jumptable."),
232 "Create a single table for all jumptable functions"),
234 "Create one table per number of parameters."),
236 "Create one table per simplified function type."),
238 "Create one table per unique function type."),
276 if (
MCPU ==
"native")
289 if (
MCPU ==
"native") {
292 for (
auto &
F : HostFeatures)
296 for (
unsigned i = 0; i !=
MAttrs.size(); ++i)
307 auto &Ctx =
F.getContext();
314 if (!Features.
empty())
316 "target-features", Features);
320 "no-frame-pointer-elim",
325 "disable-tail-calls",
331 if (
auto *
Call = dyn_cast<CallInst>(&
I))
332 if (
const auto *F =
Call->getCalledFunction())
333 if (F->getIntrinsicID() == Intrinsic::debugtrap ||
334 F->getIntrinsicID() == Intrinsic::trap)
340 F.setAttributes(NewAttrs);
ValuesClass< DataType > LLVM_END_WITH_NULL values(const char *Arg, DataType Val, const char *Desc,...)
cl::opt< bool > EnableNoNaNsFPMath("enable-no-nans-fp-math", cl::desc("Enable FP math optimizations that assume no NaNs"), cl::init(false))
cl::opt< bool > UniqueSectionNames("unique-section-names", cl::desc("Give unique names to every section"), cl::init(true))
MCTargetOptions MCOptions
Machine level options.
static std::string getCPUStr()
A Module instance is used to store all the information related to an LLVM module. ...
unsigned DataSections
Emit data into separate sections.
cl::opt< llvm::JumpTable::JumpTableType > JTableType("jump-table-type", cl::desc("Choose the type of Jump-Instruction Table for jumptable."), cl::init(JumpTable::Single), cl::values(clEnumValN(JumpTable::Single,"single","Create a single table for all jumptable functions"), clEnumValN(JumpTable::Arity,"arity","Create one table per number of parameters."), clEnumValN(JumpTable::Simplified,"simplified","Create one table per simplified function type."), clEnumValN(JumpTable::Full,"full","Create one table per unique function type."), clEnumValEnd))
cl::opt< ThreadModel::Model > TMModel("thread-model", cl::desc("Choose threading model"), cl::init(ThreadModel::POSIX), cl::values(clEnumValN(ThreadModel::POSIX,"posix","POSIX thread model"), clEnumValN(ThreadModel::Single,"single","Single thread model"), clEnumValEnd))
const FeatureBitset Features
ThreadModel::Model ThreadModel
ThreadModel - This flag specifies the type of threading model to assume for things like atomics...
static MCTargetOptions InitMCTargetOptionsFromFlags()
cl::opt< llvm::FPOpFusion::FPOpFusionMode > FuseFPOps("fp-contract", cl::desc("Enable aggressive formation of fused FP ops"), cl::init(FPOpFusion::Standard), cl::values(clEnumValN(FPOpFusion::Fast,"fast","Fuse FP ops whenever profitable"), clEnumValN(FPOpFusion::Standard,"on","Only fuse 'blessed' FP ops."), clEnumValN(FPOpFusion::Strict,"off","Only fuse FP ops when the result won't be affected."), clEnumValEnd))
void AddFeature(StringRef String, bool Enable=true)
Adding Features.
cl::opt< bool > EnableFPMAD("enable-fp-mad", cl::desc("Enable less precise MAD instructions to be generated"), cl::init(false))
static TargetOptions InitTargetOptionsFromCodeGenFlags()
unsigned NoNaNsFPMath
NoNaNsFPMath - This flag is enabled when the -enable-no-nans-fp-math flag is specified on the command...
unsigned FunctionSections
Emit functions into separate sections.
cl::opt< bool > EnablePIE("enable-pie", cl::desc("Assume the creation of a position independent executable."), cl::init(false))
unsigned UniqueSectionNames
cl::opt< bool > DisableFPElim("disable-fp-elim", cl::desc("Disable frame pointer elimination optimization"), cl::init(false))
cl::opt< bool > DontPlaceZerosInBSS("nozero-initialized-in-bss", cl::desc("Don't place zero-initialized symbols into bss section"), cl::init(false))
initializer< Ty > init(const Ty &Val)
unsigned UnsafeFPMath
UnsafeFPMath - This flag is enabled when the -enable-unsafe-fp-math flag is specified on the command ...
FPOpFusion::FPOpFusionMode AllowFPOpFusion
AllowFPOpFusion - This flag is set by the -fuse-fp-ops=xxx option.
cl::opt< Reloc::Model > RelocModel("relocation-model", cl::desc("Choose relocation model"), cl::init(Reloc::Default), cl::values(clEnumValN(Reloc::Default,"default","Target default relocation model"), clEnumValN(Reloc::Static,"static","Non-relocatable code"), clEnumValN(Reloc::PIC_,"pic","Fully relocatable, position independent code"), clEnumValN(Reloc::DynamicNoPIC,"dynamic-no-pic","Relocatable external references, non-relocatable code"), clEnumValEnd))
static void setFunctionAttributes(StringRef CPU, StringRef Features, Module &M)
Set function attributes of functions in Module M based on CPU, Features, and command line flags...
cl::list< std::string > MAttrs("mattr", cl::CommaSeparated, cl::desc("Target specific attributes (-mattr=help for details)"), cl::value_desc("a1,+a2,-a3,..."))
cl::opt< bool > EnableNoInfsFPMath("enable-no-infs-fp-math", cl::desc("Enable FP math optimizations that assume no +-Infs"), cl::init(false))
TargetRecip Reciprocals
This class encapsulates options for reciprocal-estimate code generation.
unsigned GuaranteedTailCallOpt
GuaranteedTailCallOpt - This flag is enabled when -tailcallopt is specified on the commandline...
unsigned NoInfsFPMath
NoInfsFPMath - This flag is enabled when the -enable-no-infs-fp-math flag is specified on the command...
unsigned NoZerosInBSS
NoZerosInBSS - By default some codegens place zero-initialized data to .bss section.
cl::opt< llvm::CodeModel::Model > CMModel("code-model", cl::desc("Choose code model"), cl::init(CodeModel::Default), cl::values(clEnumValN(CodeModel::Default,"default","Target default code model"), clEnumValN(CodeModel::Small,"small","Small code model"), clEnumValN(CodeModel::Kernel,"kernel","Kernel code model"), clEnumValN(CodeModel::Medium,"medium","Medium code model"), clEnumValN(CodeModel::Large,"large","Large code model"), clEnumValEnd))
std::string getString() const
Features string accessors.
cl::opt< llvm::FloatABI::ABIType > FloatABIForCalls("float-abi", cl::desc("Choose float ABI type"), cl::init(FloatABI::Default), cl::values(clEnumValN(FloatABI::Default,"default","Target default float ABI type"), clEnumValN(FloatABI::Soft,"soft","Soft float ABI (implied by -soft-float)"), clEnumValN(FloatABI::Hard,"hard","Hard float ABI (uses FP registers)"), clEnumValEnd))
cl::opt< bool > EnableUnsafeFPMath("enable-unsafe-fp-math", cl::desc("Enable optimizations that may decrease FP precision"), cl::init(false))
cl::opt< std::string > MCPU("mcpu", cl::desc("Target a specific cpu type (-mcpu=help for details)"), cl::value_desc("cpu-name"), cl::init(""))
cl::opt< bool > FunctionSections("function-sections", cl::desc("Emit functions into separate sections"), cl::init(false))
JumpTable::JumpTableType JTType
JTType - This flag specifies the type of jump-instruction table to create for functions that have the...
unsigned UseInitArray
UseInitArray - Use .init_array instead of .ctors for static constructors.
Module.h This file contains the declarations for the Module class.
cl::opt< std::string > MArch("march", cl::desc("Architecture to generate code for (see --version)"))
cl::opt< bool > DisableTailCalls("disable-tail-calls", cl::desc("Never emit tail calls"), cl::init(false))
unsigned StackAlignmentOverride
StackAlignmentOverride - Override default stack alignment for target.
SubtargetFeatures - Manages the enabling and disabling of subtarget specific features.
cl::opt< bool > DataSections("data-sections", cl::desc("Emit data into separate sections"), cl::init(false))
static std::string getFeaturesStr()
cl::opt< unsigned > OverrideStackAlignment("stack-alignment", cl::desc("Override default stack alignment"), cl::init(0))
static StringRef toStringRef(bool B)
Construct a string ref from a boolean.
#define clEnumValN(ENUMVAL, FLAGNAME, DESC)
cl::opt< std::string > TrapFuncName("trap-func", cl::Hidden, cl::desc("Emit a call to trap function rather than a trap instruction"), cl::init(""))
cl::opt< std::string > RunPass("run-pass", cl::desc("Run compiler only for one specific pass"), cl::value_desc("pass-name"), cl::init(""))
StringRef getHostCPUName()
getHostCPUName - Get the LLVM name for the host CPU.
unsigned PositionIndependentExecutable
PositionIndependentExecutable - This flag indicates whether the code will eventually be linked into a...
cl::opt< std::string > StopAfter("stop-after", cl::desc("Stop compilation after a specific pass"), cl::value_desc("pass-name"), cl::init(""))
cl::opt< std::string > StartAfter("start-after", cl::desc("Resume compilation after a specific pass"), cl::value_desc("pass-name"), cl::init(""))
cl::opt< TargetMachine::CodeGenFileType > FileType("filetype", cl::init(TargetMachine::CGFT_AssemblyFile), cl::desc("Choose a file type (not all types are supported by all targets):"), cl::values(clEnumValN(TargetMachine::CGFT_AssemblyFile,"asm","Emit an assembly ('.s') file"), clEnumValN(TargetMachine::CGFT_ObjectFile,"obj","Emit a native object ('.o') file"), clEnumValN(TargetMachine::CGFT_Null,"null","Emit nothing, for performance testing"), clEnumValEnd))
cl::opt< bool > EnableHonorSignDependentRoundingFPMath("enable-sign-dependent-rounding-fp-math", cl::Hidden, cl::desc("Force codegen to assume rounding mode can change dynamically"), cl::init(false))
unsigned HonorSignDependentRoundingFPMathOption
HonorSignDependentRoundingFPMath - This returns true when the -enable-sign-dependent-rounding-fp-math...
cl::opt< bool > UseCtors("use-ctors", cl::desc("Use .ctors instead of .init_array."), cl::init(false))
StringRef - Represent a constant reference to a string, i.e.
cl::opt< bool > EnableGuaranteedTailCallOpt("tailcallopt", cl::desc("Turn fastcc calls into tail calls by (potentially) changing ABI."), cl::init(false))
cl::list< std::string > ReciprocalOps("recip", cl::CommaSeparated, cl::desc("Choose reciprocal operation types and parameters."), cl::value_desc("all,none,default,divf,!vec-sqrtd,vec-divd:0,sqrt:9..."))
bool getHostCPUFeatures(StringMap< bool > &Features)
getHostCPUFeatures - Get the LLVM names for the host CPU features.
unsigned LessPreciseFPMADOption
LessPreciseFPMAD - This flag is enabled when the -enable-fp-mad is specified on the command line...
AttributeSet addAttributes(LLVMContext &C, unsigned Index, AttributeSet Attrs) const
Add attributes to the attribute set at the given index.
bool empty() const
empty - Check if the string is empty.
FloatABI::ABIType FloatABIType
FloatABIType - This setting is set by -float-abi=xxx option is specfied on the command line...