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
243 /// The code model to use (-mcmodel).
244 std::string CodeModel;
245
246 /// The code model-specific large data threshold to use
247 /// (-mlarge-data-threshold).
249
250 /// The filename with path we use for coverage data files. The runtime
251 /// allows further manipulation with the GCOV_PREFIX and GCOV_PREFIX_STRIP
252 /// environment variables.
253 std::string CoverageDataFile;
254
255 /// The filename with path we use for coverage notes files.
256 std::string CoverageNotesFile;
257
258 /// Regexes separated by a semi-colon to filter the files to instrument.
260
261 /// Regexes separated by a semi-colon to filter the files to not instrument.
263
264 /// The version string to put into coverage files.
265 char CoverageVersion[4] = {'0', '0', '0', '0'};
266
267 /// Enable additional debugging information.
268 std::string DebugPass;
269
270 /// The string to embed in debug information as the current working directory.
272
273 /// The string to embed in coverage mapping as the current working directory.
275
276 /// The string to embed in the debug information for the compile unit, if
277 /// non-empty.
278 std::string DwarfDebugFlags;
279
280 /// The string containing the commandline for the llvm.commandline metadata,
281 /// if non-empty.
282 std::string RecordCommandLine;
283
284 /// The string containing the commandline for the dx.source.args metadata,
285 /// if non-empty.
287
288 /// The vector contains parsed commandline for the dx.source.args metadata,
289 /// if parsing was successful.
291
293
294 /// Prefix replacement map for source-based code coverage to remap source
295 /// file paths in coverage mapping.
297
298 /// The ABI to use for passing floating point arguments.
299 std::string FloatABI;
300
301 /// The file to use for dumping bug report by `Debugify` for original
302 /// debug info.
304
305 /// The floating-point denormal mode to use.
306 llvm::DenormalMode FPDenormalMode = llvm::DenormalMode::getIEEE();
307
308 /// The floating-point denormal mode to use, for float.
309 llvm::DenormalMode FP32DenormalMode = llvm::DenormalMode::getIEEE();
310
311 /// The float precision limit to use, if non-empty.
313
315 /// The filename of the bitcode file to link in.
316 std::string Filename;
317 /// If true, we set attributes functions in the bitcode library according to
318 /// our CodeGenOptions, much as we set attrs on functions that we generate
319 /// ourselves.
320 bool PropagateAttrs = false;
321 /// If true, we use LLVM module internalizer.
322 bool Internalize = false;
323 /// Bitwise combination of llvm::Linker::Flags, passed to the LLVM linker.
324 unsigned LinkFlags = 0;
325 };
326
327 /// The files specified here are linked in to the module before optimizations.
328 std::vector<BitcodeFileToLink> LinkBitcodeFiles;
329
330 /// The user provided name for the "main file", if non-empty. This is useful
331 /// in situations where the input file name does not match the original input
332 /// file, for example with -save-temps.
333 std::string MainFileName;
334
335 /// The name for the split debug info file used for the DW_AT_[GNU_]dwo_name
336 /// attribute in the skeleton CU.
337 std::string SplitDwarfFile;
338
339 /// Output filename for the split debug info, not used in the skeleton CU.
340 std::string SplitDwarfOutput;
341
342 /// Output filename used in the COFF debug information.
344
345 /// The name of the relocation model to use.
346 llvm::Reloc::Model RelocationModel;
347
348 /// If not an empty string, trap intrinsics are lowered to calls to this
349 /// function instead of to trap instructions.
350 std::string TrapFuncName;
351
352 /// A list of dependent libraries.
353 std::vector<std::string> DependentLibraries;
354
355 /// A list of linker options to embed in the object file.
356 std::vector<std::string> LinkerOptions;
357
358 /// Name of the profile file to use as output for -fprofile-instr-generate,
359 /// -fprofile-generate, and -fcs-profile-generate.
361
362 /// Name of the patchable function entry section with
363 /// -fpatchable-function-entry.
365
366 /// Name of the profile file to use with -fprofile-sample-use.
367 std::string SampleProfileFile;
368
369 /// Name of the profile file to use as output for with -fmemory-profile.
371
372 /// Name of the profile file to use as input for -fmemory-profile-use.
374
375 /// Name of the profile file to use as input for -fprofile-instr-use
377
378 /// Name of the profile remapping file to apply to the profile data supplied
379 /// by -fprofile-sample-use or -fprofile-instr-use.
381
382 /// Name of the function summary index file to use for ThinLTO function
383 /// importing.
384 std::string ThinLTOIndexFile;
385
386 /// Name of a file that can optionally be written with minimized bitcode
387 /// to be used as input for the ThinLTO thin link step, which only needs
388 /// the summary and module symbol table (and not, e.g. any debug metadata).
390
391 /// Prefix to use for -save-temps output.
393
394 /// Name of file passed with -fcuda-include-gpubinary option to forward to
395 /// CUDA runtime back-end for incorporating them into host-side object file.
397
398 /// List of filenames passed in using the -fembed-offload-object option. These
399 /// are offloading binaries containing device images and metadata.
400 std::vector<std::string> OffloadObjects;
401
402 /// The name of the file to which the backend should save YAML optimization
403 /// records.
404 std::string OptRecordFile;
405
406 /// The regex that filters the passes that should be saved to the optimization
407 /// records.
408 std::string OptRecordPasses;
409
410 /// The format used for serializing remarks (default: YAML)
411 std::string OptRecordFormat;
412
413 /// The name of the partition that symbols are assigned to, specified with
414 /// -fsymbol-partition (see https://lld.llvm.org/Partitions.html).
415 std::string SymbolPartition;
416
417 /// If non-empty, allow the compiler to assume that the given source file
418 /// identifier is unique at link time.
420
422 RK_Missing, // Remark argument not present on the command line.
423 RK_Enabled, // Remark enabled via '-Rgroup'.
424 RK_EnabledEverything, // Remark enabled via '-Reverything'.
425 RK_Disabled, // Remark disabled via '-Rno-group'.
426 RK_DisabledEverything, // Remark disabled via '-Rno-everything'.
427 RK_WithPattern, // Remark pattern specified via '-Rgroup=regexp'.
428 };
429
430 /// Optimization remark with an optional regular expression pattern.
431 struct OptRemark {
433 std::string Pattern;
434 std::shared_ptr<llvm::Regex> Regex;
435
436 /// By default, optimization remark is missing.
437 OptRemark() = default;
438
439 /// Returns true iff the optimization remark holds a valid regular
440 /// expression.
441 bool hasValidPattern() const { return Regex != nullptr; }
442
443 /// Matches the given string against the regex, if there is some.
444 bool patternMatches(StringRef String) const {
445 return hasValidPattern() && Regex->match(String);
446 }
447 };
448
449 /// Selected optimizations for which we should enable optimization remarks.
450 /// Transformation passes whose name matches the contained (optional) regular
451 /// expression (and support this feature), will emit a diagnostic whenever
452 /// they perform a transformation.
454
455 /// Selected optimizations for which we should enable missed optimization
456 /// remarks. Transformation passes whose name matches the contained (optional)
457 /// regular expression (and support this feature), will emit a diagnostic
458 /// whenever they tried but failed to perform a transformation.
460
461 /// Selected optimizations for which we should enable optimization analyses.
462 /// Transformation passes whose name matches the contained (optional) regular
463 /// expression (and support this feature), will emit a diagnostic whenever
464 /// they want to explain why they decided to apply or not apply a given
465 /// transformation.
467
468 /// Set of sanitizer checks that are non-fatal (i.e. execution should be
469 /// continued when possible).
471
472 /// Set of sanitizer checks that trap rather than diagnose.
474
475 /// Set of sanitizer checks that can merge handlers (smaller code size at
476 /// the expense of debuggability).
478
479 /// Set of thresholds in a range [0.0, 1.0]: the top hottest code responsible
480 /// for the given fraction of PGO counters will be excluded from sanitization
481 /// (0.0 [default] to skip none, 1.0 to skip all).
483
484 /// Set of sanitizer checks, for which the instrumentation will be annotated
485 /// with extra debug info.
487
488 std::optional<double> AllowRuntimeCheckSkipHotCutoff;
489
490 /// List of backend command-line options for -fembed-bitcode.
491 std::vector<uint8_t> CmdArgs;
492
493 /// A list of all -fno-builtin-* function names (e.g., memset).
494 std::vector<std::string> NoBuiltinFuncs;
495
496 std::vector<std::string> Reciprocals;
497
498 /// Configuration for pointer-signing.
500
501 /// The preferred width for auto-vectorization transforms. This is intended to
502 /// override default transforms based on the width of the architected vector
503 /// registers.
504 std::string PreferVectorWidth;
505
506 /// Set of XRay instrumentation kinds to emit.
508
509 std::vector<std::string> DefaultFunctionAttrs;
510
511 /// List of dynamic shared object files to be loaded as pass plugins.
512 std::vector<std::string> PassPlugins;
513
514 /// List of pass builder callbacks.
515 std::vector<std::function<void(llvm::PassBuilder &)>> PassBuilderCallbacks;
516
517 /// List of global variables explicitly specified by the user as toc-data.
518 std::vector<std::string> TocDataVarsUserSpecified;
519
520 /// List of global variables that over-ride the toc-data default.
521 std::vector<std::string> NoTocDataVars;
522
523 /// Path to allowlist file specifying which objects
524 /// (files, functions) should exclusively be instrumented
525 /// by sanitizer coverage pass.
526 std::vector<std::string> SanitizeCoverageAllowlistFiles;
527
528 /// The guard style used for stack protector to get a initial value, this
529 /// value usually be gotten from TLS or get from __stack_chk_guard, or some
530 /// other styles we may implement in the future.
532
533 /// The TLS base register when StackProtectorGuard is "tls", or register used
534 /// to store the stack canary for "sysreg".
535 /// On x86 this can be "fs" or "gs".
536 /// On AArch64 this can only be "sp_el0".
538
539 /// Specify a symbol to be the guard value.
541
542 /// Path to ignorelist file specifying which objects
543 /// (files, functions) listed for instrumentation by sanitizer
544 /// coverage pass should actually not be instrumented.
545 std::vector<std::string> SanitizeCoverageIgnorelistFiles;
546
547 /// Path to ignorelist file specifying which objects
548 /// (files, functions) listed for instrumentation by sanitizer
549 /// binary metadata pass should not be instrumented.
550 std::vector<std::string> SanitizeMetadataIgnorelistFiles;
551
552 /// Hash algorithm to use for KCFI type IDs.
553 llvm::KCFIHashAlgorithm SanitizeKcfiHash;
554
555 /// Name of the stack usage file (i.e., .su file) if user passes
556 /// -fstack-usage. If empty, it can be implied that -fstack-usage is not
557 /// passed on the command line.
558 std::string StackUsageFile;
559
560 /// Executable and command-line used to create a given CompilerInvocation.
561 /// Most of the time this will be the full -cc1 command.
562 const char *Argv0 = nullptr;
563 std::vector<std::string> CommandLineArgs;
564
565 /// The minimum hotness value a diagnostic needs in order to be included in
566 /// optimization diagnostics.
567 ///
568 /// The threshold is an Optional value, which maps to one of the 3 states:
569 /// 1. 0 => threshold disabled. All remarks will be printed.
570 /// 2. positive int => manual threshold by user. Remarks with hotness exceed
571 /// threshold will be printed.
572 /// 3. None => 'auto' threshold by user. The actual value is not
573 /// available at command line, but will be synced with
574 /// hotness threshold from profile summary during
575 /// compilation.
576 ///
577 /// If threshold option is not specified, it is disabled by default.
578 std::optional<uint64_t> DiagnosticsHotnessThreshold = 0;
579
580 /// The maximum percentage profiling weights can deviate from the expected
581 /// values in order to be included in misexpect diagnostics.
582 std::optional<uint32_t> DiagnosticsMisExpectTolerance = 0;
583
584 /// The name of a file to use with \c .secure_log_unique directives.
585 std::string AsSecureLogFile;
586
587 /// A list of functions that are replacable by the loader.
588 std::vector<std::string> LoaderReplaceableFunctionNames;
589 /// The name of a file that contains functions which will be compiled for
590 /// hotpatching. See -fms-secure-hotpatch-functions-file.
592
593 /// A list of functions which will be compiled for hotpatching.
594 /// See -fms-secure-hotpatch-functions-list.
595 std::vector<std::string> MSSecureHotPatchFunctionsList;
596
597public:
598 // Define accessors/mutators for code generation options of enumeration type.
599#define CODEGENOPT(Name, Bits, Default, Compatibility)
600#define ENUM_CODEGENOPT(Name, Type, Bits, Default, Compatibility) \
601 Type get##Name() const { return static_cast<Type>(Name); } \
602 void set##Name(Type Value) { Name = static_cast<unsigned>(Value); }
603#include "clang/Basic/CodeGenOptions.def"
604
606
607 const std::vector<std::string> &getNoBuiltinFuncs() const {
608 return NoBuiltinFuncs;
609 }
610
611 bool hasSjLjExceptions() const {
612 return getExceptionHandling() == ExceptionHandlingKind::SjLj;
613 }
614
615 bool hasSEHExceptions() const {
616 return getExceptionHandling() == ExceptionHandlingKind::WinEH;
617 }
618
619 bool hasDWARFExceptions() const {
620 return getExceptionHandling() == ExceptionHandlingKind::DwarfCFI;
621 }
622
623 bool hasWasmExceptions() const {
624 return getExceptionHandling() == ExceptionHandlingKind::Wasm;
625 }
626
627 /// Check if Clang profile instrumenation is on.
628 bool hasProfileClangInstr() const {
629 return getProfileInstr() ==
630 llvm::driver::ProfileInstrKind::ProfileClangInstr;
631 }
632
633 /// Check if IR level profile instrumentation is on.
634 bool hasProfileIRInstr() const {
635 return getProfileInstr() == llvm::driver::ProfileInstrKind::ProfileIRInstr;
636 }
637
638 /// Check if CS IR level profile instrumentation is on.
639 bool hasProfileCSIRInstr() const {
640 return getProfileInstr() ==
641 llvm::driver::ProfileInstrKind::ProfileCSIRInstr;
642 }
643
644 /// Check if any form of instrumentation is on.
645 bool hasProfileInstr() const {
646 return getProfileInstr() != llvm::driver::ProfileInstrKind::ProfileNone;
647 }
648
649 /// Check if Clang profile use is on.
650 bool hasProfileClangUse() const {
651 return getProfileUse() == llvm::driver::ProfileInstrKind::ProfileClangInstr;
652 }
653
654 /// Check if IR level profile use is on.
655 bool hasProfileIRUse() const {
656 return getProfileUse() == llvm::driver::ProfileInstrKind::ProfileIRInstr ||
657 getProfileUse() == llvm::driver::ProfileInstrKind::ProfileCSIRInstr;
658 }
659
660 /// Check if CSIR profile use is on.
661 bool hasProfileCSIRUse() const {
662 return getProfileUse() == llvm::driver::ProfileInstrKind::ProfileCSIRInstr;
663 }
664
665 /// Check if type and variable info should be emitted.
666 bool hasReducedDebugInfo() const {
667 return getDebugInfo() >= llvm::codegenoptions::DebugInfoConstructor;
668 }
669
670 /// Check if maybe unused type info should be emitted.
672 return getDebugInfo() >= llvm::codegenoptions::UnusedTypeInfo;
673 }
674
675 // Check if any one of SanitizeCoverage* is enabled.
676 bool hasSanitizeCoverage() const {
677 return SanitizeCoverageType || SanitizeCoverageIndirectCalls ||
678 SanitizeCoverageTraceCmp || SanitizeCoverageTraceLoads ||
679 SanitizeCoverageTraceStores || SanitizeCoverageControlFlow;
680 }
681
682 // Check if any one of SanitizeBinaryMetadata* is enabled.
684 return SanitizeBinaryMetadataCovered || SanitizeBinaryMetadataAtomics ||
685 SanitizeBinaryMetadataUAR;
686 }
687
688 /// Reset all of the options that are not considered when building a
689 /// module.
690 void resetNonModularOptions(StringRef ModuleFormat);
691
692 // Is the given function name one of the functions that can be replaced by the
693 // loader?
694 bool isLoaderReplaceableFunctionName(StringRef FuncName) const {
695 return llvm::is_contained(LoaderReplaceableFunctionNames, FuncName);
696 }
697
698 /// Are we building at -O1 or higher?
699 bool isOptimizedBuild() const { return OptimizationLevel > 0; }
700
701 /// When loading a bool from a storage unit larger than i1, should it
702 /// be converted to i1 by comparing to 0 or by truncating to i1?
704 switch (getLoadBoolFromMem()) {
706 return !isOptimizedBuild();
707
709 return false;
710
712 return true;
713 }
714 llvm_unreachable("Unknown BoolFromMem enum");
715 }
716};
717
718} // end namespace clang
719
720#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 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.
std::string CudaGpuBinaryFileName
Name of file passed with -fcuda-include-gpubinary option to forward to CUDA runtime back-end for inco...
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...
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.
The JSON file list parser is used to communicate input to InstallAPI.
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.