1 | //===--- CodeGenOptions.def - Code generation option database ----- 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 | // This file defines the code generation options. Users of this file |
10 | // must define the CODEGENOPT macro to make use of this information. |
11 | // Optionally, the user may also define ENUM_CODEGENOPT (for options |
12 | // that have enumeration type and VALUE_CODEGENOPT is a code |
13 | // generation option that describes a value rather than a flag. |
14 | // |
15 | // AFFECTING_VALUE_CODEGENOPT is used for code generation options that can |
16 | // affect the AST. |
17 | // |
18 | //===----------------------------------------------------------------------===// |
19 | #ifndef CODEGENOPT |
20 | # error Define the CODEGENOPT macro to handle language options |
21 | #endif |
22 | |
23 | #ifndef VALUE_CODEGENOPT |
24 | # define VALUE_CODEGENOPT(Name, Bits, Default) \ |
25 | CODEGENOPT(Name, Bits, Default) |
26 | #endif |
27 | |
28 | #ifndef ENUM_CODEGENOPT |
29 | # define ENUM_CODEGENOPT(Name, Type, Bits, Default) \ |
30 | CODEGENOPT(Name, Bits, Default) |
31 | #endif |
32 | |
33 | #ifndef AFFECTING_VALUE_CODEGENOPT |
34 | # define AFFECTING_VALUE_CODEGENOPT(Name, Bits, Default) \ |
35 | VALUE_CODEGENOPT(Name, Bits, Default) |
36 | #endif |
37 | |
38 | CODEGENOPT(DisableIntegratedAS, 1, 0) ///< -no-integrated-as |
39 | CODEGENOPT(RelaxELFRelocations, 1, 1) ///< -Wa,-mrelax-relocations={yes,no} |
40 | CODEGENOPT(AsmVerbose , 1, 0) ///< -dA, -fverbose-asm. |
41 | CODEGENOPT(, 1, 1) ///< -dA, -fno-preserve-as-comments. |
42 | CODEGENOPT(AssumeSaneOperatorNew , 1, 1) ///< implicit __attribute__((malloc)) operator new |
43 | CODEGENOPT(AssumeUniqueVTables , 1, 1) ///< Assume a class has only one vtable. |
44 | CODEGENOPT(Autolink , 1, 1) ///< -fno-autolink |
45 | CODEGENOPT(AutoImport , 1, 1) ///< -fno-auto-import |
46 | CODEGENOPT(ObjCAutoRefCountExceptions , 1, 0) ///< Whether ARC should be EH-safe. |
47 | CODEGENOPT(Backchain , 1, 0) ///< -mbackchain |
48 | CODEGENOPT(ControlFlowGuardNoChecks , 1, 0) ///< -cfguard-no-checks |
49 | CODEGENOPT(ControlFlowGuard , 1, 0) ///< -cfguard |
50 | CODEGENOPT(EHContGuard , 1, 0) ///< -ehcontguard |
51 | CODEGENOPT(CXAAtExit , 1, 1) ///< Use __cxa_atexit for calling destructors. |
52 | CODEGENOPT(RegisterGlobalDtorsWithAtExit, 1, 1) ///< Use atexit or __cxa_atexit to register global destructors. |
53 | CODEGENOPT(CXXCtorDtorAliases, 1, 0) ///< Emit complete ctors/dtors as linker |
54 | ///< aliases to base ctors when possible. |
55 | CODEGENOPT(DataSections , 1, 0) ///< Set when -fdata-sections is enabled. |
56 | CODEGENOPT(UniqueSectionNames, 1, 1) ///< Set for -funique-section-names. |
57 | CODEGENOPT(UniqueBasicBlockSectionNames, 1, 1) ///< Set for -funique-basic-block-section-names, |
58 | ///< Produce unique section names with |
59 | ///< basic block sections. |
60 | CODEGENOPT(EnableAIXExtendedAltivecABI, 1, 0) ///< Set for -mabi=vec-extabi. Enables the extended Altivec ABI on AIX. |
61 | CODEGENOPT(XCOFFReadOnlyPointers, 1, 0) ///< Set for -mxcoff-roptr. |
62 | CODEGENOPT(AllTocData, 1, 0) ///< AIX -mtocdata |
63 | ENUM_CODEGENOPT(FramePointer, FramePointerKind, 2, FramePointerKind::None) /// frame-pointer: all,non-leaf,none |
64 | |
65 | CODEGENOPT(ClearASTBeforeBackend , 1, 0) ///< Free the AST before running backend code generation. Only works with -disable-free. |
66 | CODEGENOPT(DisableFree , 1, 0) ///< Don't free memory. |
67 | CODEGENOPT(DiscardValueNames , 1, 0) ///< Discard Value Names from the IR (LLVMContext flag) |
68 | CODEGENOPT(DisableLLVMPasses , 1, 0) ///< Don't run any LLVM IR passes to get |
69 | ///< the pristine IR generated by the |
70 | ///< frontend. |
71 | CODEGENOPT(DisableLifetimeMarkers, 1, 0) ///< Don't emit any lifetime markers |
72 | CODEGENOPT(DisableO0ImplyOptNone , 1, 0) ///< Don't annonate function with optnone at O0 |
73 | CODEGENOPT(ExperimentalStrictFloatingPoint, 1, 0) ///< Enables the new, experimental |
74 | ///< strict floating point. |
75 | CODEGENOPT(EnableNoundefAttrs, 1, 0) ///< Enable emitting `noundef` attributes on IR call arguments and return values |
76 | CODEGENOPT(DebugPassManager, 1, 0) ///< Prints debug information for the new |
77 | ///< pass manager. |
78 | CODEGENOPT(DisableRedZone , 1, 0) ///< Set when -mno-red-zone is enabled. |
79 | CODEGENOPT(EmitCallSiteInfo, 1, 0) ///< Emit call site info only in the case of |
80 | ///< '-g' + 'O>0' level. |
81 | CODEGENOPT(IndirectTlsSegRefs, 1, 0) ///< Set when -mno-tls-direct-seg-refs |
82 | ///< is specified. |
83 | CODEGENOPT(DisableTailCalls , 1, 0) ///< Do not emit tail calls. |
84 | CODEGENOPT(NoEscapingBlockTailCalls, 1, 0) ///< Do not emit tail calls from |
85 | ///< escaping blocks. |
86 | CODEGENOPT(EmitDeclMetadata , 1, 0) ///< Emit special metadata indicating what |
87 | ///< Decl* various IR entities came from. |
88 | ///< Only useful when running CodeGen as a |
89 | ///< subroutine. |
90 | CODEGENOPT(EmitVersionIdentMetadata , 1, 1) ///< Emit compiler version metadata. |
91 | CODEGENOPT(EmitOpenCLArgMetadata , 1, 0) ///< Emit OpenCL kernel arg metadata. |
92 | CODEGENOPT(EmulatedTLS , 1, 0) ///< Set by default or -f[no-]emulated-tls. |
93 | /// Embed Bitcode mode (off/all/bitcode/marker). |
94 | ENUM_CODEGENOPT(EmbedBitcode, EmbedBitcodeKind, 2, Embed_Off) |
95 | /// Inline asm dialect, -masm=(att|intel) |
96 | ENUM_CODEGENOPT(InlineAsmDialect, InlineAsmDialectKind, 1, IAD_ATT) |
97 | CODEGENOPT(ForbidGuardVariables , 1, 0) ///< Issue errors if C++ guard variables |
98 | ///< are required. |
99 | CODEGENOPT(FunctionSections , 1, 0) ///< Set when -ffunction-sections is enabled. |
100 | CODEGENOPT(BBAddrMap , 1, 0) ///< Set when -fbasic-block-address-map is enabled. |
101 | CODEGENOPT(InstrumentFunctions , 1, 0) ///< Set when -finstrument-functions is |
102 | ///< enabled. |
103 | CODEGENOPT(InstrumentFunctionsAfterInlining , 1, 0) ///< Set when |
104 | ///< -finstrument-functions-after-inlining is enabled. |
105 | CODEGENOPT(InstrumentFunctionEntryBare , 1, 0) ///< Set when |
106 | ///< -finstrument-function-entry-bare is enabled. |
107 | CODEGENOPT(CFProtectionReturn , 1, 0) ///< if -fcf-protection is |
108 | ///< set to full or return. |
109 | CODEGENOPT(CFProtectionBranch , 1, 0) ///< if -fcf-protection is |
110 | ///< set to full or branch. |
111 | CODEGENOPT(FunctionReturnThunks, 1, 0) ///< -mfunction-return={keep|thunk-extern} |
112 | CODEGENOPT(IndirectBranchCSPrefix, 1, 0) ///< if -mindirect-branch-cs-prefix |
113 | ///< is set. |
114 | |
115 | CODEGENOPT(XRayInstrumentFunctions , 1, 0) ///< Set when -fxray-instrument is |
116 | ///< enabled. |
117 | CODEGENOPT(StackSizeSection , 1, 0) ///< Set when -fstack-size-section is enabled. |
118 | |
119 | ///< Set when -femit-compact-unwind-non-canonical is enabled. |
120 | CODEGENOPT(EmitCompactUnwindNonCanonical, 1, 0) |
121 | |
122 | ///< Set when -fxray-always-emit-customevents is enabled. |
123 | CODEGENOPT(XRayAlwaysEmitCustomEvents , 1, 0) |
124 | |
125 | ///< Set when -fxray-always-emit-typedevents is enabled. |
126 | CODEGENOPT(XRayAlwaysEmitTypedEvents , 1, 0) |
127 | |
128 | ///< Set when -fxray-ignore-loops is enabled. |
129 | CODEGENOPT(XRayIgnoreLoops , 1, 0) |
130 | |
131 | ///< Emit the XRay function index section. |
132 | CODEGENOPT(XRayFunctionIndex , 1, 1) |
133 | |
134 | |
135 | ///< Set the minimum number of instructions in a function to determine selective |
136 | ///< XRay instrumentation. |
137 | VALUE_CODEGENOPT(XRayInstructionThreshold , 32, 200) |
138 | |
139 | ///< Only instrument 1 in N functions, by dividing functions into N total groups and |
140 | ///< instrumenting only the specified group at a time. Group numbers start at 0 |
141 | ///< and end at N-1. |
142 | VALUE_CODEGENOPT(XRayTotalFunctionGroups, 32, 1) |
143 | VALUE_CODEGENOPT(XRaySelectedFunctionGroup, 32, 0) |
144 | |
145 | VALUE_CODEGENOPT(PatchableFunctionEntryCount , 32, 0) ///< Number of NOPs at function entry |
146 | VALUE_CODEGENOPT(PatchableFunctionEntryOffset , 32, 0) |
147 | |
148 | CODEGENOPT(HotPatch, 1, 0) ///< Supports the Microsoft /HOTPATCH flag and |
149 | ///< generates a 'patchable-function' attribute. |
150 | |
151 | CODEGENOPT(JMCInstrument, 1, 0) ///< Set when -fjmc is enabled. |
152 | CODEGENOPT(InstrumentForProfiling , 1, 0) ///< Set when -pg is enabled. |
153 | CODEGENOPT(CallFEntry , 1, 0) ///< Set when -mfentry is enabled. |
154 | CODEGENOPT(MNopMCount , 1, 0) ///< Set when -mnop-mcount is enabled. |
155 | CODEGENOPT(RecordMCount , 1, 0) ///< Set when -mrecord-mcount is enabled. |
156 | CODEGENOPT(PackedStack , 1, 0) ///< Set when -mpacked-stack is enabled. |
157 | CODEGENOPT(LessPreciseFPMAD , 1, 0) ///< Enable less precise MAD instructions to |
158 | ///< be generated. |
159 | CODEGENOPT(PrepareForLTO , 1, 0) ///< Set when -flto is enabled on the |
160 | ///< compile step. |
161 | CODEGENOPT(PrepareForThinLTO , 1, 0) ///< Set when -flto=thin is enabled on the |
162 | ///< compile step. |
163 | CODEGENOPT(LTOUnit, 1, 0) ///< Emit IR to support LTO unit features (CFI, whole |
164 | ///< program vtable opt). |
165 | CODEGENOPT(FatLTO, 1, 0) ///< Set when -ffat-lto-objects is enabled. |
166 | CODEGENOPT(EnableSplitLTOUnit, 1, 0) ///< Enable LTO unit splitting to support |
167 | /// CFI and traditional whole program |
168 | /// devirtualization that require whole |
169 | /// program IR support. |
170 | CODEGENOPT(UnifiedLTO, 1, 0) ///< Use the unified LTO pipeline. |
171 | CODEGENOPT(IncrementalLinkerCompatible, 1, 0) ///< Emit an object file which can |
172 | ///< be used with an incremental |
173 | ///< linker. |
174 | CODEGENOPT(MergeAllConstants , 1, 1) ///< Merge identical constants. |
175 | CODEGENOPT(MergeFunctions , 1, 0) ///< Set when -fmerge-functions is enabled. |
176 | CODEGENOPT(NoCommon , 1, 0) ///< Set when -fno-common or C++ is enabled. |
177 | CODEGENOPT(NoExecStack , 1, 0) ///< Set when -Wa,--noexecstack is enabled. |
178 | CODEGENOPT(FatalWarnings , 1, 0) ///< Set when -Wa,--fatal-warnings is |
179 | ///< enabled. |
180 | CODEGENOPT(NoWarn , 1, 0) ///< Set when -Wa,--no-warn is enabled. |
181 | CODEGENOPT(NoTypeCheck , 1, 0) ///< Set when -Wa,--no-type-check is enabled. |
182 | CODEGENOPT(MisExpect , 1, 0) ///< Set when -Wmisexpect is enabled |
183 | CODEGENOPT(EnableSegmentedStacks , 1, 0) ///< Set when -fsplit-stack is enabled. |
184 | CODEGENOPT(StackClashProtector, 1, 0) ///< Set when -fstack-clash-protection is enabled. |
185 | CODEGENOPT(NoImplicitFloat , 1, 0) ///< Set when -mno-implicit-float is enabled. |
186 | CODEGENOPT(NullPointerIsValid , 1, 0) ///< Assume Null pointer deference is defined. |
187 | CODEGENOPT(OpenCLCorrectlyRoundedDivSqrt, 1, 0) ///< -cl-fp32-correctly-rounded-divide-sqrt |
188 | CODEGENOPT(HIPCorrectlyRoundedDivSqrt, 1, 1) ///< -fno-hip-fp32-correctly-rounded-divide-sqrt |
189 | CODEGENOPT(HIPSaveKernelArgName, 1, 0) ///< Set when -fhip-kernel-arg-name is enabled. |
190 | CODEGENOPT(UniqueInternalLinkageNames, 1, 0) ///< Internal Linkage symbols get unique names. |
191 | CODEGENOPT(SplitMachineFunctions, 1, 0) ///< Split machine functions using profile information. |
192 | CODEGENOPT(PPCUseFullRegisterNames, 1, 0) ///< Print full register names in assembly |
193 | |
194 | /// When false, this attempts to generate code as if the result of an |
195 | /// overflowing conversion matches the overflowing behavior of a target's native |
196 | /// float-to-int conversion instructions. |
197 | CODEGENOPT(StrictFloatCastOverflow, 1, 1) |
198 | |
199 | CODEGENOPT(NoZeroInitializedInBSS , 1, 0) ///< -fno-zero-initialized-in-bss. |
200 | /// Method of Objective-C dispatch to use. |
201 | ENUM_CODEGENOPT(ObjCDispatchMethod, ObjCDispatchMethodKind, 2, Legacy) |
202 | /// Replace certain message sends with calls to ObjC runtime entrypoints |
203 | CODEGENOPT(ObjCConvertMessagesToRuntimeCalls , 1, 1) |
204 | CODEGENOPT(ObjCAvoidHeapifyLocalBlocks, 1, 0) |
205 | |
206 | |
207 | // The optimization options affect frontend options, whicn in turn do affect the AST. |
208 | AFFECTING_VALUE_CODEGENOPT(OptimizationLevel, 2, 0) ///< The -O[0-3] option specified. |
209 | AFFECTING_VALUE_CODEGENOPT(OptimizeSize, 2, 0) ///< If -Os (==1) or -Oz (==2) is specified. |
210 | |
211 | CODEGENOPT(AtomicProfileUpdate , 1, 0) ///< Set -fprofile-update=atomic |
212 | /// Choose profile instrumenation kind or no instrumentation. |
213 | ENUM_CODEGENOPT(ProfileInstr, ProfileInstrKind, 2, ProfileNone) |
214 | /// Choose profile kind for PGO use compilation. |
215 | ENUM_CODEGENOPT(ProfileUse, ProfileInstrKind, 2, ProfileNone) |
216 | /// Partition functions into N groups and select only functions in group i to be |
217 | /// instrumented. Selected group numbers can be 0 to N-1 inclusive. |
218 | VALUE_CODEGENOPT(ProfileTotalFunctionGroups, 32, 1) |
219 | VALUE_CODEGENOPT(ProfileSelectedFunctionGroup, 32, 0) |
220 | CODEGENOPT(CoverageMapping , 1, 0) ///< Generate coverage mapping regions to |
221 | ///< enable code coverage analysis. |
222 | CODEGENOPT(DumpCoverageMapping , 1, 0) ///< Dump the generated coverage mapping |
223 | ///< regions. |
224 | CODEGENOPT(MCDCCoverage , 1, 0) ///< Enable MC/DC code coverage criteria. |
225 | |
226 | /// If -fpcc-struct-return or -freg-struct-return is specified. |
227 | ENUM_CODEGENOPT(StructReturnConvention, StructReturnConventionKind, 2, SRCK_Default) |
228 | |
229 | CODEGENOPT(RelaxAll , 1, 0) ///< Relax all machine code instructions. |
230 | CODEGENOPT(RelaxedAliasing , 1, 0) ///< Set when -fno-strict-aliasing is enabled. |
231 | CODEGENOPT(StructPathTBAA , 1, 0) ///< Whether or not to use struct-path TBAA. |
232 | CODEGENOPT(NewStructPathTBAA , 1, 0) ///< Whether or not to use enhanced struct-path TBAA. |
233 | CODEGENOPT(SaveTempLabels , 1, 0) ///< Save temporary labels. |
234 | CODEGENOPT(SanitizeAddressUseAfterScope , 1, 0) ///< Enable use-after-scope detection |
235 | ///< in AddressSanitizer |
236 | ENUM_CODEGENOPT(SanitizeAddressUseAfterReturn, |
237 | llvm::AsanDetectStackUseAfterReturnMode, 2, |
238 | llvm::AsanDetectStackUseAfterReturnMode::Runtime |
239 | ) ///< Set detection mode for stack-use-after-return. |
240 | CODEGENOPT(SanitizeAddressPoisonCustomArrayCookie, 1, |
241 | 0) ///< Enable poisoning operator new[] which is not a replaceable |
242 | ///< global allocation function in AddressSanitizer |
243 | CODEGENOPT(SanitizeAddressGlobalsDeadStripping, 1, 0) ///< Enable linker dead stripping |
244 | ///< of globals in AddressSanitizer |
245 | CODEGENOPT(SanitizeAddressUseOdrIndicator, 1, 0) ///< Enable ODR indicator globals |
246 | CODEGENOPT(SanitizeMemoryTrackOrigins, 2, 0) ///< Enable tracking origins in |
247 | ///< MemorySanitizer |
248 | ENUM_CODEGENOPT(SanitizeAddressDtor, llvm::AsanDtorKind, 2, |
249 | llvm::AsanDtorKind::Global) ///< Set how ASan global |
250 | ///< destructors are emitted. |
251 | CODEGENOPT(SanitizeMemoryParamRetval, 1, 0) ///< Enable detection of uninitialized |
252 | ///< parameters and return values |
253 | ///< in MemorySanitizer |
254 | CODEGENOPT(SanitizeMemoryUseAfterDtor, 1, 0) ///< Enable use-after-delete detection |
255 | ///< in MemorySanitizer |
256 | CODEGENOPT(SanitizeCfiCrossDso, 1, 0) ///< Enable cross-dso support in CFI. |
257 | CODEGENOPT(SanitizeMinimalRuntime, 1, 0) ///< Use "_minimal" sanitizer runtime for |
258 | ///< diagnostics. |
259 | CODEGENOPT(SanitizeCfiICallGeneralizePointers, 1, 0) ///< Generalize pointer types in |
260 | ///< CFI icall function signatures |
261 | CODEGENOPT(SanitizeCfiICallNormalizeIntegers, 1, 0) ///< Normalize integer types in |
262 | ///< CFI icall function signatures |
263 | CODEGENOPT(SanitizeCfiCanonicalJumpTables, 1, 0) ///< Make jump table symbols canonical |
264 | ///< instead of creating a local jump table. |
265 | CODEGENOPT(SanitizeCoverageType, 2, 0) ///< Type of sanitizer coverage |
266 | ///< instrumentation. |
267 | CODEGENOPT(SanitizeCoverageIndirectCalls, 1, 0) ///< Enable sanitizer coverage |
268 | ///< for indirect calls. |
269 | CODEGENOPT(SanitizeCoverageTraceBB, 1, 0) ///< Enable basic block tracing in |
270 | ///< in sanitizer coverage. |
271 | CODEGENOPT(SanitizeCoverageTraceCmp, 1, 0) ///< Enable cmp instruction tracing |
272 | ///< in sanitizer coverage. |
273 | CODEGENOPT(SanitizeCoverageTraceDiv, 1, 0) ///< Enable div instruction tracing |
274 | ///< in sanitizer coverage. |
275 | CODEGENOPT(SanitizeCoverageTraceGep, 1, 0) ///< Enable GEP instruction tracing |
276 | ///< in sanitizer coverage. |
277 | CODEGENOPT(SanitizeCoverage8bitCounters, 1, 0) ///< Use 8-bit frequency counters |
278 | ///< in sanitizer coverage. |
279 | CODEGENOPT(SanitizeCoverageTracePC, 1, 0) ///< Enable PC tracing |
280 | ///< in sanitizer coverage. |
281 | CODEGENOPT(SanitizeCoverageTracePCGuard, 1, 0) ///< Enable PC tracing with guard |
282 | ///< in sanitizer coverage. |
283 | CODEGENOPT(SanitizeCoverageInline8bitCounters, 1, 0) ///< Use inline 8bit counters. |
284 | CODEGENOPT(SanitizeCoverageInlineBoolFlag, 1, 0) ///< Use inline bool flag. |
285 | CODEGENOPT(SanitizeCoveragePCTable, 1, 0) ///< Create a PC Table. |
286 | CODEGENOPT(SanitizeCoverageControlFlow, 1, 0) ///< Collect control flow |
287 | CODEGENOPT(SanitizeCoverageNoPrune, 1, 0) ///< Disable coverage pruning. |
288 | CODEGENOPT(SanitizeCoverageStackDepth, 1, 0) ///< Enable max stack depth tracing |
289 | CODEGENOPT(SanitizeCoverageTraceLoads, 1, 0) ///< Enable tracing of loads. |
290 | CODEGENOPT(SanitizeCoverageTraceStores, 1, 0) ///< Enable tracing of stores. |
291 | CODEGENOPT(SanitizeBinaryMetadataCovered, 1, 0) ///< Emit PCs for covered functions. |
292 | CODEGENOPT(SanitizeBinaryMetadataAtomics, 1, 0) ///< Emit PCs for atomic operations. |
293 | CODEGENOPT(SanitizeBinaryMetadataUAR, 1, 0) ///< Emit PCs for start of functions |
294 | ///< that are subject for use-after-return checking. |
295 | CODEGENOPT(SanitizeStats , 1, 0) ///< Collect statistics for sanitizers. |
296 | CODEGENOPT(SimplifyLibCalls , 1, 1) ///< Set when -fbuiltin is enabled. |
297 | CODEGENOPT(SoftFloat , 1, 0) ///< -soft-float. |
298 | CODEGENOPT(SpeculativeLoadHardening, 1, 0) ///< Enable speculative load hardening. |
299 | CODEGENOPT(FineGrainedBitfieldAccesses, 1, 0) ///< Enable fine-grained bitfield accesses. |
300 | CODEGENOPT(StrictEnums , 1, 0) ///< Optimize based on strict enum definition. |
301 | CODEGENOPT(StrictVTablePointers, 1, 0) ///< Optimize based on the strict vtable pointers |
302 | CODEGENOPT(TimePasses , 1, 0) ///< Set when -ftime-report or -ftime-report= is enabled. |
303 | CODEGENOPT(TimePassesPerRun , 1, 0) ///< Set when -ftime-report=per-pass-run is enabled. |
304 | CODEGENOPT(TimeTrace , 1, 0) ///< Set when -ftime-trace is enabled. |
305 | VALUE_CODEGENOPT(TimeTraceGranularity, 32, 500) ///< Minimum time granularity (in microseconds), |
306 | ///< traced by time profiler |
307 | CODEGENOPT(UnrollLoops , 1, 0) ///< Control whether loops are unrolled. |
308 | CODEGENOPT(RerollLoops , 1, 0) ///< Control whether loops are rerolled. |
309 | CODEGENOPT(NoUseJumpTables , 1, 0) ///< Set when -fno-jump-tables is enabled. |
310 | VALUE_CODEGENOPT(UnwindTables, 2, 0) ///< Unwind tables (1) or asynchronous unwind tables (2) |
311 | CODEGENOPT(VectorizeLoop , 1, 0) ///< Run loop vectorizer. |
312 | CODEGENOPT(VectorizeSLP , 1, 0) ///< Run SLP vectorizer. |
313 | CODEGENOPT(ProfileSampleAccurate, 1, 0) ///< Sample profile is accurate. |
314 | |
315 | /// Treat loops as finite: language, always, never. |
316 | ENUM_CODEGENOPT(FiniteLoops, FiniteLoopsKind, 2, FiniteLoopsKind::Language) |
317 | |
318 | /// Attempt to use register sized accesses to bit-fields in structures, when |
319 | /// possible. |
320 | CODEGENOPT(UseRegisterSizedBitfieldAccess , 1, 0) |
321 | |
322 | CODEGENOPT(VerifyModule , 1, 1) ///< Control whether the module should be run |
323 | ///< through the LLVM Verifier. |
324 | CODEGENOPT(VerifyEach , 1, 1) ///< Control whether the LLVM verifier |
325 | ///< should run after every pass. |
326 | |
327 | CODEGENOPT(StackRealignment , 1, 0) ///< Control whether to force stack |
328 | ///< realignment. |
329 | CODEGENOPT(UseInitArray , 1, 0) ///< Control whether to use .init_array or |
330 | ///< .ctors. |
331 | VALUE_CODEGENOPT(LoopAlignment , 32, 0) ///< Overrides default loop |
332 | ///< alignment, if not 0. |
333 | VALUE_CODEGENOPT(StackAlignment , 32, 0) ///< Overrides default stack |
334 | ///< alignment, if not 0. |
335 | VALUE_CODEGENOPT(StackProbeSize , 32, 4096) ///< Overrides default stack |
336 | ///< probe size, even if 0. |
337 | VALUE_CODEGENOPT(WarnStackSize , 32, UINT_MAX) ///< Set via -fwarn-stack-size. |
338 | CODEGENOPT(NoStackArgProbe, 1, 0) ///< Set when -mno-stack-arg-probe is used |
339 | CODEGENOPT(EmitLLVMUseLists, 1, 0) ///< Control whether to serialize use-lists. |
340 | |
341 | CODEGENOPT(WholeProgramVTables, 1, 0) ///< Whether to apply whole-program |
342 | /// vtable optimization. |
343 | |
344 | CODEGENOPT(VirtualFunctionElimination, 1, 0) ///< Whether to apply the dead |
345 | /// virtual function elimination |
346 | /// optimization. |
347 | |
348 | /// Whether to use public LTO visibility for entities in std and stdext |
349 | /// namespaces. This is enabled by clang-cl's /MT and /MTd flags. |
350 | CODEGENOPT(LTOVisibilityPublicStd, 1, 0) |
351 | |
352 | /// The user specified number of registers to be used for integral arguments, |
353 | /// or 0 if unspecified. |
354 | VALUE_CODEGENOPT(NumRegisterParameters, 32, 0) |
355 | |
356 | /// The threshold to put data into small data section. |
357 | VALUE_CODEGENOPT(SmallDataLimit, 32, 0) |
358 | |
359 | /// The lower bound for a buffer to be considered for stack protection. |
360 | VALUE_CODEGENOPT(SSPBufferSize, 32, 0) |
361 | |
362 | /// The kind of inlining to perform. |
363 | ENUM_CODEGENOPT(Inlining, InliningMethod, 2, NormalInlining) |
364 | |
365 | /// The maximum stack size a function can have to be considered for inlining. |
366 | VALUE_CODEGENOPT(InlineMaxStackSize, 32, UINT_MAX) |
367 | |
368 | // Vector functions library to use. |
369 | ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, 3, llvm::driver::VectorLibrary::NoLibrary) |
370 | |
371 | /// The default TLS model to use. |
372 | ENUM_CODEGENOPT(DefaultTLSModel, TLSModel, 2, GeneralDynamicTLSModel) |
373 | |
374 | /// Whether to enable TLSDESC. AArch64 enables TLSDESC regardless of this value. |
375 | CODEGENOPT(EnableTLSDESC, 1, 0) |
376 | |
377 | /// Bit size of immediate TLS offsets (0 == use the default). |
378 | VALUE_CODEGENOPT(TLSSize, 8, 0) |
379 | |
380 | /// The default stack protector guard offset to use. |
381 | VALUE_CODEGENOPT(StackProtectorGuardOffset, 32, INT_MAX) |
382 | |
383 | /// Number of path components to strip when emitting checks. (0 == full |
384 | /// filename) |
385 | VALUE_CODEGENOPT(EmitCheckPathComponentsToStrip, 32, 0) |
386 | |
387 | /// Whether to report the hotness of the code region for optimization remarks. |
388 | CODEGENOPT(DiagnosticsWithHotness, 1, 0) |
389 | |
390 | /// Whether to use direct access relocations (instead of GOT) to reference external data symbols. |
391 | CODEGENOPT(DirectAccessExternalData, 1, 0) |
392 | |
393 | /// Whether we should use the undefined behaviour optimization for control flow |
394 | /// paths that reach the end of a function without executing a required return. |
395 | CODEGENOPT(StrictReturn, 1, 1) |
396 | |
397 | /// Whether emit pseudo probes for sample pgo profile collection. |
398 | CODEGENOPT(PseudoProbeForProfiling, 1, 0) |
399 | |
400 | /// Whether 3-component vector type is preserved. |
401 | CODEGENOPT(PreserveVec3Type, 1, 0) |
402 | |
403 | CODEGENOPT(NoPLT, 1, 0) |
404 | |
405 | /// Whether to emit all vtables |
406 | CODEGENOPT(ForceEmitVTables, 1, 0) |
407 | |
408 | /// Whether to emit an address-significance table into the object file. |
409 | CODEGENOPT(Addrsig, 1, 0) |
410 | |
411 | /// Whether to emit unused static constants. |
412 | CODEGENOPT(KeepStaticConsts, 1, 0) |
413 | |
414 | /// Whether to emit all variables that have a persistent storage duration, |
415 | /// including global, static and thread local variables. |
416 | CODEGENOPT(KeepPersistentStorageVariables, 1, 0) |
417 | |
418 | /// Whether to follow the AAPCS enforcing at least one read before storing to a volatile bitfield |
419 | CODEGENOPT(ForceAAPCSBitfieldLoad, 1, 0) |
420 | |
421 | /// Assume that by-value parameters do not alias any other values. |
422 | CODEGENOPT(PassByValueIsNoAlias, 1, 0) |
423 | |
424 | /// Whether to not follow the AAPCS that enforces volatile bit-field access width to be |
425 | /// according to the field declaring type width. |
426 | CODEGENOPT(AAPCSBitfieldWidth, 1, 1) |
427 | |
428 | /// Sets the IEEE bit in the expected default floating point mode register. |
429 | /// Floating point opcodes that support exception flag gathering quiet and |
430 | /// propagate signaling NaN inputs per IEEE 754-2008 (AMDGPU Only) |
431 | CODEGENOPT(EmitIEEENaNCompliantInsts, 1, 1) |
432 | |
433 | // Whether to emit Swift Async function extended frame information: auto, |
434 | // never, always. |
435 | ENUM_CODEGENOPT(SwiftAsyncFramePointer, SwiftAsyncFramePointerKind, 2, |
436 | SwiftAsyncFramePointerKind::Always) |
437 | |
438 | /// Whether to skip RAX setup when passing variable arguments (x86 only). |
439 | CODEGENOPT(SkipRaxSetup, 1, 0) |
440 | |
441 | /// Whether to zero out caller-used registers before returning. |
442 | ENUM_CODEGENOPT(ZeroCallUsedRegs, llvm::ZeroCallUsedRegs::ZeroCallUsedRegsKind, |
443 | 5, llvm::ZeroCallUsedRegs::ZeroCallUsedRegsKind::Skip) |
444 | |
445 | /// Modify C++ ABI to returning `this` pointer from constructors and |
446 | /// non-deleting destructors. (No effect on Microsoft ABI.) |
447 | CODEGENOPT(CtorDtorReturnThis, 1, 0) |
448 | |
449 | /// FIXME: Make DebugOptions its own top-level .def file. |
450 | #include "DebugOptions.def" |
451 | |
452 | #undef CODEGENOPT |
453 | #undef ENUM_CODEGENOPT |
454 | #undef VALUE_CODEGENOPT |
455 | #undef AFFECTING_VALUE_CODEGENOPT |
456 | |