clang 23.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/Hash.h"
26#include "llvm/Support/Regex.h"
27#include "llvm/Target/TargetOptions.h"
28#include "llvm/Transforms/Instrumentation/AddressSanitizerOptions.h"
29#include <map>
30#include <memory>
31#include <string>
32#include <vector>
33
34namespace llvm {
35class PassBuilder;
36}
37namespace clang {
38
39/// Bitfields of CodeGenOptions, split out from CodeGenOptions to ensure
40/// that this large collection of bitfields is a trivial class type.
42 friend class CompilerInvocation;
44
45public:
46 /// For ASTs produced with different option value, signifies their level of
47 /// compatibility.
48 enum class CompatibilityKind {
49 /// Does affect the construction of the AST in a way that does prevent
50 /// module interoperability.
52 /// Does affect the construction of the AST in a way that doesn't prevent
53 /// interoperability (that is, the value can be different between an
54 /// explicit module and the user of that module).
56 /// Does not affect the construction of the AST in any way (that is, the
57 /// value can be different between an implicit module and the user of that
58 /// module).
60 };
61
63 using ProfileInstrKind = llvm::driver::ProfileInstrKind;
65 llvm::AsanDetectStackUseAfterReturnMode;
66 using AsanDtorKind = llvm::AsanDtorKind;
67 using VectorLibrary = llvm::driver::VectorLibrary;
68 using ZeroCallUsedRegsKind = llvm::ZeroCallUsedRegs::ZeroCallUsedRegsKind;
69 using WinX64EHUnwindV2Mode = llvm::WinX64EHUnwindV2Mode;
70 using ControlFlowGuardMechanism = llvm::ControlFlowGuardMechanism;
71
72 using DebugCompressionType = llvm::DebugCompressionType;
73 using EmitDwarfUnwindType = llvm::EmitDwarfUnwindType;
74 using DebugTemplateNamesKind = llvm::codegenoptions::DebugTemplateNamesKind;
75 using DebugInfoKind = llvm::codegenoptions::DebugInfoKind;
76 using DebuggerKind = llvm::DebuggerKind;
77 using RelocSectionSymType = llvm::RelocSectionSymType;
78
79#define CODEGENOPT(Name, Bits, Default, Compatibility) unsigned Name : Bits;
80#define ENUM_CODEGENOPT(Name, Type, Bits, Default, Compatibility)
81#include "clang/Basic/CodeGenOptions.def"
82
83protected:
84#define CODEGENOPT(Name, Bits, Default, Compatibility)
85#define ENUM_CODEGENOPT(Name, Type, Bits, Default, Compatibility) \
86 unsigned Name : Bits;
87#include "clang/Basic/CodeGenOptions.def"
88};
89
90/// CodeGenOptions - Track various options which control how the code
91/// is optimized and passed to the backend.
93public:
95 NormalInlining, // Use the standard function inlining pass.
96 OnlyHintInlining, // Inline only (implicitly) hinted functions.
97 OnlyAlwaysInlining // Only run the always inlining pass.
98 };
99
105
112
114 SRCK_Default, // No special option was passed.
115 SRCK_OnStack, // Small structs on the stack (-fpcc-struct-return).
116 SRCK_InRegs // Small structs in registers (-freg-struct-return).
117 };
118
120 Embed_Off, // No embedded bitcode.
121 Embed_All, // Embed both bitcode and commandline in the output.
122 Embed_Bitcode, // Embed just the bitcode in the output.
123 Embed_Marker // Embed a marker as a placeholder for bitcode.
124 };
125
131
136
143
144 // This field stores one of the allowed values for the option
145 // -fbasic-block-sections=. The allowed values with this option are:
146 // {"all", "list=<file>", "none"}.
147 //
148 // "all" : Generate basic block sections for all basic blocks.
149 // "list=<file>": Generate basic block sections for a subset of basic blocks.
150 // The functions and the machine basic block ids are specified
151 // in the file.
152 // "none": Disable sections for basic blocks.
153 std::string BBSections;
154
155 // If set, override the default value of MCAsmInfo::BinutilsVersion. If
156 // DisableIntegratedAS is specified, the assembly output will consider GNU as
157 // support. "none" means that all ELF features can be used, regardless of
158 // binutils support.
159 std::string BinutilsVersion;
160
161 enum class FramePointerKind {
162 NonLeafNoReserve, // Keep non-leaf frame pointers, allow the FP to be used
163 // as a GPR in leaf functions.
164 None, // Omit all frame pointers.
165 Reserved, // Maintain valid frame pointer chain.
166 NonLeaf, // Keep non-leaf frame pointers, don't allow the FP to be used as a
167 // GPR in leaf functions.
168 All, // Keep all frame pointers.
169 };
170
172 switch (Kind) {
174 return "none";
176 return "reserved";
178 return "non-leaf-no-reserve";
180 return "non-leaf";
182 return "all";
183 }
184
185 llvm_unreachable("invalid FramePointerKind");
186 }
187
188 /// Possible exception handling behavior.
190
192 Auto, // Choose Swift async extended frame info based on deployment target.
193 Always, // Unconditionally emit Swift async extended frame info.
194 Never, // Don't emit Swift async extended frame info.
196 };
197
199 Language, // Not specified, use language standard.
200 Always, // All loops are assumed to be finite.
201 Never, // No loop is assumed to be finite.
202 };
203
209
211 None, ///< Trap Messages are omitted. This offers the smallest debug info
212 ///< size but at the cost of making traps hard to debug.
213 Basic, ///< Trap Message is fixed per SanitizerKind. Produces smaller debug
214 ///< info than `Detailed` but is not as helpful for debugging.
215 Detailed, ///< Trap Message includes more context (e.g. the expression being
216 ///< overflowed). This is more helpful for debugging but produces
217 ///< larger debug info than `Basic`.
218 };
219
220 enum class BoolFromMem {
221 Strict, ///< In-memory bool values are assumed to be 0 or 1, and any other
222 ///< value is UB.
223 Truncate, ///< Convert in-memory bools to i1 by checking if the least
224 ///< significant bit is 1.
225 NonZero, ///< Convert in-memory bools to i1 by checking if any bit is set
226 ///< to 1.
228 };
229
230 /// The code model to use (-mcmodel).
231 std::string CodeModel;
232
233 /// The code model-specific large data threshold to use
234 /// (-mlarge-data-threshold).
236
237 /// The filename with path we use for coverage data files. The runtime
238 /// allows further manipulation with the GCOV_PREFIX and GCOV_PREFIX_STRIP
239 /// environment variables.
240 std::string CoverageDataFile;
241
242 /// The filename with path we use for coverage notes files.
243 std::string CoverageNotesFile;
244
245 /// Regexes separated by a semi-colon to filter the files to instrument.
247
248 /// Regexes separated by a semi-colon to filter the files to not instrument.
250
251 /// The version string to put into coverage files.
252 char CoverageVersion[4] = {'0', '0', '0', '0'};
253
254 /// Enable additional debugging information.
255 std::string DebugPass;
256
257 /// The string to embed in debug information as the current working directory.
259
260 /// The string to embed in coverage mapping as the current working directory.
262
263 /// The string to embed in the debug information for the compile unit, if
264 /// non-empty.
265 std::string DwarfDebugFlags;
266
267 /// The string containing the commandline for the llvm.commandline metadata,
268 /// if non-empty.
269 std::string RecordCommandLine;
270
272
273 /// Prefix replacement map for source-based code coverage to remap source
274 /// file paths in coverage mapping.
276
277 /// The ABI to use for passing floating point arguments.
278 std::string FloatABI;
279
280 /// The file to use for dumping bug report by `Debugify` for original
281 /// debug info.
283
284 /// The floating-point denormal mode to use.
285 llvm::DenormalMode FPDenormalMode = llvm::DenormalMode::getIEEE();
286
287 /// The floating-point denormal mode to use, for float.
288 llvm::DenormalMode FP32DenormalMode = llvm::DenormalMode::getIEEE();
289
290 /// The float precision limit to use, if non-empty.
292
294 /// The filename of the bitcode file to link in.
295 std::string Filename;
296 /// If true, we set attributes functions in the bitcode library according to
297 /// our CodeGenOptions, much as we set attrs on functions that we generate
298 /// ourselves.
299 bool PropagateAttrs = false;
300 /// If true, we use LLVM module internalizer.
301 bool Internalize = false;
302 /// Bitwise combination of llvm::Linker::Flags, passed to the LLVM linker.
303 unsigned LinkFlags = 0;
304 };
305
306 /// The files specified here are linked in to the module before optimizations.
307 std::vector<BitcodeFileToLink> LinkBitcodeFiles;
308
309 /// The user provided name for the "main file", if non-empty. This is useful
310 /// in situations where the input file name does not match the original input
311 /// file, for example with -save-temps.
312 std::string MainFileName;
313
314 /// The name for the split debug info file used for the DW_AT_[GNU_]dwo_name
315 /// attribute in the skeleton CU.
316 std::string SplitDwarfFile;
317
318 /// Output filename for the split debug info, not used in the skeleton CU.
319 std::string SplitDwarfOutput;
320
321 /// Output filename used in the COFF debug information.
323
324 /// The name of the relocation model to use.
325 llvm::Reloc::Model RelocationModel;
326
327 /// If not an empty string, trap intrinsics are lowered to calls to this
328 /// function instead of to trap instructions.
329 std::string TrapFuncName;
330
331 /// A list of dependent libraries.
332 std::vector<std::string> DependentLibraries;
333
334 /// A list of linker options to embed in the object file.
335 std::vector<std::string> LinkerOptions;
336
337 /// Name of the profile file to use as output for -fprofile-instr-generate,
338 /// -fprofile-generate, and -fcs-profile-generate.
340
341 /// Name of the patchable function entry section with
342 /// -fpatchable-function-entry.
344
345 /// Name of the profile file to use with -fprofile-sample-use.
346 std::string SampleProfileFile;
347
348 /// Name of the profile file to use as output for with -fmemory-profile.
350
351 /// Name of the profile file to use as input for -fmemory-profile-use.
353
354 /// Name of the profile file to use as input for -fprofile-instr-use
356
357 /// Name of the profile remapping file to apply to the profile data supplied
358 /// by -fprofile-sample-use or -fprofile-instr-use.
360
361 /// Name of the function summary index file to use for ThinLTO function
362 /// importing.
363 std::string ThinLTOIndexFile;
364
365 /// Name of a file that can optionally be written with minimized bitcode
366 /// to be used as input for the ThinLTO thin link step, which only needs
367 /// the summary and module symbol table (and not, e.g. any debug metadata).
369
370 /// Prefix to use for -save-temps output.
372
373 /// Name of file passed with -fcuda-include-gpubinary option to forward to
374 /// CUDA runtime back-end for incorporating them into host-side object file.
376
377 /// List of filenames passed in using the -fembed-offload-object option. These
378 /// are offloading binaries containing device images and metadata.
379 std::vector<std::string> OffloadObjects;
380
381 /// The name of the file to which the backend should save YAML optimization
382 /// records.
383 std::string OptRecordFile;
384
385 /// The regex that filters the passes that should be saved to the optimization
386 /// records.
387 std::string OptRecordPasses;
388
389 /// The format used for serializing remarks (default: YAML)
390 std::string OptRecordFormat;
391
392 /// The name of the partition that symbols are assigned to, specified with
393 /// -fsymbol-partition (see https://lld.llvm.org/Partitions.html).
394 std::string SymbolPartition;
395
396 /// If non-empty, allow the compiler to assume that the given source file
397 /// identifier is unique at link time.
399
401 RK_Missing, // Remark argument not present on the command line.
402 RK_Enabled, // Remark enabled via '-Rgroup'.
403 RK_EnabledEverything, // Remark enabled via '-Reverything'.
404 RK_Disabled, // Remark disabled via '-Rno-group'.
405 RK_DisabledEverything, // Remark disabled via '-Rno-everything'.
406 RK_WithPattern, // Remark pattern specified via '-Rgroup=regexp'.
407 };
408
409 /// Optimization remark with an optional regular expression pattern.
410 struct OptRemark {
412 std::string Pattern;
413 std::shared_ptr<llvm::Regex> Regex;
414
415 /// By default, optimization remark is missing.
416 OptRemark() = default;
417
418 /// Returns true iff the optimization remark holds a valid regular
419 /// expression.
420 bool hasValidPattern() const { return Regex != nullptr; }
421
422 /// Matches the given string against the regex, if there is some.
423 bool patternMatches(StringRef String) const {
424 return hasValidPattern() && Regex->match(String);
425 }
426 };
427
428 /// Selected optimizations for which we should enable optimization remarks.
429 /// Transformation passes whose name matches the contained (optional) regular
430 /// expression (and support this feature), will emit a diagnostic whenever
431 /// they perform a transformation.
433
434 /// Selected optimizations for which we should enable missed optimization
435 /// remarks. Transformation passes whose name matches the contained (optional)
436 /// regular expression (and support this feature), will emit a diagnostic
437 /// whenever they tried but failed to perform a transformation.
439
440 /// Selected optimizations for which we should enable optimization analyses.
441 /// Transformation passes whose name matches the contained (optional) regular
442 /// expression (and support this feature), will emit a diagnostic whenever
443 /// they want to explain why they decided to apply or not apply a given
444 /// transformation.
446
447 /// Set of sanitizer checks that are non-fatal (i.e. execution should be
448 /// continued when possible).
450
451 /// Set of sanitizer checks that trap rather than diagnose.
453
454 /// Set of sanitizer checks that can merge handlers (smaller code size at
455 /// the expense of debuggability).
457
458 /// Set of thresholds in a range [0.0, 1.0]: the top hottest code responsible
459 /// for the given fraction of PGO counters will be excluded from sanitization
460 /// (0.0 [default] to skip none, 1.0 to skip all).
462
463 /// Set of sanitizer checks, for which the instrumentation will be annotated
464 /// with extra debug info.
466
467 std::optional<double> AllowRuntimeCheckSkipHotCutoff;
468
469 /// List of backend command-line options for -fembed-bitcode.
470 std::vector<uint8_t> CmdArgs;
471
472 /// A list of all -fno-builtin-* function names (e.g., memset).
473 std::vector<std::string> NoBuiltinFuncs;
474
475 std::vector<std::string> Reciprocals;
476
477 /// Configuration for pointer-signing.
479
480 /// The preferred width for auto-vectorization transforms. This is intended to
481 /// override default transforms based on the width of the architected vector
482 /// registers.
483 std::string PreferVectorWidth;
484
485 /// Set of XRay instrumentation kinds to emit.
487
488 std::vector<std::string> DefaultFunctionAttrs;
489
490 /// List of dynamic shared object files to be loaded as pass plugins.
491 std::vector<std::string> PassPlugins;
492
493 /// List of pass builder callbacks.
494 std::vector<std::function<void(llvm::PassBuilder &)>> PassBuilderCallbacks;
495
496 /// List of global variables explicitly specified by the user as toc-data.
497 std::vector<std::string> TocDataVarsUserSpecified;
498
499 /// List of global variables that over-ride the toc-data default.
500 std::vector<std::string> NoTocDataVars;
501
502 /// Path to allowlist file specifying which objects
503 /// (files, functions) should exclusively be instrumented
504 /// by sanitizer coverage pass.
505 std::vector<std::string> SanitizeCoverageAllowlistFiles;
506
507 /// The guard style used for stack protector to get a initial value, this
508 /// value usually be gotten from TLS or get from __stack_chk_guard, or some
509 /// other styles we may implement in the future.
511
512 /// The TLS base register when StackProtectorGuard is "tls", or register used
513 /// to store the stack canary for "sysreg".
514 /// On x86 this can be "fs" or "gs".
515 /// On AArch64 this can only be "sp_el0".
517
518 /// Specify a symbol to be the guard value.
520
521 /// Path to ignorelist file specifying which objects
522 /// (files, functions) listed for instrumentation by sanitizer
523 /// coverage pass should actually not be instrumented.
524 std::vector<std::string> SanitizeCoverageIgnorelistFiles;
525
526 /// Path to ignorelist file specifying which objects
527 /// (files, functions) listed for instrumentation by sanitizer
528 /// binary metadata pass should not be instrumented.
529 std::vector<std::string> SanitizeMetadataIgnorelistFiles;
530
531 /// Hash algorithm to use for KCFI type IDs.
532 llvm::KCFIHashAlgorithm SanitizeKcfiHash;
533
534 /// Name of the stack usage file (i.e., .su file) if user passes
535 /// -fstack-usage. If empty, it can be implied that -fstack-usage is not
536 /// passed on the command line.
537 std::string StackUsageFile;
538
539 /// Executable and command-line used to create a given CompilerInvocation.
540 /// Most of the time this will be the full -cc1 command.
541 const char *Argv0 = nullptr;
542 std::vector<std::string> CommandLineArgs;
543
544 /// The minimum hotness value a diagnostic needs in order to be included in
545 /// optimization diagnostics.
546 ///
547 /// The threshold is an Optional value, which maps to one of the 3 states:
548 /// 1. 0 => threshold disabled. All remarks will be printed.
549 /// 2. positive int => manual threshold by user. Remarks with hotness exceed
550 /// threshold will be printed.
551 /// 3. None => 'auto' threshold by user. The actual value is not
552 /// available at command line, but will be synced with
553 /// hotness threshold from profile summary during
554 /// compilation.
555 ///
556 /// If threshold option is not specified, it is disabled by default.
557 std::optional<uint64_t> DiagnosticsHotnessThreshold = 0;
558
559 /// The maximum percentage profiling weights can deviate from the expected
560 /// values in order to be included in misexpect diagnostics.
561 std::optional<uint32_t> DiagnosticsMisExpectTolerance = 0;
562
563 /// The name of a file to use with \c .secure_log_unique directives.
564 std::string AsSecureLogFile;
565
566 /// A list of functions that are replacable by the loader.
567 std::vector<std::string> LoaderReplaceableFunctionNames;
568 /// The name of a file that contains functions which will be compiled for
569 /// hotpatching. See -fms-secure-hotpatch-functions-file.
571
572 /// A list of functions which will be compiled for hotpatching.
573 /// See -fms-secure-hotpatch-functions-list.
574 std::vector<std::string> MSSecureHotPatchFunctionsList;
575
576public:
577 // Define accessors/mutators for code generation options of enumeration type.
578#define CODEGENOPT(Name, Bits, Default, Compatibility)
579#define ENUM_CODEGENOPT(Name, Type, Bits, Default, Compatibility) \
580 Type get##Name() const { return static_cast<Type>(Name); } \
581 void set##Name(Type Value) { Name = static_cast<unsigned>(Value); }
582#include "clang/Basic/CodeGenOptions.def"
583
585
586 const std::vector<std::string> &getNoBuiltinFuncs() const {
587 return NoBuiltinFuncs;
588 }
589
590 bool hasSjLjExceptions() const {
591 return getExceptionHandling() == ExceptionHandlingKind::SjLj;
592 }
593
594 bool hasSEHExceptions() const {
595 return getExceptionHandling() == ExceptionHandlingKind::WinEH;
596 }
597
598 bool hasDWARFExceptions() const {
599 return getExceptionHandling() == ExceptionHandlingKind::DwarfCFI;
600 }
601
602 bool hasWasmExceptions() const {
603 return getExceptionHandling() == ExceptionHandlingKind::Wasm;
604 }
605
606 /// Check if Clang profile instrumenation is on.
607 bool hasProfileClangInstr() const {
608 return getProfileInstr() ==
609 llvm::driver::ProfileInstrKind::ProfileClangInstr;
610 }
611
612 /// Check if IR level profile instrumentation is on.
613 bool hasProfileIRInstr() const {
614 return getProfileInstr() == llvm::driver::ProfileInstrKind::ProfileIRInstr;
615 }
616
617 /// Check if CS IR level profile instrumentation is on.
618 bool hasProfileCSIRInstr() const {
619 return getProfileInstr() ==
620 llvm::driver::ProfileInstrKind::ProfileCSIRInstr;
621 }
622
623 /// Check if any form of instrumentation is on.
624 bool hasProfileInstr() const {
625 return getProfileInstr() != llvm::driver::ProfileInstrKind::ProfileNone;
626 }
627
628 /// Check if Clang profile use is on.
629 bool hasProfileClangUse() const {
630 return getProfileUse() == llvm::driver::ProfileInstrKind::ProfileClangInstr;
631 }
632
633 /// Check if IR level profile use is on.
634 bool hasProfileIRUse() const {
635 return getProfileUse() == llvm::driver::ProfileInstrKind::ProfileIRInstr ||
636 getProfileUse() == llvm::driver::ProfileInstrKind::ProfileCSIRInstr;
637 }
638
639 /// Check if CSIR profile use is on.
640 bool hasProfileCSIRUse() const {
641 return getProfileUse() == llvm::driver::ProfileInstrKind::ProfileCSIRInstr;
642 }
643
644 /// Check if type and variable info should be emitted.
645 bool hasReducedDebugInfo() const {
646 return getDebugInfo() >= llvm::codegenoptions::DebugInfoConstructor;
647 }
648
649 /// Check if maybe unused type info should be emitted.
651 return getDebugInfo() >= llvm::codegenoptions::UnusedTypeInfo;
652 }
653
654 // Check if any one of SanitizeCoverage* is enabled.
655 bool hasSanitizeCoverage() const {
656 return SanitizeCoverageType || SanitizeCoverageIndirectCalls ||
657 SanitizeCoverageTraceCmp || SanitizeCoverageTraceLoads ||
658 SanitizeCoverageTraceStores || SanitizeCoverageControlFlow;
659 }
660
661 // Check if any one of SanitizeBinaryMetadata* is enabled.
663 return SanitizeBinaryMetadataCovered || SanitizeBinaryMetadataAtomics ||
664 SanitizeBinaryMetadataUAR;
665 }
666
667 /// Reset all of the options that are not considered when building a
668 /// module.
669 void resetNonModularOptions(StringRef ModuleFormat);
670
671 // Is the given function name one of the functions that can be replaced by the
672 // loader?
673 bool isLoaderReplaceableFunctionName(StringRef FuncName) const {
674 return llvm::is_contained(LoaderReplaceableFunctionNames, FuncName);
675 }
676
677 /// Are we building at -O1 or higher?
678 bool isOptimizedBuild() const { return OptimizationLevel > 0; }
679
680 /// When loading a bool from a storage unit larger than i1, should it
681 /// be converted to i1 by comparing to 0 or by truncating to i1?
683 switch (getLoadBoolFromMem()) {
685 return !isOptimizedBuild();
686
688 return false;
689
691 return true;
692 }
693 llvm_unreachable("Unknown BoolFromMem enum");
694 }
695};
696
697} // end namespace clang
698
699#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::ZeroCallUsedRegs::ZeroCallUsedRegsKind ZeroCallUsedRegsKind
llvm::codegenoptions::DebugInfoKind DebugInfoKind
llvm::DebuggerKind DebuggerKind
llvm::WinX64EHUnwindV2Mode WinX64EHUnwindV2Mode
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 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
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.
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.