clang 24.0.0git
CodeGenOptions.h
Go to the documentation of this file.
1//===--- CodeGenOptions.h ---------------------------------------*- 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 CodeGenOptions interface.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_CLANG_BASIC_CODEGENOPTIONS_H
14#define LLVM_CLANG_BASIC_CODEGENOPTIONS_H
15
20#include "llvm/ADT/FloatingPointMode.h"
21#include "llvm/Frontend/Debug/Options.h"
22#include "llvm/Frontend/Driver/CodeGenOptions.h"
23#include "llvm/MC/MCTargetOptions.h"
24#include "llvm/Support/CodeGen.h"
25#include "llvm/Support/Regex.h"
26#include "llvm/Target/TargetOptions.h"
27#include "llvm/Transforms/Instrumentation/AddressSanitizerOptions.h"
28#include "llvm/Transforms/Utils/KCFIHash.h"
29#include <map>
30#include <memory>
31#include <string>
32#include <vector>
33
34namespace llvm {
35class PassBuilder;
36}
37namespace clang {
38
39/// A target's ABI policy for whether a class's vtable can be assumed to have
40/// a unique address program-wide. This is the basis for the exact dynamic_cast
41/// optimization (and, where a vtable is not assumed unique, for whether it may
42/// be marked unnamed_addr so the platform can duplicate it).
44 /// Every vtable has a single address program-wide.
46 /// A vtable with strong linkage (e.g., a class with a key function) is
47 /// unique, but a vague-linkage (weak) vtable may be duplicated by the
48 /// platform and so has no unique address.
50};
51
52/// Bitfields of CodeGenOptions, split out from CodeGenOptions to ensure
53/// that this large collection of bitfields is a trivial class type.
55 friend class CompilerInvocation;
57
58public:
59 /// For ASTs produced with different option value, signifies their level of
60 /// compatibility.
61 enum class CompatibilityKind {
62 /// Does affect the construction of the AST in a way that does prevent
63 /// module interoperability.
65 /// Does affect the construction of the AST in a way that doesn't prevent
66 /// interoperability (that is, the value can be different between an
67 /// explicit module and the user of that module).
69 /// Does not affect the construction of the AST in any way (that is, the
70 /// value can be different between an implicit module and the user of that
71 /// module).
73 };
74
76 using ProfileInstrKind = llvm::driver::ProfileInstrKind;
78 llvm::AsanDetectStackUseAfterReturnMode;
79 using AsanDtorKind = llvm::AsanDtorKind;
80 using VectorLibrary = llvm::driver::VectorLibrary;
81 using ZeroCallUsedRegsKind = llvm::ZeroCallUsedRegs::ZeroCallUsedRegsKind;
82 using WinX64EHUnwindMode = llvm::WinX64EHUnwindMode;
83 using ControlFlowGuardMechanism = llvm::ControlFlowGuardMechanism;
84
85 using DebugCompressionType = llvm::DebugCompressionType;
86 using EmitDwarfUnwindType = llvm::EmitDwarfUnwindType;
87 using DebugTemplateNamesKind = llvm::codegenoptions::DebugTemplateNamesKind;
88 using DebugInfoKind = llvm::codegenoptions::DebugInfoKind;
89 using DebuggerKind = llvm::DebuggerKind;
90 using RelocSectionSymType = llvm::RelocSectionSymType;
91
92#define CODEGENOPT(Name, Bits, Default, Compatibility) unsigned Name : Bits;
93#define ENUM_CODEGENOPT(Name, Type, Bits, Default, Compatibility)
94#include "clang/Basic/CodeGenOptions.def"
95
96protected:
97#define CODEGENOPT(Name, Bits, Default, Compatibility)
98#define ENUM_CODEGENOPT(Name, Type, Bits, Default, Compatibility) \
99 unsigned Name : Bits;
100#include "clang/Basic/CodeGenOptions.def"
101};
102
103/// CodeGenOptions - Track various options which control how the code
104/// is optimized and passed to the backend.
106public:
108 NormalInlining, // Use the standard function inlining pass.
109 OnlyHintInlining, // Inline only (implicitly) hinted functions.
110 OnlyAlwaysInlining // Only run the always inlining pass.
111 };
112
118
125
127 SRCK_Default, // No special option was passed.
128 SRCK_OnStack, // Small structs on the stack (-fpcc-struct-return).
129 SRCK_InRegs // Small structs in registers (-freg-struct-return).
130 };
131
133 Embed_Off, // No embedded bitcode.
134 Embed_All, // Embed both bitcode and commandline in the output.
135 Embed_Bitcode, // Embed just the bitcode in the output.
136 Embed_Marker // Embed a marker as a placeholder for bitcode.
137 };
138
144
149
156
157 // This field stores one of the allowed values for the option
158 // -fbasic-block-sections=. The allowed values with this option are:
159 // {"all", "list=<file>", "none"}.
160 //
161 // "all" : Generate basic block sections for all basic blocks.
162 // "list=<file>": Generate basic block sections for a subset of basic blocks.
163 // The functions and the machine basic block ids are specified
164 // in the file.
165 // "none": Disable sections for basic blocks.
166 std::string BBSections;
167
168 // If set, override the default value of MCAsmInfo::BinutilsVersion. If
169 // DisableIntegratedAS is specified, the assembly output will consider GNU as
170 // support. "none" means that all ELF features can be used, regardless of
171 // binutils support.
172 std::string BinutilsVersion;
173
174 enum class FramePointerKind {
175 NonLeafNoReserve, // Keep non-leaf frame pointers, allow the FP to be used
176 // as a GPR in leaf functions.
177 None, // Omit all frame pointers.
178 Reserved, // Maintain valid frame pointer chain.
179 NonLeaf, // Keep non-leaf frame pointers, don't allow the FP to be used as a
180 // GPR in leaf functions.
181 All, // Keep all frame pointers.
182 };
183
185 switch (Kind) {
187 return "none";
189 return "reserved";
191 return "non-leaf-no-reserve";
193 return "non-leaf";
195 return "all";
196 }
197
198 llvm_unreachable("invalid FramePointerKind");
199 }
200
201 /// Possible exception handling behavior.
203
205 Auto, // Choose Swift async extended frame info based on deployment target.
206 Always, // Unconditionally emit Swift async extended frame info.
207 Never, // Don't emit Swift async extended frame info.
209 };
210
212 Language, // Not specified, use language standard.
213 Always, // All loops are assumed to be finite.
214 Never, // No loop is assumed to be finite.
215 };
216
222
224 None, ///< Trap Messages are omitted. This offers the smallest debug info
225 ///< size but at the cost of making traps hard to debug.
226 Basic, ///< Trap Message is fixed per SanitizerKind. Produces smaller debug
227 ///< info than `Detailed` but is not as helpful for debugging.
228 Detailed, ///< Trap Message includes more context (e.g. the expression being
229 ///< overflowed). This is more helpful for debugging but produces
230 ///< larger debug info than `Basic`.
231 };
232
233 enum class BoolFromMem {
234 Strict, ///< In-memory bool values are assumed to be 0 or 1, and any other
235 ///< value is UB.
236 Truncate, ///< Convert in-memory bools to i1 by checking if the least
237 ///< significant bit is 1.
238 NonZero, ///< Convert in-memory bools to i1 by checking if any bit is set
239 ///< to 1.
241 };
242
244 Auto, // Use the target dependent default.
245 ForceEnable, // Always enable regardless of the target default.
246 ForceDisable, // Always disable regardless of the target default.
247 };
248
249 /// The code model to use (-mcmodel).
250 std::string CodeModel;
251
252 /// The code model-specific large data threshold to use
253 /// (-mlarge-data-threshold).
255
256 /// The filename with path we use for coverage data files. The runtime
257 /// allows further manipulation with the GCOV_PREFIX and GCOV_PREFIX_STRIP
258 /// environment variables.
259 std::string CoverageDataFile;
260
261 /// The filename with path we use for coverage notes files.
262 std::string CoverageNotesFile;
263
264 /// Regexes separated by a semi-colon to filter the files to instrument.
266
267 /// Regexes separated by a semi-colon to filter the files to not instrument.
269
270 /// The version string to put into coverage files.
271 char CoverageVersion[4] = {'0', '0', '0', '0'};
272
273 /// Enable additional debugging information.
274 std::string DebugPass;
275
276 /// The string to embed in debug information as the current working directory.
278
279 /// The string to embed in coverage mapping as the current working directory.
281
282 /// The string to embed in the debug information for the compile unit, if
283 /// non-empty.
284 std::string DwarfDebugFlags;
285
286 /// The string containing the commandline for the llvm.commandline metadata,
287 /// if non-empty.
288 std::string RecordCommandLine;
289
290 /// The string containing the commandline for the dx.source.args metadata,
291 /// if non-empty.
293
294 /// The vector contains parsed commandline for the dx.source.args metadata,
295 /// if parsing was successful.
297
299
300 /// Prefix replacement map for source-based code coverage to remap source
301 /// file paths in coverage mapping.
303
304 /// The ABI to use for passing floating point arguments.
305 std::string FloatABI;
306
307 /// The file to use for dumping bug report by `Debugify` for original
308 /// debug info.
310
311 /// The floating-point denormal mode to use.
312 llvm::DenormalMode FPDenormalMode = llvm::DenormalMode::getIEEE();
313
314 /// The floating-point denormal mode to use, for float.
315 llvm::DenormalMode FP32DenormalMode = llvm::DenormalMode::getIEEE();
316
317 /// The float precision limit to use, if non-empty.
319
321 /// The filename of the bitcode file to link in.
322 std::string Filename;
323 /// If true, we set attributes functions in the bitcode library according to
324 /// our CodeGenOptions, much as we set attrs on functions that we generate
325 /// ourselves.
326 bool PropagateAttrs = false;
327 /// If true, we use LLVM module internalizer.
328 bool Internalize = false;
329 /// Bitwise combination of llvm::Linker::Flags, passed to the LLVM linker.
330 unsigned LinkFlags = 0;
331 };
332
333 /// The files specified here are linked in to the module before optimizations.
334 std::vector<BitcodeFileToLink> LinkBitcodeFiles;
335
336 /// The user provided name for the "main file", if non-empty. This is useful
337 /// in situations where the input file name does not match the original input
338 /// file, for example with -save-temps.
339 std::string MainFileName;
340
341 /// The name for the split debug info file used for the DW_AT_[GNU_]dwo_name
342 /// attribute in the skeleton CU.
343 std::string SplitDwarfFile;
344
345 /// Output filename for the split debug info, not used in the skeleton CU.
346 std::string SplitDwarfOutput;
347
348 /// Output filename used in the COFF debug information.
350
351 /// The name of the relocation model to use.
352 llvm::Reloc::Model RelocationModel;
353
354 /// If not an empty string, trap intrinsics are lowered to calls to this
355 /// function instead of to trap instructions.
356 std::string TrapFuncName;
357
358 /// A list of dependent libraries.
359 std::vector<std::string> DependentLibraries;
360
361 /// A list of linker options to embed in the object file.
362 std::vector<std::string> LinkerOptions;
363
364 /// Name of the profile file to use as output for -fprofile-instr-generate,
365 /// -fprofile-generate, and -fcs-profile-generate.
367
368 /// Name of the patchable function entry section with
369 /// -fpatchable-function-entry.
371
372 /// Name of the profile file to use with -fprofile-sample-use.
373 std::string SampleProfileFile;
374
375 /// Name of the profile file to use as output for with -fmemory-profile.
377
378 /// Name of the profile file to use as input for -fmemory-profile-use.
380
381 /// Name of the profile file to use as input for -fprofile-instr-use
383
384 /// Name of the profile remapping file to apply to the profile data supplied
385 /// by -fprofile-sample-use or -fprofile-instr-use.
387
388 /// Name of the function summary index file to use for ThinLTO function
389 /// importing.
390 std::string ThinLTOIndexFile;
391
392 /// Name of a file that can optionally be written with minimized bitcode
393 /// to be used as input for the ThinLTO thin link step, which only needs
394 /// the summary and module symbol table (and not, e.g. any debug metadata).
396
397 /// Prefix to use for -save-temps output.
399
400 /// Prefix to use for -save-dynamic-debugging-temps output.
402
403 /// Name of file passed with -foffload-include-binary option to forward to
404 /// offloading runtime back-end for incorporating them into host-side object
405 /// file.
407
408 /// List of filenames passed in using the -fembed-offload-object option. These
409 /// are offloading binaries containing device images and metadata.
410 std::vector<std::string> OffloadObjects;
411
412 /// The name of the file to which the backend should save YAML optimization
413 /// records.
414 std::string OptRecordFile;
415
416 /// The regex that filters the passes that should be saved to the optimization
417 /// records.
418 std::string OptRecordPasses;
419
420 /// The format used for serializing remarks (default: YAML)
421 std::string OptRecordFormat;
422
423 /// The name of the partition that symbols are assigned to, specified with
424 /// -fsymbol-partition (see https://lld.llvm.org/Partitions.html).
425 std::string SymbolPartition;
426
427 /// If non-empty, allow the compiler to assume that the given source file
428 /// identifier is unique at link time.
430
432 RK_Missing, // Remark argument not present on the command line.
433 RK_Enabled, // Remark enabled via '-Rgroup'.
434 RK_EnabledEverything, // Remark enabled via '-Reverything'.
435 RK_Disabled, // Remark disabled via '-Rno-group'.
436 RK_DisabledEverything, // Remark disabled via '-Rno-everything'.
437 RK_WithPattern, // Remark pattern specified via '-Rgroup=regexp'.
438 };
439
440 /// Optimization remark with an optional regular expression pattern.
441 struct OptRemark {
443 std::string Pattern;
444 std::shared_ptr<llvm::Regex> Regex;
445
446 /// By default, optimization remark is missing.
447 OptRemark() = default;
448
449 /// Returns true iff the optimization remark holds a valid regular
450 /// expression.
451 bool hasValidPattern() const { return Regex != nullptr; }
452
453 /// Matches the given string against the regex, if there is some.
454 bool patternMatches(StringRef String) const {
455 return hasValidPattern() && Regex->match(String);
456 }
457 };
458
459 /// Selected optimizations for which we should enable optimization remarks.
460 /// Transformation passes whose name matches the contained (optional) regular
461 /// expression (and support this feature), will emit a diagnostic whenever
462 /// they perform a transformation.
464
465 /// Selected optimizations for which we should enable missed optimization
466 /// remarks. Transformation passes whose name matches the contained (optional)
467 /// regular expression (and support this feature), will emit a diagnostic
468 /// whenever they tried but failed to perform a transformation.
470
471 /// Selected optimizations for which we should enable optimization analyses.
472 /// Transformation passes whose name matches the contained (optional) regular
473 /// expression (and support this feature), will emit a diagnostic whenever
474 /// they want to explain why they decided to apply or not apply a given
475 /// transformation.
477
478 /// Set of sanitizer checks that are non-fatal (i.e. execution should be
479 /// continued when possible).
481
482 /// Set of sanitizer checks that trap rather than diagnose.
484
485 /// Set of sanitizer checks that can merge handlers (smaller code size at
486 /// the expense of debuggability).
488
489 /// Set of thresholds in a range [0.0, 1.0]: the top hottest code responsible
490 /// for the given fraction of PGO counters will be excluded from sanitization
491 /// (0.0 [default] to skip none, 1.0 to skip all).
493
494 /// Set of sanitizer checks, for which the instrumentation will be annotated
495 /// with extra debug info.
497
498 std::optional<double> AllowRuntimeCheckSkipHotCutoff;
499
500 /// List of backend command-line options for -fembed-bitcode.
501 std::vector<uint8_t> CmdArgs;
502
503 /// A list of all -fno-builtin-* function names (e.g., memset).
504 std::vector<std::string> NoBuiltinFuncs;
505
506 std::vector<std::string> Reciprocals;
507
508 /// Configuration for pointer-signing.
510
511 /// The preferred width for auto-vectorization transforms. This is intended to
512 /// override default transforms based on the width of the architected vector
513 /// registers.
514 std::string PreferVectorWidth;
515
516 /// Set of XRay instrumentation kinds to emit.
518
519 std::vector<std::string> DefaultFunctionAttrs;
520
521 /// List of dynamic shared object files to be loaded as pass plugins.
522 std::vector<std::string> PassPlugins;
523
524 /// List of pass builder callbacks.
525 std::vector<std::function<void(llvm::PassBuilder &)>> PassBuilderCallbacks;
526
527 /// List of global variables explicitly specified by the user as toc-data.
528 std::vector<std::string> TocDataVarsUserSpecified;
529
530 /// List of global variables that over-ride the toc-data default.
531 std::vector<std::string> NoTocDataVars;
532
533 /// Path to allowlist file specifying which objects
534 /// (files, functions) should exclusively be instrumented
535 /// by sanitizer coverage pass.
536 std::vector<std::string> SanitizeCoverageAllowlistFiles;
537
538 /// The guard style used for stack protector to get a initial value, this
539 /// value usually be gotten from TLS or get from __stack_chk_guard, or some
540 /// other styles we may implement in the future.
542
543 /// The TLS base register when StackProtectorGuard is "tls", or register used
544 /// to store the stack canary for "sysreg".
545 /// On x86 this can be "fs" or "gs".
546 /// On AArch64 this can only be "sp_el0".
548
549 /// Specify a symbol to be the guard value.
551
552 /// Path to ignorelist file specifying which objects
553 /// (files, functions) listed for instrumentation by sanitizer
554 /// coverage pass should actually not be instrumented.
555 std::vector<std::string> SanitizeCoverageIgnorelistFiles;
556
557 /// Path to ignorelist file specifying which objects
558 /// (files, functions) listed for instrumentation by sanitizer
559 /// binary metadata pass should not be instrumented.
560 std::vector<std::string> SanitizeMetadataIgnorelistFiles;
561
562 /// Hash algorithm to use for KCFI type IDs.
563 llvm::KCFIHashAlgorithm SanitizeKcfiHash;
564
565 /// Name of the stack usage file (i.e., .su file) if user passes
566 /// -fstack-usage. If empty, it can be implied that -fstack-usage is not
567 /// passed on the command line.
568 std::string StackUsageFile;
569
570 /// Executable and command-line used to create a given CompilerInvocation.
571 /// Most of the time this will be the full -cc1 command.
572 const char *Argv0 = nullptr;
573 std::vector<std::string> CommandLineArgs;
574
575 /// The minimum hotness value a diagnostic needs in order to be included in
576 /// optimization diagnostics.
577 ///
578 /// The threshold is an Optional value, which maps to one of the 3 states:
579 /// 1. 0 => threshold disabled. All remarks will be printed.
580 /// 2. positive int => manual threshold by user. Remarks with hotness exceed
581 /// threshold will be printed.
582 /// 3. None => 'auto' threshold by user. The actual value is not
583 /// available at command line, but will be synced with
584 /// hotness threshold from profile summary during
585 /// compilation.
586 ///
587 /// If threshold option is not specified, it is disabled by default.
588 std::optional<uint64_t> DiagnosticsHotnessThreshold = 0;
589
590 /// The maximum percentage profiling weights can deviate from the expected
591 /// values in order to be included in misexpect diagnostics.
592 std::optional<uint32_t> DiagnosticsMisExpectTolerance = 0;
593
594 /// The name of a file to use with \c .secure_log_unique directives.
595 std::string AsSecureLogFile;
596
597 /// A list of functions that are replacable by the loader.
598 std::vector<std::string> LoaderReplaceableFunctionNames;
599 /// The name of a file that contains functions which will be compiled for
600 /// hotpatching. See -fms-secure-hotpatch-functions-file.
602
603 /// A list of functions which will be compiled for hotpatching.
604 /// See -fms-secure-hotpatch-functions-list.
605 std::vector<std::string> MSSecureHotPatchFunctionsList;
606
607public:
608 // Define accessors/mutators for code generation options of enumeration type.
609#define CODEGENOPT(Name, Bits, Default, Compatibility)
610#define ENUM_CODEGENOPT(Name, Type, Bits, Default, Compatibility) \
611 Type get##Name() const { return static_cast<Type>(Name); } \
612 void set##Name(Type Value) { Name = static_cast<unsigned>(Value); }
613#include "clang/Basic/CodeGenOptions.def"
614
616
617 const std::vector<std::string> &getNoBuiltinFuncs() const {
618 return NoBuiltinFuncs;
619 }
620
621 bool hasSjLjExceptions() const {
622 return getExceptionHandling() == ExceptionHandlingKind::SjLj;
623 }
624
625 bool hasSEHExceptions() const {
626 return getExceptionHandling() == ExceptionHandlingKind::WinEH;
627 }
628
629 bool hasDWARFExceptions() const {
630 return getExceptionHandling() == ExceptionHandlingKind::DwarfCFI;
631 }
632
633 bool hasWasmExceptions() const {
634 return getExceptionHandling() == ExceptionHandlingKind::Wasm;
635 }
636
637 /// Check if Clang profile instrumenation is on.
638 bool hasProfileClangInstr() const {
639 return getProfileInstr() ==
640 llvm::driver::ProfileInstrKind::ProfileClangInstr;
641 }
642
643 /// Check if IR level profile instrumentation is on.
644 bool hasProfileIRInstr() const {
645 return getProfileInstr() == llvm::driver::ProfileInstrKind::ProfileIRInstr;
646 }
647
648 /// Check if CS IR level profile instrumentation is on.
649 bool hasProfileCSIRInstr() const {
650 return getProfileInstr() ==
651 llvm::driver::ProfileInstrKind::ProfileCSIRInstr;
652 }
653
654 /// Check if any form of instrumentation is on.
655 bool hasProfileInstr() const {
656 return getProfileInstr() != llvm::driver::ProfileInstrKind::ProfileNone;
657 }
658
659 /// Check if Clang profile use is on.
660 bool hasProfileClangUse() const {
661 return getProfileUse() == llvm::driver::ProfileInstrKind::ProfileClangInstr;
662 }
663
664 /// Check if IR level profile use is on.
665 bool hasProfileIRUse() const {
666 return getProfileUse() == llvm::driver::ProfileInstrKind::ProfileIRInstr ||
667 getProfileUse() == llvm::driver::ProfileInstrKind::ProfileCSIRInstr;
668 }
669
670 /// Check if CSIR profile use is on.
671 bool hasProfileCSIRUse() const {
672 return getProfileUse() == llvm::driver::ProfileInstrKind::ProfileCSIRInstr;
673 }
674
675 /// Check if type and variable info should be emitted.
676 bool hasReducedDebugInfo() const {
677 return getDebugInfo() >= llvm::codegenoptions::DebugInfoConstructor;
678 }
679
680 /// Check if maybe unused type info should be emitted.
682 return getDebugInfo() >= llvm::codegenoptions::UnusedTypeInfo;
683 }
684
685 // Check if any one of SanitizeCoverage* is enabled.
686 bool hasSanitizeCoverage() const {
687 return SanitizeCoverageType || SanitizeCoverageIndirectCalls ||
688 SanitizeCoverageTraceCmp || SanitizeCoverageTraceLoads ||
689 SanitizeCoverageTraceStores || SanitizeCoverageControlFlow;
690 }
691
692 // Check if any one of SanitizeBinaryMetadata* is enabled.
694 return SanitizeBinaryMetadataCovered || SanitizeBinaryMetadataAtomics ||
695 SanitizeBinaryMetadataUAR;
696 }
697
698 /// Reset all of the options that are not considered when building a
699 /// module.
700 void resetNonModularOptions(StringRef ModuleFormat);
701
702 // Is the given function name one of the functions that can be replaced by the
703 // loader?
704 bool isLoaderReplaceableFunctionName(StringRef FuncName) const {
705 return llvm::is_contained(LoaderReplaceableFunctionNames, FuncName);
706 }
707
708 /// Are we building at -O1 or higher?
709 bool isOptimizedBuild() const { return OptimizationLevel > 0; }
710
711 /// When loading a bool from a storage unit larger than i1, should it
712 /// be converted to i1 by comparing to 0 or by truncating to i1?
714 switch (getLoadBoolFromMem()) {
716 return !isOptimizedBuild();
717
719 return false;
720
722 return true;
723 }
724 llvm_unreachable("Unknown BoolFromMem enum");
725 }
726
727 /// Remap specified path prefix using provided DebugPrefixMap map.
728 /// Returns updated path or unchanged if no substitution was found.
729 std::string remapDebugPathPrefix(StringRef Path) const;
730};
731
732} // end namespace clang
733
734#endif
Defines the clang::SanitizerKind enum.
Defines the clang::XRayInstrKind enum.
Bitfields of CodeGenOptions, split out from CodeGenOptions to ensure that this large collection of bi...
llvm::driver::ProfileInstrKind ProfileInstrKind
llvm::AsanDtorKind AsanDtorKind
llvm::WinX64EHUnwindMode WinX64EHUnwindMode
llvm::ZeroCallUsedRegs::ZeroCallUsedRegsKind ZeroCallUsedRegsKind
llvm::codegenoptions::DebugInfoKind DebugInfoKind
llvm::DebuggerKind DebuggerKind
llvm::EmitDwarfUnwindType EmitDwarfUnwindType
llvm::AsanDetectStackUseAfterReturnMode AsanDetectStackUseAfterReturnMode
CompatibilityKind
For ASTs produced with different option value, signifies their level of compatibility.
@ NotCompatible
Does affect the construction of the AST in a way that does prevent module interoperability.
@ Compatible
Does affect the construction of the AST in a way that doesn't prevent interoperability (that is,...
@ Benign
Does not affect the construction of the AST in any way (that is, the value can be different between a...
friend class CompilerInvocationBase
llvm::ControlFlowGuardMechanism ControlFlowGuardMechanism
llvm::DebugCompressionType DebugCompressionType
llvm::RelocSectionSymType RelocSectionSymType
llvm::driver::VectorLibrary VectorLibrary
llvm::codegenoptions::DebugTemplateNamesKind DebugTemplateNamesKind
clang::CFBranchLabelSchemeKind CFBranchLabelSchemeKind
llvm::SmallVector< std::pair< std::string, std::string >, 0 > CoveragePrefixMap
Prefix replacement map for source-based code coverage to remap source file paths in coverage mapping.
std::string StackProtectorGuardSymbol
Specify a symbol to be the guard value.
SanitizerSet SanitizeMergeHandlers
Set of sanitizer checks that can merge handlers (smaller code size at the expense of debuggability).
std::string StackUsageFile
Name of the stack usage file (i.e., .su file) if user passes -fstack-usage.
std::string UniqueSourceFileIdentifier
If non-empty, allow the compiler to assume that the given source file identifier is unique at link ti...
std::string MSSecureHotPatchFunctionsFile
The name of a file that contains functions which will be compiled for hotpatching.
const std::vector< std::string > & getNoBuiltinFuncs() const
std::vector< std::string > LoaderReplaceableFunctionNames
A list of functions that are replacable by the loader.
llvm::SmallVector< std::pair< std::string, std::string >, 0 > DebugPrefixMap
@ None
Trap Messages are omitted.
@ Detailed
Trap Message includes more context (e.g.
@ Basic
Trap Message is fixed per SanitizerKind.
std::string OptRecordFile
The name of the file to which the backend should save YAML optimization records.
std::string InstrProfileOutput
Name of the profile file to use as output for -fprofile-instr-generate, -fprofile-generate,...
std::string StackProtectorGuard
The guard style used for stack protector to get a initial value, this value usually be gotten from TL...
bool hasDWARFExceptions() const
std::vector< BitcodeFileToLink > LinkBitcodeFiles
The files specified here are linked in to the module before optimizations.
std::string RecordCommandLine
The string containing the commandline for the llvm.commandline metadata, if non-empty.
std::optional< uint64_t > DiagnosticsHotnessThreshold
The minimum hotness value a diagnostic needs in order to be included in optimization diagnostics.
bool hasProfileInstr() const
Check if any form of instrumentation is on.
bool isConvertingBoolWithCmp0() const
When loading a bool from a storage unit larger than i1, should it be converted to i1 by comparing to ...
bool hasProfileIRUse() const
Check if IR level profile use is on.
char CoverageVersion[4]
The version string to put into coverage files.
std::string FloatABI
The ABI to use for passing floating point arguments.
std::string OffloadBinaryToEmbedFile
Name of file passed with -foffload-include-binary option to forward to offloading runtime back-end fo...
std::string HLSLRecordCommandLine
The string containing the commandline for the dx.source.args metadata, if non-empty.
std::string ThinLinkBitcodeFile
Name of a file that can optionally be written with minimized bitcode to be used as input for the Thin...
bool hasProfileCSIRInstr() const
Check if CS IR level profile instrumentation is on.
std::vector< std::string > DependentLibraries
A list of dependent libraries.
std::string DebugPass
Enable additional debugging information.
llvm::Reloc::Model RelocationModel
The name of the relocation model to use.
llvm::DenormalMode FPDenormalMode
The floating-point denormal mode to use.
std::string CoverageNotesFile
The filename with path we use for coverage notes files.
std::string ProfileInstrumentUsePath
Name of the profile file to use as input for -fprofile-instr-use.
std::string SampleProfileFile
Name of the profile file to use with -fprofile-sample-use.
uint64_t LargeDataThreshold
The code model-specific large data threshold to use (-mlarge-data-threshold).
static StringRef getFramePointerKindName(FramePointerKind Kind)
std::string MemoryProfileOutput
Name of the profile file to use as output for with -fmemory-profile.
std::vector< std::function< void(llvm::PassBuilder &)> > PassBuilderCallbacks
List of pass builder callbacks.
std::string LimitFloatPrecision
The float precision limit to use, if non-empty.
std::string CodeModel
The code model to use (-mcmodel).
std::vector< std::string > TocDataVarsUserSpecified
List of global variables explicitly specified by the user as toc-data.
std::string CoverageDataFile
The filename with path we use for coverage data files.
std::vector< std::string > PassPlugins
List of dynamic shared object files to be loaded as pass plugins.
bool hasProfileClangInstr() const
Check if Clang profile instrumenation is on.
std::string DebugCompilationDir
The string to embed in debug information as the current working directory.
std::optional< uint32_t > DiagnosticsMisExpectTolerance
The maximum percentage profiling weights can deviate from the expected values in order to be included...
std::string OptRecordPasses
The regex that filters the passes that should be saved to the optimization records.
std::vector< std::string > SanitizeCoverageAllowlistFiles
Path to allowlist file specifying which objects (files, functions) should exclusively be instrumented...
std::string SaveTempsFilePrefix
Prefix to use for -save-temps output.
std::string PatchableFunctionEntrySection
Name of the patchable function entry section with -fpatchable-function-entry.
XRayInstrSet XRayInstrumentationBundle
Set of XRay instrumentation kinds to emit.
std::vector< std::string > SanitizeCoverageIgnorelistFiles
Path to ignorelist file specifying which objects (files, functions) listed for instrumentation by san...
bool hasSanitizeCoverage() const
std::vector< std::string > Reciprocals
std::string MainFileName
The user provided name for the "main file", if non-empty.
SanitizerSet SanitizeAnnotateDebugInfo
Set of sanitizer checks, for which the instrumentation will be annotated with extra debug info.
PointerAuthOptions PointerAuth
Configuration for pointer-signing.
llvm::DenormalMode FP32DenormalMode
The floating-point denormal mode to use, for float.
bool hasProfileIRInstr() const
Check if IR level profile instrumentation is on.
bool hasProfileCSIRUse() const
Check if CSIR profile use is on.
std::string CoverageCompilationDir
The string to embed in coverage mapping as the current working directory.
SanitizerSet SanitizeTrap
Set of sanitizer checks that trap rather than diagnose.
std::vector< std::string > SanitizeMetadataIgnorelistFiles
Path to ignorelist file specifying which objects (files, functions) listed for instrumentation by san...
SanitizerSet SanitizeRecover
Set of sanitizer checks that are non-fatal (i.e.
std::string ProfileExcludeFiles
Regexes separated by a semi-colon to filter the files to not instrument.
std::string AsSecureLogFile
The name of a file to use with .secure_log_unique directives.
std::string ProfileRemappingFile
Name of the profile remapping file to apply to the profile data supplied by -fprofile-sample-use or -...
bool hasReducedDebugInfo() const
Check if type and variable info should be emitted.
bool hasSanitizeBinaryMetadata() const
OptRemark OptimizationRemark
Selected optimizations for which we should enable optimization remarks.
llvm::KCFIHashAlgorithm SanitizeKcfiHash
Hash algorithm to use for KCFI type IDs.
std::string ThinLTOIndexFile
Name of the function summary index file to use for ThinLTO function importing.
const char * Argv0
Executable and command-line used to create a given CompilerInvocation.
bool hasWasmExceptions() const
llvm::SmallVector< llvm::SmallString< 8 > > HLSLParsedCommandLine
The vector contains parsed commandline for the dx.source.args metadata, if parsing was successful.
bool hasSjLjExceptions() const
std::string TrapFuncName
If not an empty string, trap intrinsics are lowered to calls to this function instead of to trap inst...
std::string remapDebugPathPrefix(StringRef Path) const
Remap specified path prefix using provided DebugPrefixMap map.
SanitizerMaskCutoffs SanitizeSkipHotCutoffs
Set of thresholds in a range [0.0, 1.0]: the top hottest code responsible for the given fraction of P...
std::string SplitDwarfFile
The name for the split debug info file used for the DW_AT_[GNU_]dwo_name attribute in the skeleton CU...
std::string StackProtectorGuardReg
The TLS base register when StackProtectorGuard is "tls", or register used to store the stack canary f...
std::vector< std::string > DefaultFunctionAttrs
std::vector< std::string > NoBuiltinFuncs
A list of all -fno-builtin-* function names (e.g., memset).
std::vector< uint8_t > CmdArgs
List of backend command-line options for -fembed-bitcode.
OptRemark OptimizationRemarkAnalysis
Selected optimizations for which we should enable optimization analyses.
std::optional< double > AllowRuntimeCheckSkipHotCutoff
std::vector< std::string > CommandLineArgs
std::vector< std::string > LinkerOptions
A list of linker options to embed in the object file.
bool hasSEHExceptions() const
std::string MemoryProfileUsePath
Name of the profile file to use as input for -fmemory-profile-use.
std::vector< std::string > MSSecureHotPatchFunctionsList
A list of functions which will be compiled for hotpatching.
void resetNonModularOptions(StringRef ModuleFormat)
Reset all of the options that are not considered when building a module.
@ Strict
In-memory bool values are assumed to be 0 or 1, and any other value is UB.
@ NonZero
Convert in-memory bools to i1 by checking if any bit is set to 1.
@ Truncate
Convert in-memory bools to i1 by checking if the least significant bit is 1.
ExceptionHandlingKind
Possible exception handling behavior.
std::string OptRecordFormat
The format used for serializing remarks (default: YAML)
bool hasProfileClangUse() const
Check if Clang profile use is on.
bool isOptimizedBuild() const
Are we building at -O1 or higher?
std::vector< std::string > OffloadObjects
List of filenames passed in using the -fembed-offload-object option.
std::string SymbolPartition
The name of the partition that symbols are assigned to, specified with -fsymbol-partition (see https:...
std::vector< std::string > NoTocDataVars
List of global variables that over-ride the toc-data default.
std::string ProfileFilterFiles
Regexes separated by a semi-colon to filter the files to instrument.
bool hasMaybeUnusedDebugInfo() const
Check if maybe unused type info should be emitted.
std::string PreferVectorWidth
The preferred width for auto-vectorization transforms.
std::string ObjectFilenameForDebug
Output filename used in the COFF debug information.
std::string SplitDwarfOutput
Output filename for the split debug info, not used in the skeleton CU.
bool isLoaderReplaceableFunctionName(StringRef FuncName) const
std::string DwarfDebugFlags
The string to embed in the debug information for the compile unit, if non-empty.
std::string DIBugsReportFilePath
The file to use for dumping bug report by Debugify for original debug info.
OptRemark OptimizationRemarkMissed
Selected optimizations for which we should enable missed optimization remarks.
std::string SaveDynDbgTempsFilePrefix
Prefix to use for -save-dynamic-debugging-temps output.
Top level wrappers for InstallAPI frontend operations.
VTableUniquenessKind
A target's ABI policy for whether a class's vtable can be assumed to have a unique address program-wi...
@ AlwaysUnique
Every vtable has a single address program-wide.
@ UniqueIfStrongLinkage
A vtable with strong linkage (e.g., a class with a key function) is unique, but a vague-linkage (weak...
Diagnostic wrappers for TextAPI types for error reporting.
Definition Dominators.h:30
int const char * function
Definition c++config.h:31
Optimization remark with an optional regular expression pattern.
std::shared_ptr< llvm::Regex > Regex
bool patternMatches(StringRef String) const
Matches the given string against the regex, if there is some.
OptRemark()=default
By default, optimization remark is missing.
bool hasValidPattern() const
Returns true iff the optimization remark holds a valid regular expression.