[llvm] [llvm] clang-format llvm/TargetParser/Host.h (PR #143446)
Andrew Rogers via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 9 16:59:12 PDT 2025
https://github.com/andrurogerz updated https://github.com/llvm/llvm-project/pull/143446
>From e2f1144d7d0e9cb46c3324b0ac720e889671f2a0 Mon Sep 17 00:00:00 2001
From: Andrew Rogers <andrurogerz at gmail.com>
Date: Mon, 9 Jun 2025 14:44:37 -0700
Subject: [PATCH 1/2] [llvm] clang-format llvm/TargetParser/Host.h
---
llvm/include/llvm/TargetParser/Host.h | 106 +++++++++++++-------------
1 file changed, 53 insertions(+), 53 deletions(-)
diff --git a/llvm/include/llvm/TargetParser/Host.h b/llvm/include/llvm/TargetParser/Host.h
index a639b093f21bd..443f4f583b559 100644
--- a/llvm/include/llvm/TargetParser/Host.h
+++ b/llvm/include/llvm/TargetParser/Host.h
@@ -23,65 +23,65 @@ class raw_ostream;
namespace sys {
- /// getDefaultTargetTriple() - Return the default target triple the compiler
- /// has been configured to produce code for.
- ///
- /// The target triple is a string in the format of:
- /// CPU_TYPE-VENDOR-OPERATING_SYSTEM
- /// or
- /// CPU_TYPE-VENDOR-KERNEL-OPERATING_SYSTEM
- std::string getDefaultTargetTriple();
+/// getDefaultTargetTriple() - Return the default target triple the compiler
+/// has been configured to produce code for.
+///
+/// The target triple is a string in the format of:
+/// CPU_TYPE-VENDOR-OPERATING_SYSTEM
+/// or
+/// CPU_TYPE-VENDOR-KERNEL-OPERATING_SYSTEM
+std::string getDefaultTargetTriple();
- /// getProcessTriple() - Return an appropriate target triple for generating
- /// code to be loaded into the current process, e.g. when using the JIT.
- std::string getProcessTriple();
+/// getProcessTriple() - Return an appropriate target triple for generating
+/// code to be loaded into the current process, e.g. when using the JIT.
+std::string getProcessTriple();
- /// getHostCPUName - Get the LLVM name for the host CPU. The particular format
- /// of the name is target dependent, and suitable for passing as -mcpu to the
- /// target which matches the host.
- ///
- /// \return - The host CPU name, or empty if the CPU could not be determined.
- StringRef getHostCPUName();
+/// getHostCPUName - Get the LLVM name for the host CPU. The particular format
+/// of the name is target dependent, and suitable for passing as -mcpu to the
+/// target which matches the host.
+///
+/// \return - The host CPU name, or empty if the CPU could not be determined.
+StringRef getHostCPUName();
- /// getHostCPUFeatures - Get the LLVM names for the host CPU features.
- /// The particular format of the names are target dependent, and suitable for
- /// passing as -mattr to the target which matches the host.
- ///
- /// \return - A string map mapping feature names to either true (if enabled)
- /// or false (if disabled). This routine makes no guarantees about exactly
- /// which features may appear in this map, except that they are all valid LLVM
- /// feature names. The map can be empty, for example if feature detection
- /// fails.
- const StringMap<bool, MallocAllocator> getHostCPUFeatures();
+/// getHostCPUFeatures - Get the LLVM names for the host CPU features.
+/// The particular format of the names are target dependent, and suitable for
+/// passing as -mattr to the target which matches the host.
+///
+/// \return - A string map mapping feature names to either true (if enabled)
+/// or false (if disabled). This routine makes no guarantees about exactly
+/// which features may appear in this map, except that they are all valid LLVM
+/// feature names. The map can be empty, for example if feature detection
+/// fails.
+const StringMap<bool, MallocAllocator> getHostCPUFeatures();
- /// This is a function compatible with cl::AddExtraVersionPrinter, which adds
- /// info about the current target triple and detected CPU.
- void printDefaultTargetAndDetectedCPU(raw_ostream &OS);
+/// This is a function compatible with cl::AddExtraVersionPrinter, which adds
+/// info about the current target triple and detected CPU.
+void printDefaultTargetAndDetectedCPU(raw_ostream &OS);
- namespace detail {
- /// Helper functions to extract HostCPUName from /proc/cpuinfo on linux.
- StringRef getHostCPUNameForPowerPC(StringRef ProcCpuinfoContent);
- StringRef getHostCPUNameForARM(StringRef ProcCpuinfoContent);
- StringRef getHostCPUNameForS390x(StringRef ProcCpuinfoContent);
- StringRef getHostCPUNameForRISCV(StringRef ProcCpuinfoContent);
- StringRef getHostCPUNameForSPARC(StringRef ProcCpuinfoContent);
- StringRef getHostCPUNameForBPF();
+namespace detail {
+/// Helper functions to extract HostCPUName from /proc/cpuinfo on linux.
+StringRef getHostCPUNameForPowerPC(StringRef ProcCpuinfoContent);
+StringRef getHostCPUNameForARM(StringRef ProcCpuinfoContent);
+StringRef getHostCPUNameForS390x(StringRef ProcCpuinfoContent);
+StringRef getHostCPUNameForRISCV(StringRef ProcCpuinfoContent);
+StringRef getHostCPUNameForSPARC(StringRef ProcCpuinfoContent);
+StringRef getHostCPUNameForBPF();
- /// Helper functions to extract CPU details from CPUID on x86.
- namespace x86 {
- enum class VendorSignatures {
- UNKNOWN,
- GENUINE_INTEL,
- AUTHENTIC_AMD,
- };
+/// Helper functions to extract CPU details from CPUID on x86.
+namespace x86 {
+enum class VendorSignatures {
+ UNKNOWN,
+ GENUINE_INTEL,
+ AUTHENTIC_AMD,
+};
- /// Returns the host CPU's vendor.
- /// MaxLeaf: if a non-nullptr pointer is specified, the EAX value will be
- /// assigned to its pointee.
- VendorSignatures getVendorSignature(unsigned *MaxLeaf = nullptr);
- } // namespace x86
- }
-}
-}
+/// Returns the host CPU's vendor.
+/// MaxLeaf: if a non-nullptr pointer is specified, the EAX value will be
+/// assigned to its pointee.
+VendorSignatures getVendorSignature(unsigned *MaxLeaf = nullptr);
+} // namespace x86
+} // namespace detail
+} // namespace sys
+} // namespace llvm
#endif
>From e9d7bb69f6274a1ca3be2cabd91ad893f9d049b5 Mon Sep 17 00:00:00 2001
From: Andrew Rogers <andrurogerz at gmail.com>
Date: Mon, 9 Jun 2025 16:58:48 -0700
Subject: [PATCH 2/2] [llvm] clang-format llvm/Target/TargetOptions.h
---
llvm/include/llvm/Target/TargetOptions.h | 892 +++++++++++------------
1 file changed, 442 insertions(+), 450 deletions(-)
diff --git a/llvm/include/llvm/Target/TargetOptions.h b/llvm/include/llvm/Target/TargetOptions.h
index fd8dad4f6f791..10638a0ec902f 100644
--- a/llvm/include/llvm/Target/TargetOptions.h
+++ b/llvm/include/llvm/Target/TargetOptions.h
@@ -20,458 +20,450 @@
#include <memory>
namespace llvm {
- struct fltSemantics;
- class MachineFunction;
- class MemoryBuffer;
-
- namespace FloatABI {
- enum ABIType {
- Default, // Target-specific (either soft or hard depending on triple, etc).
- Soft, // Soft float.
- Hard // Hard float.
- };
- }
-
- namespace FPOpFusion {
- enum FPOpFusionMode {
- Fast, // Enable fusion of FP ops wherever it's profitable.
- Standard, // Only allow fusion of 'blessed' ops (currently just fmuladd).
- Strict // Never fuse FP-ops.
- };
- }
-
- namespace JumpTable {
- enum JumpTableType {
- Single, // Use a single table for all indirect jumptable calls.
- Arity, // Use one table per number of function parameters.
- Simplified, // Use one table per function type, with types projected
- // into 4 types: pointer to non-function, struct,
- // primitive, and function pointer.
- Full // Use one table per unique function type
- };
- }
-
- namespace ThreadModel {
- enum Model {
- POSIX, // POSIX Threads
- Single // Single Threaded Environment
- };
- }
-
- enum class BasicBlockSection {
- All, // Use Basic Block Sections for all basic blocks. A section
- // for every basic block can significantly bloat object file sizes.
- List, // Get list of functions & BBs from a file. Selectively enables
- // basic block sections for a subset of basic blocks which can be
- // used to control object size bloats from creating sections.
- Preset, // Similar to list but the blocks are identified by passes which
- // seek to use Basic Block Sections, e.g. MachineFunctionSplitter.
- // This option cannot be set via the command line.
- None // Do not use Basic Block Sections.
- };
-
- enum class EABI {
- Unknown,
- Default, // Default means not specified
- EABI4, // Target-specific (either 4, 5 or gnu depending on triple).
- EABI5,
- GNU
- };
-
- /// Identify a debugger for "tuning" the debug info.
+struct fltSemantics;
+class MachineFunction;
+class MemoryBuffer;
+
+namespace FloatABI {
+enum ABIType {
+ Default, // Target-specific (either soft or hard depending on triple, etc).
+ Soft, // Soft float.
+ Hard // Hard float.
+};
+}
+
+namespace FPOpFusion {
+enum FPOpFusionMode {
+ Fast, // Enable fusion of FP ops wherever it's profitable.
+ Standard, // Only allow fusion of 'blessed' ops (currently just fmuladd).
+ Strict // Never fuse FP-ops.
+};
+}
+
+namespace JumpTable {
+enum JumpTableType {
+ Single, // Use a single table for all indirect jumptable calls.
+ Arity, // Use one table per number of function parameters.
+ Simplified, // Use one table per function type, with types projected
+ // into 4 types: pointer to non-function, struct,
+ // primitive, and function pointer.
+ Full // Use one table per unique function type
+};
+}
+
+namespace ThreadModel {
+enum Model {
+ POSIX, // POSIX Threads
+ Single // Single Threaded Environment
+};
+}
+
+enum class BasicBlockSection {
+ All, // Use Basic Block Sections for all basic blocks. A section
+ // for every basic block can significantly bloat object file sizes.
+ List, // Get list of functions & BBs from a file. Selectively enables
+ // basic block sections for a subset of basic blocks which can be
+ // used to control object size bloats from creating sections.
+ Preset, // Similar to list but the blocks are identified by passes which
+ // seek to use Basic Block Sections, e.g. MachineFunctionSplitter.
+ // This option cannot be set via the command line.
+ None // Do not use Basic Block Sections.
+};
+
+enum class EABI {
+ Unknown,
+ Default, // Default means not specified
+ EABI4, // Target-specific (either 4, 5 or gnu depending on triple).
+ EABI5,
+ GNU
+};
+
+/// Identify a debugger for "tuning" the debug info.
+///
+/// The "debugger tuning" concept allows us to present a more intuitive
+/// interface that unpacks into different sets of defaults for the various
+/// individual feature-flag settings, that suit the preferences of the
+/// various debuggers. However, it's worth remembering that debuggers are
+/// not the only consumers of debug info, and some variations in DWARF might
+/// better be treated as target/platform issues. Fundamentally,
+/// o if the feature is useful (or not) to a particular debugger, regardless
+/// of the target, that's a tuning decision;
+/// o if the feature is useful (or not) on a particular platform, regardless
+/// of the debugger, that's a target decision.
+/// It's not impossible to see both factors in some specific case.
+enum class DebuggerKind {
+ Default, ///< No specific tuning requested.
+ GDB, ///< Tune debug info for gdb.
+ LLDB, ///< Tune debug info for lldb.
+ SCE, ///< Tune debug info for SCE targets (e.g. PS4).
+ DBX ///< Tune debug info for dbx.
+};
+
+/// Enable abort calls when global instruction selection fails to lower/select
+/// an instruction.
+enum class GlobalISelAbortMode {
+ Disable, // Disable the abort.
+ Enable, // Enable the abort.
+ DisableWithDiag // Disable the abort but emit a diagnostic on failure.
+};
+
+/// Indicates when and how the Swift async frame pointer bit should be set.
+enum class SwiftAsyncFramePointerMode {
+ /// Determine whether to set the bit statically or dynamically based
+ /// on the deployment target.
+ DeploymentBased,
+ /// Always set the bit.
+ Always,
+ /// Never set the bit.
+ Never,
+};
+
+/// \brief Enumeration value for AMDGPU code object version, which is the
+/// code object version times 100.
+enum CodeObjectVersionKind {
+ COV_None,
+ COV_2 = 200, // Unsupported.
+ COV_3 = 300, // Unsupported.
+ COV_4 = 400,
+ COV_5 = 500,
+ COV_6 = 600,
+};
+
+class TargetOptions {
+public:
+ TargetOptions()
+ : UnsafeFPMath(false), NoInfsFPMath(false), NoNaNsFPMath(false),
+ NoTrappingFPMath(true), NoSignedZerosFPMath(false),
+ ApproxFuncFPMath(false), EnableAIXExtendedAltivecABI(false),
+ HonorSignDependentRoundingFPMathOption(false), NoZerosInBSS(false),
+ GuaranteedTailCallOpt(false), StackSymbolOrdering(true),
+ EnableFastISel(false), EnableGlobalISel(false), UseInitArray(false),
+ DisableIntegratedAS(false), FunctionSections(false),
+ DataSections(false), IgnoreXCOFFVisibility(false),
+ XCOFFTracebackTable(true), UniqueSectionNames(true),
+ UniqueBasicBlockSectionNames(false), SeparateNamedSections(false),
+ TrapUnreachable(false), NoTrapAfterNoreturn(false), TLSSize(0),
+ EmulatedTLS(false), EnableTLSDESC(false), EnableIPRA(false),
+ EmitStackSizeSection(false), EnableMachineOutliner(false),
+ EnableMachineFunctionSplitter(false),
+ EnableStaticDataPartitioning(false), SupportsDefaultOutlining(false),
+ EmitAddrsig(false), BBAddrMap(false), EmitCallSiteInfo(false),
+ SupportsDebugEntryValues(false), EnableDebugEntryValues(false),
+ ValueTrackingVariableLocations(false), ForceDwarfFrameSection(false),
+ XRayFunctionIndex(true), DebugStrictDwarf(false), Hotpatch(false),
+ PPCGenScalarMASSEntries(false), JMCInstrument(false),
+ EnableCFIFixup(false), MisExpect(false), XCOFFReadOnlyPointers(false),
+ VerifyArgABICompliance(true),
+ FPDenormalMode(DenormalMode::IEEE, DenormalMode::IEEE) {}
+
+ /// DisableFramePointerElim - This returns true if frame pointer elimination
+ /// optimization should be disabled for the given machine function.
+ bool DisableFramePointerElim(const MachineFunction &MF) const;
+
+ /// FramePointerIsReserved - This returns true if the frame pointer must
+ /// always either point to a new frame record or be un-modified in the given
+ /// function.
+ bool FramePointerIsReserved(const MachineFunction &MF) const;
+
+ /// If greater than 0, override the default value of
+ /// MCAsmInfo::BinutilsVersion.
+ std::pair<int, int> BinutilsVersion{0, 0};
+
+ /// UnsafeFPMath - This flag is enabled when the
+ /// -enable-unsafe-fp-math flag is specified on the command line. When
+ /// this flag is off (the default), the code generator is not allowed to
+ /// produce results that are "less precise" than IEEE allows. This includes
+ /// use of X86 instructions like FSIN and FCOS instead of libcalls.
+ unsigned UnsafeFPMath : 1;
+
+ /// NoInfsFPMath - This flag is enabled when the
+ /// -enable-no-infs-fp-math flag is specified on the command line. When
+ /// this flag is off (the default), the code generator is not allowed to
+ /// assume the FP arithmetic arguments and results are never +-Infs.
+ unsigned NoInfsFPMath : 1;
+
+ /// NoNaNsFPMath - This flag is enabled when the
+ /// -enable-no-nans-fp-math flag is specified on the command line. When
+ /// this flag is off (the default), the code generator is not allowed to
+ /// assume the FP arithmetic arguments and results are never NaNs.
+ unsigned NoNaNsFPMath : 1;
+
+ /// NoTrappingFPMath - This flag is enabled when the
+ /// -enable-no-trapping-fp-math is specified on the command line. This
+ /// specifies that there are no trap handlers to handle exceptions.
+ unsigned NoTrappingFPMath : 1;
+
+ /// NoSignedZerosFPMath - This flag is enabled when the
+ /// -enable-no-signed-zeros-fp-math is specified on the command line. This
+ /// specifies that optimizations are allowed to treat the sign of a zero
+ /// argument or result as insignificant.
+ unsigned NoSignedZerosFPMath : 1;
+
+ /// ApproxFuncFPMath - This flag is enabled when the
+ /// -enable-approx-func-fp-math is specified on the command line. This
+ /// specifies that optimizations are allowed to substitute math functions
+ /// with approximate calculations
+ unsigned ApproxFuncFPMath : 1;
+
+ /// EnableAIXExtendedAltivecABI - This flag returns true when -vec-extabi is
+ /// specified. The code generator is then able to use both volatile and
+ /// nonvolitle vector registers. When false, the code generator only uses
+ /// volatile vector registers which is the default setting on AIX.
+ unsigned EnableAIXExtendedAltivecABI : 1;
+
+ /// HonorSignDependentRoundingFPMath - This returns true when the
+ /// -enable-sign-dependent-rounding-fp-math is specified. If this returns
+ /// false (the default), the code generator is allowed to assume that the
+ /// rounding behavior is the default (round-to-zero for all floating point
+ /// to integer conversions, and round-to-nearest for all other arithmetic
+ /// truncations). If this is enabled (set to true), the code generator must
+ /// assume that the rounding mode may dynamically change.
+ unsigned HonorSignDependentRoundingFPMathOption : 1;
+ bool HonorSignDependentRoundingFPMath() const;
+
+ /// NoZerosInBSS - By default some codegens place zero-initialized data to
+ /// .bss section. This flag disables such behaviour (necessary, e.g. for
+ /// crt*.o compiling).
+ unsigned NoZerosInBSS : 1;
+
+ /// GuaranteedTailCallOpt - This flag is enabled when -tailcallopt is
+ /// specified on the commandline. When the flag is on, participating targets
+ /// will perform tail call optimization on all calls which use the fastcc
+ /// calling convention and which satisfy certain target-independent
+ /// criteria (being at the end of a function, having the same return type
+ /// as their parent function, etc.), using an alternate ABI if necessary.
+ unsigned GuaranteedTailCallOpt : 1;
+
+ /// StackSymbolOrdering - When true, this will allow CodeGen to order
+ /// the local stack symbols (for code size, code locality, or any other
+ /// heuristics). When false, the local symbols are left in whatever order
+ /// they were generated. Default is true.
+ unsigned StackSymbolOrdering : 1;
+
+ /// EnableFastISel - This flag enables fast-path instruction selection
+ /// which trades away generated code quality in favor of reducing
+ /// compile time.
+ unsigned EnableFastISel : 1;
+
+ /// EnableGlobalISel - This flag enables global instruction selection.
+ unsigned EnableGlobalISel : 1;
+
+ /// EnableGlobalISelAbort - Control abort behaviour when global instruction
+ /// selection fails to lower/select an instruction.
+ GlobalISelAbortMode GlobalISelAbort = GlobalISelAbortMode::Enable;
+
+ /// Control when and how the Swift async frame pointer bit should
+ /// be set.
+ SwiftAsyncFramePointerMode SwiftAsyncFramePointer =
+ SwiftAsyncFramePointerMode::Always;
+
+ /// UseInitArray - Use .init_array instead of .ctors for static
+ /// constructors.
+ unsigned UseInitArray : 1;
+
+ /// Disable the integrated assembler.
+ unsigned DisableIntegratedAS : 1;
+
+ /// Emit functions into separate sections.
+ unsigned FunctionSections : 1;
+
+ /// Emit data into separate sections.
+ unsigned DataSections : 1;
+
+ /// Do not emit visibility attribute for xcoff.
+ unsigned IgnoreXCOFFVisibility : 1;
+
+ /// Emit XCOFF traceback table.
+ unsigned XCOFFTracebackTable : 1;
+
+ unsigned UniqueSectionNames : 1;
+
+ /// Use unique names for basic block sections.
+ unsigned UniqueBasicBlockSectionNames : 1;
+
+ /// Emit named sections with the same name into different sections.
+ unsigned SeparateNamedSections : 1;
+
+ /// Emit target-specific trap instruction for 'unreachable' IR instructions.
+ unsigned TrapUnreachable : 1;
+
+ /// Do not emit a trap instruction for 'unreachable' IR instructions behind
+ /// noreturn calls, even if TrapUnreachable is true.
+ unsigned NoTrapAfterNoreturn : 1;
+
+ /// Bit size of immediate TLS offsets (0 == use the default).
+ unsigned TLSSize : 8;
+
+ /// EmulatedTLS - This flag enables emulated TLS model, using emutls
+ /// function in the runtime library..
+ unsigned EmulatedTLS : 1;
+
+ /// EnableTLSDESC - This flag enables TLS Descriptors.
+ unsigned EnableTLSDESC : 1;
+
+ /// This flag enables InterProcedural Register Allocation (IPRA).
+ unsigned EnableIPRA : 1;
+
+ /// Emit section containing metadata on function stack sizes.
+ unsigned EmitStackSizeSection : 1;
+
+ /// Enables the MachineOutliner pass.
+ unsigned EnableMachineOutliner : 1;
+
+ /// Enables the MachineFunctionSplitter pass.
+ unsigned EnableMachineFunctionSplitter : 1;
+
+ /// Enables the StaticDataSplitter pass.
+ unsigned EnableStaticDataPartitioning : 1;
+
+ /// Set if the target supports default outlining behaviour.
+ unsigned SupportsDefaultOutlining : 1;
+
+ /// Emit address-significance table.
+ unsigned EmitAddrsig : 1;
+
+ // Emit the SHT_LLVM_BB_ADDR_MAP section containing basic block address
+ // which can be used to map virtual addresses to machine basic blocks.
+ unsigned BBAddrMap : 1;
+
+ /// Emit basic blocks into separate sections.
+ BasicBlockSection BBSections = BasicBlockSection::None;
+
+ /// Memory Buffer that contains information on sampled basic blocks and used
+ /// to selectively generate basic block sections.
+ std::shared_ptr<MemoryBuffer> BBSectionsFuncListBuf;
+
+ /// The flag enables call site info production. It is used only for debug
+ /// info, and it is restricted only to optimized code. This can be used for
+ /// something else, so that should be controlled in the frontend.
+ unsigned EmitCallSiteInfo : 1;
+ /// Set if the target supports the debug entry values by default.
+ unsigned SupportsDebugEntryValues : 1;
+ /// When set to true, the EnableDebugEntryValues option forces production
+ /// of debug entry values even if the target does not officially support
+ /// it. Useful for testing purposes only. This flag should never be checked
+ /// directly, always use \ref ShouldEmitDebugEntryValues instead.
+ unsigned EnableDebugEntryValues : 1;
+ /// NOTE: There are targets that still do not support the debug entry values
+ /// production.
+ bool ShouldEmitDebugEntryValues() const;
+
+ // When set to true, use experimental new debug variable location tracking,
+ // which seeks to follow the values of variables rather than their location,
+ // post isel.
+ unsigned ValueTrackingVariableLocations : 1;
+
+ /// Emit DWARF debug frame section.
+ unsigned ForceDwarfFrameSection : 1;
+
+ /// Emit XRay Function Index section
+ unsigned XRayFunctionIndex : 1;
+
+ /// When set to true, don't use DWARF extensions in later DWARF versions.
+ /// By default, it is set to false.
+ unsigned DebugStrictDwarf : 1;
+
+ /// Emit the hotpatch flag in CodeView debug.
+ unsigned Hotpatch : 1;
+
+ /// Enables scalar MASS conversions
+ unsigned PPCGenScalarMASSEntries : 1;
+
+ /// Enable JustMyCode instrumentation.
+ unsigned JMCInstrument : 1;
+
+ /// Enable the CFIFixup pass.
+ unsigned EnableCFIFixup : 1;
+
+ /// When set to true, enable MisExpect Diagnostics
+ /// By default, it is set to false
+ unsigned MisExpect : 1;
+
+ /// When set to true, const objects with relocatable address values are put
+ /// into the RO data section.
+ unsigned XCOFFReadOnlyPointers : 1;
+
+ /// When set to true, call/return argument extensions of narrow integers
+ /// are verified in the target backend if it cares about them. This is
+ /// not done with internal tools like llc that run many tests that ignore
+ /// (lack) these extensions.
+ unsigned VerifyArgABICompliance : 1;
+
+ /// Name of the stack usage file (i.e., .su file) if user passes
+ /// -fstack-usage. If empty, it can be implied that -fstack-usage is not
+ /// passed on the command line.
+ std::string StackUsageOutput;
+
+ /// If greater than 0, override TargetLoweringBase::PrefLoopAlignment.
+ unsigned LoopAlignment = 0;
+
+ /// FloatABIType - This setting is set by -float-abi=xxx option is specfied
+ /// on the command line. This setting may either be Default, Soft, or Hard.
+ /// Default selects the target's default behavior. Soft selects the ABI for
+ /// software floating point, but does not indicate that FP hardware may not
+ /// be used. Such a combination is unfortunately popular (e.g.
+ /// arm-apple-darwin). Hard presumes that the normal FP ABI is used.
+ FloatABI::ABIType FloatABIType = FloatABI::Default;
+
+ /// AllowFPOpFusion - This flag is set by the -fp-contract=xxx option.
+ /// This controls the creation of fused FP ops that store intermediate
+ /// results in higher precision than IEEE allows (E.g. FMAs).
///
- /// The "debugger tuning" concept allows us to present a more intuitive
- /// interface that unpacks into different sets of defaults for the various
- /// individual feature-flag settings, that suit the preferences of the
- /// various debuggers. However, it's worth remembering that debuggers are
- /// not the only consumers of debug info, and some variations in DWARF might
- /// better be treated as target/platform issues. Fundamentally,
- /// o if the feature is useful (or not) to a particular debugger, regardless
- /// of the target, that's a tuning decision;
- /// o if the feature is useful (or not) on a particular platform, regardless
- /// of the debugger, that's a target decision.
- /// It's not impossible to see both factors in some specific case.
- enum class DebuggerKind {
- Default, ///< No specific tuning requested.
- GDB, ///< Tune debug info for gdb.
- LLDB, ///< Tune debug info for lldb.
- SCE, ///< Tune debug info for SCE targets (e.g. PS4).
- DBX ///< Tune debug info for dbx.
- };
-
- /// Enable abort calls when global instruction selection fails to lower/select
- /// an instruction.
- enum class GlobalISelAbortMode {
- Disable, // Disable the abort.
- Enable, // Enable the abort.
- DisableWithDiag // Disable the abort but emit a diagnostic on failure.
- };
-
- /// Indicates when and how the Swift async frame pointer bit should be set.
- enum class SwiftAsyncFramePointerMode {
- /// Determine whether to set the bit statically or dynamically based
- /// on the deployment target.
- DeploymentBased,
- /// Always set the bit.
- Always,
- /// Never set the bit.
- Never,
- };
-
- /// \brief Enumeration value for AMDGPU code object version, which is the
- /// code object version times 100.
- enum CodeObjectVersionKind {
- COV_None,
- COV_2 = 200, // Unsupported.
- COV_3 = 300, // Unsupported.
- COV_4 = 400,
- COV_5 = 500,
- COV_6 = 600,
- };
-
- class TargetOptions {
- public:
- TargetOptions()
- : UnsafeFPMath(false), NoInfsFPMath(false), NoNaNsFPMath(false),
- NoTrappingFPMath(true), NoSignedZerosFPMath(false),
- ApproxFuncFPMath(false), EnableAIXExtendedAltivecABI(false),
- HonorSignDependentRoundingFPMathOption(false), NoZerosInBSS(false),
- GuaranteedTailCallOpt(false), StackSymbolOrdering(true),
- EnableFastISel(false), EnableGlobalISel(false), UseInitArray(false),
- DisableIntegratedAS(false), FunctionSections(false),
- DataSections(false), IgnoreXCOFFVisibility(false),
- XCOFFTracebackTable(true), UniqueSectionNames(true),
- UniqueBasicBlockSectionNames(false), SeparateNamedSections(false),
- TrapUnreachable(false), NoTrapAfterNoreturn(false), TLSSize(0),
- EmulatedTLS(false), EnableTLSDESC(false), EnableIPRA(false),
- EmitStackSizeSection(false), EnableMachineOutliner(false),
- EnableMachineFunctionSplitter(false),
- EnableStaticDataPartitioning(false), SupportsDefaultOutlining(false),
- EmitAddrsig(false), BBAddrMap(false), EmitCallSiteInfo(false),
- SupportsDebugEntryValues(false), EnableDebugEntryValues(false),
- ValueTrackingVariableLocations(false), ForceDwarfFrameSection(false),
- XRayFunctionIndex(true), DebugStrictDwarf(false), Hotpatch(false),
- PPCGenScalarMASSEntries(false), JMCInstrument(false),
- EnableCFIFixup(false), MisExpect(false), XCOFFReadOnlyPointers(false),
- VerifyArgABICompliance(true),
- FPDenormalMode(DenormalMode::IEEE, DenormalMode::IEEE) {}
-
- /// DisableFramePointerElim - This returns true if frame pointer elimination
- /// optimization should be disabled for the given machine function.
- bool DisableFramePointerElim(const MachineFunction &MF) const;
-
- /// FramePointerIsReserved - This returns true if the frame pointer must
- /// always either point to a new frame record or be un-modified in the given
- /// function.
- bool FramePointerIsReserved(const MachineFunction &MF) const;
-
- /// If greater than 0, override the default value of
- /// MCAsmInfo::BinutilsVersion.
- std::pair<int, int> BinutilsVersion{0, 0};
-
- /// UnsafeFPMath - This flag is enabled when the
- /// -enable-unsafe-fp-math flag is specified on the command line. When
- /// this flag is off (the default), the code generator is not allowed to
- /// produce results that are "less precise" than IEEE allows. This includes
- /// use of X86 instructions like FSIN and FCOS instead of libcalls.
- unsigned UnsafeFPMath : 1;
-
- /// NoInfsFPMath - This flag is enabled when the
- /// -enable-no-infs-fp-math flag is specified on the command line. When
- /// this flag is off (the default), the code generator is not allowed to
- /// assume the FP arithmetic arguments and results are never +-Infs.
- unsigned NoInfsFPMath : 1;
-
- /// NoNaNsFPMath - This flag is enabled when the
- /// -enable-no-nans-fp-math flag is specified on the command line. When
- /// this flag is off (the default), the code generator is not allowed to
- /// assume the FP arithmetic arguments and results are never NaNs.
- unsigned NoNaNsFPMath : 1;
-
- /// NoTrappingFPMath - This flag is enabled when the
- /// -enable-no-trapping-fp-math is specified on the command line. This
- /// specifies that there are no trap handlers to handle exceptions.
- unsigned NoTrappingFPMath : 1;
-
- /// NoSignedZerosFPMath - This flag is enabled when the
- /// -enable-no-signed-zeros-fp-math is specified on the command line. This
- /// specifies that optimizations are allowed to treat the sign of a zero
- /// argument or result as insignificant.
- unsigned NoSignedZerosFPMath : 1;
-
- /// ApproxFuncFPMath - This flag is enabled when the
- /// -enable-approx-func-fp-math is specified on the command line. This
- /// specifies that optimizations are allowed to substitute math functions
- /// with approximate calculations
- unsigned ApproxFuncFPMath : 1;
-
- /// EnableAIXExtendedAltivecABI - This flag returns true when -vec-extabi is
- /// specified. The code generator is then able to use both volatile and
- /// nonvolitle vector registers. When false, the code generator only uses
- /// volatile vector registers which is the default setting on AIX.
- unsigned EnableAIXExtendedAltivecABI : 1;
-
- /// HonorSignDependentRoundingFPMath - This returns true when the
- /// -enable-sign-dependent-rounding-fp-math is specified. If this returns
- /// false (the default), the code generator is allowed to assume that the
- /// rounding behavior is the default (round-to-zero for all floating point
- /// to integer conversions, and round-to-nearest for all other arithmetic
- /// truncations). If this is enabled (set to true), the code generator must
- /// assume that the rounding mode may dynamically change.
- unsigned HonorSignDependentRoundingFPMathOption : 1;
- bool HonorSignDependentRoundingFPMath() const;
-
- /// NoZerosInBSS - By default some codegens place zero-initialized data to
- /// .bss section. This flag disables such behaviour (necessary, e.g. for
- /// crt*.o compiling).
- unsigned NoZerosInBSS : 1;
-
- /// GuaranteedTailCallOpt - This flag is enabled when -tailcallopt is
- /// specified on the commandline. When the flag is on, participating targets
- /// will perform tail call optimization on all calls which use the fastcc
- /// calling convention and which satisfy certain target-independent
- /// criteria (being at the end of a function, having the same return type
- /// as their parent function, etc.), using an alternate ABI if necessary.
- unsigned GuaranteedTailCallOpt : 1;
-
- /// StackSymbolOrdering - When true, this will allow CodeGen to order
- /// the local stack symbols (for code size, code locality, or any other
- /// heuristics). When false, the local symbols are left in whatever order
- /// they were generated. Default is true.
- unsigned StackSymbolOrdering : 1;
-
- /// EnableFastISel - This flag enables fast-path instruction selection
- /// which trades away generated code quality in favor of reducing
- /// compile time.
- unsigned EnableFastISel : 1;
-
- /// EnableGlobalISel - This flag enables global instruction selection.
- unsigned EnableGlobalISel : 1;
-
- /// EnableGlobalISelAbort - Control abort behaviour when global instruction
- /// selection fails to lower/select an instruction.
- GlobalISelAbortMode GlobalISelAbort = GlobalISelAbortMode::Enable;
-
- /// Control when and how the Swift async frame pointer bit should
- /// be set.
- SwiftAsyncFramePointerMode SwiftAsyncFramePointer =
- SwiftAsyncFramePointerMode::Always;
-
- /// UseInitArray - Use .init_array instead of .ctors for static
- /// constructors.
- unsigned UseInitArray : 1;
-
- /// Disable the integrated assembler.
- unsigned DisableIntegratedAS : 1;
-
- /// Emit functions into separate sections.
- unsigned FunctionSections : 1;
-
- /// Emit data into separate sections.
- unsigned DataSections : 1;
-
- /// Do not emit visibility attribute for xcoff.
- unsigned IgnoreXCOFFVisibility : 1;
-
- /// Emit XCOFF traceback table.
- unsigned XCOFFTracebackTable : 1;
-
- unsigned UniqueSectionNames : 1;
-
- /// Use unique names for basic block sections.
- unsigned UniqueBasicBlockSectionNames : 1;
-
- /// Emit named sections with the same name into different sections.
- unsigned SeparateNamedSections : 1;
-
- /// Emit target-specific trap instruction for 'unreachable' IR instructions.
- unsigned TrapUnreachable : 1;
-
- /// Do not emit a trap instruction for 'unreachable' IR instructions behind
- /// noreturn calls, even if TrapUnreachable is true.
- unsigned NoTrapAfterNoreturn : 1;
-
- /// Bit size of immediate TLS offsets (0 == use the default).
- unsigned TLSSize : 8;
-
- /// EmulatedTLS - This flag enables emulated TLS model, using emutls
- /// function in the runtime library..
- unsigned EmulatedTLS : 1;
-
- /// EnableTLSDESC - This flag enables TLS Descriptors.
- unsigned EnableTLSDESC : 1;
-
- /// This flag enables InterProcedural Register Allocation (IPRA).
- unsigned EnableIPRA : 1;
-
- /// Emit section containing metadata on function stack sizes.
- unsigned EmitStackSizeSection : 1;
-
- /// Enables the MachineOutliner pass.
- unsigned EnableMachineOutliner : 1;
-
- /// Enables the MachineFunctionSplitter pass.
- unsigned EnableMachineFunctionSplitter : 1;
-
- /// Enables the StaticDataSplitter pass.
- unsigned EnableStaticDataPartitioning : 1;
-
- /// Set if the target supports default outlining behaviour.
- unsigned SupportsDefaultOutlining : 1;
-
- /// Emit address-significance table.
- unsigned EmitAddrsig : 1;
-
- // Emit the SHT_LLVM_BB_ADDR_MAP section containing basic block address
- // which can be used to map virtual addresses to machine basic blocks.
- unsigned BBAddrMap : 1;
-
- /// Emit basic blocks into separate sections.
- BasicBlockSection BBSections = BasicBlockSection::None;
-
- /// Memory Buffer that contains information on sampled basic blocks and used
- /// to selectively generate basic block sections.
- std::shared_ptr<MemoryBuffer> BBSectionsFuncListBuf;
-
- /// The flag enables call site info production. It is used only for debug
- /// info, and it is restricted only to optimized code. This can be used for
- /// something else, so that should be controlled in the frontend.
- unsigned EmitCallSiteInfo : 1;
- /// Set if the target supports the debug entry values by default.
- unsigned SupportsDebugEntryValues : 1;
- /// When set to true, the EnableDebugEntryValues option forces production
- /// of debug entry values even if the target does not officially support
- /// it. Useful for testing purposes only. This flag should never be checked
- /// directly, always use \ref ShouldEmitDebugEntryValues instead.
- unsigned EnableDebugEntryValues : 1;
- /// NOTE: There are targets that still do not support the debug entry values
- /// production.
- bool ShouldEmitDebugEntryValues() const;
-
- // When set to true, use experimental new debug variable location tracking,
- // which seeks to follow the values of variables rather than their location,
- // post isel.
- unsigned ValueTrackingVariableLocations : 1;
-
- /// Emit DWARF debug frame section.
- unsigned ForceDwarfFrameSection : 1;
-
- /// Emit XRay Function Index section
- unsigned XRayFunctionIndex : 1;
-
- /// When set to true, don't use DWARF extensions in later DWARF versions.
- /// By default, it is set to false.
- unsigned DebugStrictDwarf : 1;
+ /// Fast mode - allows formation of fused FP ops whenever they're
+ /// profitable.
+ /// Standard mode - allow fusion only for 'blessed' FP ops. At present the
+ /// only blessed op is the fmuladd intrinsic. In the future more blessed ops
+ /// may be added.
+ /// Strict mode - allow fusion only if/when it can be proven that the excess
+ /// precision won't effect the result.
+ ///
+ /// Note: This option only controls formation of fused ops by the
+ /// optimizers. Fused operations that are explicitly specified (e.g. FMA
+ /// via the llvm.fma.* intrinsic) will always be honored, regardless of
+ /// the value of this option.
+ FPOpFusion::FPOpFusionMode AllowFPOpFusion = FPOpFusion::Standard;
+
+ /// ThreadModel - This flag specifies the type of threading model to assume
+ /// for things like atomics
+ ThreadModel::Model ThreadModel = ThreadModel::POSIX;
+
+ /// EABIVersion - This flag specifies the EABI version
+ EABI EABIVersion = EABI::Default;
+
+ /// Which debugger to tune for.
+ DebuggerKind DebuggerTuning = DebuggerKind::Default;
+
+private:
+ /// Flushing mode to assume in default FP environment.
+ DenormalMode FPDenormalMode;
+
+ /// Flushing mode to assume in default FP environment, for float/vector of
+ /// float.
+ DenormalMode FP32DenormalMode;
+
+public:
+ void setFPDenormalMode(DenormalMode Mode) { FPDenormalMode = Mode; }
+
+ void setFP32DenormalMode(DenormalMode Mode) { FP32DenormalMode = Mode; }
+
+ DenormalMode getRawFPDenormalMode() const { return FPDenormalMode; }
+
+ DenormalMode getRawFP32DenormalMode() const { return FP32DenormalMode; }
+
+ DenormalMode getDenormalMode(const fltSemantics &FPType) const;
+
+ /// What exception model to use
+ ExceptionHandling ExceptionModel = ExceptionHandling::None;
+
+ /// Machine level options.
+ MCTargetOptions MCOptions;
- /// Emit the hotpatch flag in CodeView debug.
- unsigned Hotpatch : 1;
+ /// Stores the filename/path of the final .o/.obj file, to be written in the
+ /// debug information. This is used for emitting the CodeView S_OBJNAME
+ /// record.
+ std::string ObjectFilenameForDebug;
+};
- /// Enables scalar MASS conversions
- unsigned PPCGenScalarMASSEntries : 1;
-
- /// Enable JustMyCode instrumentation.
- unsigned JMCInstrument : 1;
-
- /// Enable the CFIFixup pass.
- unsigned EnableCFIFixup : 1;
-
- /// When set to true, enable MisExpect Diagnostics
- /// By default, it is set to false
- unsigned MisExpect : 1;
-
- /// When set to true, const objects with relocatable address values are put
- /// into the RO data section.
- unsigned XCOFFReadOnlyPointers : 1;
-
- /// When set to true, call/return argument extensions of narrow integers
- /// are verified in the target backend if it cares about them. This is
- /// not done with internal tools like llc that run many tests that ignore
- /// (lack) these extensions.
- unsigned VerifyArgABICompliance : 1;
-
- /// Name of the stack usage file (i.e., .su file) if user passes
- /// -fstack-usage. If empty, it can be implied that -fstack-usage is not
- /// passed on the command line.
- std::string StackUsageOutput;
-
- /// If greater than 0, override TargetLoweringBase::PrefLoopAlignment.
- unsigned LoopAlignment = 0;
-
- /// FloatABIType - This setting is set by -float-abi=xxx option is specfied
- /// on the command line. This setting may either be Default, Soft, or Hard.
- /// Default selects the target's default behavior. Soft selects the ABI for
- /// software floating point, but does not indicate that FP hardware may not
- /// be used. Such a combination is unfortunately popular (e.g.
- /// arm-apple-darwin). Hard presumes that the normal FP ABI is used.
- FloatABI::ABIType FloatABIType = FloatABI::Default;
-
- /// AllowFPOpFusion - This flag is set by the -fp-contract=xxx option.
- /// This controls the creation of fused FP ops that store intermediate
- /// results in higher precision than IEEE allows (E.g. FMAs).
- ///
- /// Fast mode - allows formation of fused FP ops whenever they're
- /// profitable.
- /// Standard mode - allow fusion only for 'blessed' FP ops. At present the
- /// only blessed op is the fmuladd intrinsic. In the future more blessed ops
- /// may be added.
- /// Strict mode - allow fusion only if/when it can be proven that the excess
- /// precision won't effect the result.
- ///
- /// Note: This option only controls formation of fused ops by the
- /// optimizers. Fused operations that are explicitly specified (e.g. FMA
- /// via the llvm.fma.* intrinsic) will always be honored, regardless of
- /// the value of this option.
- FPOpFusion::FPOpFusionMode AllowFPOpFusion = FPOpFusion::Standard;
-
- /// ThreadModel - This flag specifies the type of threading model to assume
- /// for things like atomics
- ThreadModel::Model ThreadModel = ThreadModel::POSIX;
-
- /// EABIVersion - This flag specifies the EABI version
- EABI EABIVersion = EABI::Default;
-
- /// Which debugger to tune for.
- DebuggerKind DebuggerTuning = DebuggerKind::Default;
-
- private:
- /// Flushing mode to assume in default FP environment.
- DenormalMode FPDenormalMode;
-
- /// Flushing mode to assume in default FP environment, for float/vector of
- /// float.
- DenormalMode FP32DenormalMode;
-
- public:
- void setFPDenormalMode(DenormalMode Mode) {
- FPDenormalMode = Mode;
- }
-
- void setFP32DenormalMode(DenormalMode Mode) {
- FP32DenormalMode = Mode;
- }
-
- DenormalMode getRawFPDenormalMode() const {
- return FPDenormalMode;
- }
-
- DenormalMode getRawFP32DenormalMode() const {
- return FP32DenormalMode;
- }
-
- DenormalMode getDenormalMode(const fltSemantics &FPType) const;
-
- /// What exception model to use
- ExceptionHandling ExceptionModel = ExceptionHandling::None;
-
- /// Machine level options.
- MCTargetOptions MCOptions;
-
- /// Stores the filename/path of the final .o/.obj file, to be written in the
- /// debug information. This is used for emitting the CodeView S_OBJNAME
- /// record.
- std::string ObjectFilenameForDebug;
- };
-
-} // End llvm namespace
+} // namespace llvm
#endif
More information about the llvm-commits
mailing list