blob: cd42c720689fc1cb72e718ff977ad70a128d6a66 [file] [log] [blame]
Douglas Gregor4cdad312012-10-23 20:05:01 +00001//===--- CodeGenOptions.def - Code generation option database ------ C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the code generation options. Users of this file
11// must define the CODEGENOPT macro to make use of this information.
12// Optionally, the user may also define ENUM_CODEGENOPT (for options
13// that have enumeration type and VALUE_CODEGENOPT is a code
14// generation option that describes a value rather than a flag.
15//
16//===----------------------------------------------------------------------===//
17#ifndef CODEGENOPT
18# error Define the CODEGENOPT macro to handle language options
19#endif
20
21#ifndef VALUE_CODEGENOPT
22# define VALUE_CODEGENOPT(Name, Bits, Default) \
23CODEGENOPT(Name, Bits, Default)
24#endif
25
26#ifndef ENUM_CODEGENOPT
27# define ENUM_CODEGENOPT(Name, Type, Bits, Default) \
28CODEGENOPT(Name, Bits, Default)
29#endif
30
Stephen Hines651f13c2014-04-23 16:59:28 -070031CODEGENOPT(DisableIntegratedAS, 1, 0) ///< -no-integrated-as
32CODEGENOPT(CompressDebugSections, 1, 0) ///< -Wa,-compress-debug-sections
Daniel Dunbarf4910132013-04-16 18:21:19 +000033CODEGENOPT(Autolink , 1, 1) ///< -fno-autolink
Douglas Gregor4cdad312012-10-23 20:05:01 +000034CODEGENOPT(AsmVerbose , 1, 0) ///< -dA, -fverbose-asm.
35CODEGENOPT(ObjCAutoRefCountExceptions , 1, 0) ///< Whether ARC should be EH-safe.
Nick Lewycky0f815f12013-03-07 08:28:53 +000036CODEGENOPT(CoverageExtraChecksum, 1, 0) ///< Whether we need a second checksum for functions in GCNO files.
Nick Lewycky83c546a2013-03-20 02:14:38 +000037CODEGENOPT(CoverageNoFunctionNamesInData, 1, 0) ///< Do not include function names in GCDA files.
Pirama Arumuga Nainar3ea9e332015-04-08 08:57:32 -070038CODEGENOPT(CoverageExitBlockBeforeBody, 1, 0) ///< Whether to emit the exit block before the body blocks in GCNO files.
Douglas Gregor4cdad312012-10-23 20:05:01 +000039CODEGENOPT(CXAAtExit , 1, 1) ///< Use __cxa_atexit for calling destructors.
40CODEGENOPT(CXXCtorDtorAliases, 1, 0) ///< Emit complete ctors/dtors as linker
41 ///< aliases to base ctors when possible.
42CODEGENOPT(DataSections , 1, 0) ///< Set when -fdata-sections is enabled.
Stephen Hines0e2c34f2015-03-23 12:09:02 -070043CODEGENOPT(UniqueSectionNames, 1, 1) ///< Set for -funique-section-names.
Douglas Gregor4cdad312012-10-23 20:05:01 +000044CODEGENOPT(DisableFPElim , 1, 0) ///< Set when -fomit-frame-pointer is enabled.
Nick Lewycky73b8d4b2013-06-21 21:15:32 +000045CODEGENOPT(DisableFree , 1, 0) ///< Don't free memory.
46CODEGENOPT(DisableGCov , 1, 0) ///< Don't run the GCov pass, for testing.
Douglas Gregor4cdad312012-10-23 20:05:01 +000047CODEGENOPT(DisableLLVMOpts , 1, 0) ///< Don't run any optimizations, for use in
48 ///< getting .bc files that correspond to the
49 ///< internal state before optimizations are
50 ///< done.
51CODEGENOPT(DisableRedZone , 1, 0) ///< Set when -mno-red-zone is enabled.
52CODEGENOPT(DisableTailCalls , 1, 0) ///< Do not emit tail calls.
53CODEGENOPT(EmitDeclMetadata , 1, 0) ///< Emit special metadata indicating what
54 ///< Decl* various IR entities came from.
55 ///< Only useful when running CodeGen as a
56 ///< subroutine.
57CODEGENOPT(EmitGcovArcs , 1, 0) ///< Emit coverage data files, aka. GCDA.
58CODEGENOPT(EmitGcovNotes , 1, 0) ///< Emit coverage "notes" files, aka GCNO.
59CODEGENOPT(EmitOpenCLArgMetadata , 1, 0) ///< Emit OpenCL kernel arg metadata.
Lang Hames931c0832012-11-15 07:51:26 +000060/// \brief FP_CONTRACT mode (on/off/fast).
61ENUM_CODEGENOPT(FPContractMode, FPContractModeKind, 2, FPC_On)
Douglas Gregor4cdad312012-10-23 20:05:01 +000062CODEGENOPT(ForbidGuardVariables , 1, 0) ///< Issue errors if C++ guard variables
63 ///< are required.
64CODEGENOPT(FunctionSections , 1, 0) ///< Set when -ffunction-sections is enabled.
Douglas Gregor4cdad312012-10-23 20:05:01 +000065CODEGENOPT(InstrumentFunctions , 1, 0) ///< Set when -finstrument-functions is
66 ///< enabled.
67CODEGENOPT(InstrumentForProfiling , 1, 0) ///< Set when -pg is enabled.
68CODEGENOPT(LessPreciseFPMAD , 1, 0) ///< Enable less precise MAD instructions to
69 ///< be generated.
70CODEGENOPT(MergeAllConstants , 1, 1) ///< Merge identical constants.
Stephen Hines176edba2014-12-01 14:53:08 -080071CODEGENOPT(MergeFunctions , 1, 0) ///< Set when -fmerge-functions is enabled.
Stephen Hines0e2c34f2015-03-23 12:09:02 -070072CODEGENOPT(MSVolatile , 1, 0) ///< Set when /volatile:ms is enabled.
Douglas Gregor4cdad312012-10-23 20:05:01 +000073CODEGENOPT(NoCommon , 1, 0) ///< Set when -fno-common or C++ is enabled.
Douglas Gregor4cdad312012-10-23 20:05:01 +000074CODEGENOPT(NoDwarfDirectoryAsm , 1, 0) ///< Set when -fno-dwarf-directory-asm is
75 ///< enabled.
76CODEGENOPT(NoExecStack , 1, 0) ///< Set when -Wa,--noexecstack is enabled.
Stephen Hines176edba2014-12-01 14:53:08 -080077CODEGENOPT(FatalWarnings , 1, 0) ///< Set when -Wa,--fatal-warnings is
78 ///< enabled.
Eric Christopher31056272013-04-04 06:29:47 +000079CODEGENOPT(EnableSegmentedStacks , 1, 0) ///< Set when -fsplit-stack is enabled.
Douglas Gregor4cdad312012-10-23 20:05:01 +000080CODEGENOPT(NoImplicitFloat , 1, 0) ///< Set when -mno-implicit-float is enabled.
81CODEGENOPT(NoInfsFPMath , 1, 0) ///< Assume FP arguments, results not +-Inf.
Stephen Hines0e2c34f2015-03-23 12:09:02 -070082CODEGENOPT(NoSignedZeros , 1, 0) ///< Allow ignoring the signedness of FP zero
Pirama Arumuga Nainar33337ca2015-05-06 11:48:57 -070083CODEGENOPT(ReciprocalMath , 1, 0) ///< Allow FP divisions to be reassociated.
84CODEGENOPT(NoInline , 1, 0) ///< Set when -fno-inline is enabled.
Douglas Gregor4cdad312012-10-23 20:05:01 +000085 ///< Disables use of the inline keyword.
86CODEGENOPT(NoNaNsFPMath , 1, 0) ///< Assume FP arguments, results not NaN.
87CODEGENOPT(NoZeroInitializedInBSS , 1, 0) ///< -fno-zero-initialized-in-bss.
88/// \brief Method of Objective-C dispatch to use.
89ENUM_CODEGENOPT(ObjCDispatchMethod, ObjCDispatchMethodKind, 2, Legacy)
90CODEGENOPT(OmitLeafFramePointer , 1, 0) ///< Set when -momit-leaf-frame-pointer is
91 ///< enabled.
Stephen Hines0e2c34f2015-03-23 12:09:02 -070092VALUE_CODEGENOPT(OptimizationLevel, 2, 0) ///< The -O[0-3] option specified.
Douglas Gregor4cdad312012-10-23 20:05:01 +000093VALUE_CODEGENOPT(OptimizeSize, 2, 0) ///< If -Os (==1) or -Oz (==2) is specified.
John McCallb8b52972013-06-18 02:46:29 +000094
Stephen Hines651f13c2014-04-23 16:59:28 -070095CODEGENOPT(ProfileInstrGenerate , 1, 0) ///< Instrument code to generate
96 ///< execution counts to use with PGO.
Stephen Hines176edba2014-12-01 14:53:08 -080097CODEGENOPT(CoverageMapping , 1, 0) ///< Generate coverage mapping regions to
98 ///< enable code coverage analysis.
99CODEGENOPT(DumpCoverageMapping , 1, 0) ///< Dump the generated coverage mapping
100 ///< regions.
Stephen Hines651f13c2014-04-23 16:59:28 -0700101
John McCallb8b52972013-06-18 02:46:29 +0000102 /// If -fpcc-struct-return or -freg-struct-return is specified.
103ENUM_CODEGENOPT(StructReturnConvention, StructReturnConventionKind, 2, SRCK_Default)
104
Douglas Gregor4cdad312012-10-23 20:05:01 +0000105CODEGENOPT(RelaxAll , 1, 0) ///< Relax all machine code instructions.
106CODEGENOPT(RelaxedAliasing , 1, 0) ///< Set when -fno-strict-aliasing is enabled.
Manman Renb37a73d2013-04-04 21:53:22 +0000107CODEGENOPT(StructPathTBAA , 1, 0) ///< Whether or not to use struct-path TBAA.
Douglas Gregor4cdad312012-10-23 20:05:01 +0000108CODEGENOPT(SaveTempLabels , 1, 0) ///< Save temporary labels.
Alexey Samsonov4bdc6042013-01-20 13:12:12 +0000109CODEGENOPT(SanitizeAddressZeroBaseShadow , 1, 0) ///< Map shadow memory at zero
110 ///< offset in AddressSanitizer.
Stephen Hines651f13c2014-04-23 16:59:28 -0700111CODEGENOPT(SanitizeMemoryTrackOrigins, 2, 0) ///< Enable tracking origins in
Alexey Samsonov4bdc6042013-01-20 13:12:12 +0000112 ///< MemorySanitizer
Stephen Hines176edba2014-12-01 14:53:08 -0800113CODEGENOPT(SanitizeCoverage, 3, 0) ///< Enable sanitizer coverage instrumentation.
Chad Rosier78d85b12013-01-29 23:31:22 +0000114CODEGENOPT(SanitizeUndefinedTrapOnError, 1, 0) ///< Set on
115 /// -fsanitize-undefined-trap-on-error
Douglas Gregor4cdad312012-10-23 20:05:01 +0000116CODEGENOPT(SimplifyLibCalls , 1, 1) ///< Set when -fbuiltin is enabled.
117CODEGENOPT(SoftFloat , 1, 0) ///< -soft-float.
118CODEGENOPT(StrictEnums , 1, 0) ///< Optimize based on strict enum definition.
119CODEGENOPT(TimePasses , 1, 0) ///< Set when -ftime-report is enabled.
120CODEGENOPT(UnitAtATime , 1, 1) ///< Unused. For mirroring GCC optimization
121 ///< selection.
122CODEGENOPT(UnrollLoops , 1, 0) ///< Control whether loops are unrolled.
Hal Finkelce5b5f12013-11-17 16:03:29 +0000123CODEGENOPT(RerollLoops , 1, 0) ///< Control whether loops are rerolled.
Douglas Gregor4cdad312012-10-23 20:05:01 +0000124CODEGENOPT(UnsafeFPMath , 1, 0) ///< Allow unsafe floating point optzns.
125CODEGENOPT(UnwindTables , 1, 0) ///< Emit unwind tables.
Nick Lewyckyfdf137b2013-06-25 01:49:44 +0000126CODEGENOPT(VectorizeBB , 1, 0) ///< Run basic block vectorizer.
127CODEGENOPT(VectorizeLoop , 1, 0) ///< Run loop vectorizer.
128CODEGENOPT(VectorizeSLP , 1, 0) ///< Run SLP vectorizer.
Douglas Gregor4cdad312012-10-23 20:05:01 +0000129
130 /// Attempt to use register sized accesses to bit-fields in structures, when
131 /// possible.
132CODEGENOPT(UseRegisterSizedBitfieldAccess , 1, 0)
133
134CODEGENOPT(VerifyModule , 1, 1) ///< Control whether the module should be run
135 ///< through the LLVM Verifier.
136
137CODEGENOPT(StackRealignment , 1, 0) ///< Control whether to permit stack
138 ///< realignment.
Douglas Gregor4cdad312012-10-23 20:05:01 +0000139CODEGENOPT(UseInitArray , 1, 0) ///< Control whether to use .init_array or
140 ///< .ctors.
141VALUE_CODEGENOPT(StackAlignment , 32, 0) ///< Overrides default stack
142 ///< alignment, if not 0.
Stephen Hines0e2c34f2015-03-23 12:09:02 -0700143VALUE_CODEGENOPT(StackProbeSize , 32, 4096) ///< Overrides default stack
144 ///< probe size, even if 0.
Douglas Gregor4cdad312012-10-23 20:05:01 +0000145CODEGENOPT(DebugColumnInfo, 1, 0) ///< Whether or not to use column information
146 ///< in debug info.
147
Pirama Arumuga Nainar33337ca2015-05-06 11:48:57 -0700148CODEGENOPT(EmitLLVMUseLists, 1, 0) ///< Control whether to serialize use-lists.
149
Douglas Gregor4cdad312012-10-23 20:05:01 +0000150/// The user specified number of registers to be used for integral arguments,
151/// or 0 if unspecified.
152VALUE_CODEGENOPT(NumRegisterParameters, 32, 0)
153
Douglas Gregor4cdad312012-10-23 20:05:01 +0000154/// The lower bound for a buffer to be considered for stack protection.
155VALUE_CODEGENOPT(SSPBufferSize, 32, 0)
156
157/// The kind of generated debug info.
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700158ENUM_CODEGENOPT(DebugInfo, DebugInfoKind, 3, NoDebugInfo)
Douglas Gregor4cdad312012-10-23 20:05:01 +0000159
Manman Renfc0f91c2013-06-19 01:46:49 +0000160/// Dwarf version.
161VALUE_CODEGENOPT(DwarfVersion, 3, 0)
162
Douglas Gregor4cdad312012-10-23 20:05:01 +0000163/// The kind of inlining to perform.
164ENUM_CODEGENOPT(Inlining, InliningMethod, 2, NoInlining)
165
Pirama Arumuga Nainar3ea9e332015-04-08 08:57:32 -0700166// Vector functions library to use.
167ENUM_CODEGENOPT(VecLib, VectorLibrary, 1, NoLibrary)
168
Douglas Gregor4cdad312012-10-23 20:05:01 +0000169/// The default TLS model to use.
170ENUM_CODEGENOPT(DefaultTLSModel, TLSModel, 2, GeneralDynamicTLSModel)
171
Douglas Gregor4cdad312012-10-23 20:05:01 +0000172#undef CODEGENOPT
173#undef ENUM_CODEGENOPT
174#undef VALUE_CODEGENOPT
175