| 1 | //===-- llvm/Target/TargetOptions.h - Target Options ------------*- 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 command line option flags that are shared across various | 
| 10 | // targets. | 
| 11 | // | 
| 12 | //===----------------------------------------------------------------------===// | 
| 13 |  | 
| 14 | #ifndef LLVM_TARGET_TARGETOPTIONS_H | 
| 15 | #define LLVM_TARGET_TARGETOPTIONS_H | 
| 16 |  | 
| 17 | #include "llvm/ADT/FloatingPointMode.h" | 
| 18 | #include "llvm/MC/MCTargetOptions.h" | 
| 19 |  | 
| 20 | #include <memory> | 
| 21 |  | 
| 22 | namespace llvm { | 
| 23 |   struct fltSemantics; | 
| 24 |   class MachineFunction; | 
| 25 |   class MemoryBuffer; | 
| 26 |  | 
| 27 |   namespace FloatABI { | 
| 28 |     enum ABIType { | 
| 29 |       Default, // Target-specific (either soft or hard depending on triple, etc). | 
| 30 |       Soft,    // Soft float. | 
| 31 |       Hard     // Hard float. | 
| 32 |     }; | 
| 33 |   } | 
| 34 |  | 
| 35 |   namespace FPOpFusion { | 
| 36 |     enum FPOpFusionMode { | 
| 37 |       Fast,     // Enable fusion of FP ops wherever it's profitable. | 
| 38 |       Standard, // Only allow fusion of 'blessed' ops (currently just fmuladd). | 
| 39 |       Strict    // Never fuse FP-ops. | 
| 40 |     }; | 
| 41 |   } | 
| 42 |  | 
| 43 |   namespace JumpTable { | 
| 44 |     enum JumpTableType { | 
| 45 |       Single,          // Use a single table for all indirect jumptable calls. | 
| 46 |       Arity,           // Use one table per number of function parameters. | 
| 47 |       Simplified,      // Use one table per function type, with types projected | 
| 48 |                        // into 4 types: pointer to non-function, struct, | 
| 49 |                        // primitive, and function pointer. | 
| 50 |       Full             // Use one table per unique function type | 
| 51 |     }; | 
| 52 |   } | 
| 53 |  | 
| 54 |   namespace ThreadModel { | 
| 55 |     enum Model { | 
| 56 |       POSIX,  // POSIX Threads | 
| 57 |       Single  // Single Threaded Environment | 
| 58 |     }; | 
| 59 |   } | 
| 60 |  | 
| 61 |   enum class BasicBlockSection { | 
| 62 |     All,    // Use Basic Block Sections for all basic blocks.  A section | 
| 63 |             // for every basic block can significantly bloat object file sizes. | 
| 64 |     List,   // Get list of functions & BBs from a file. Selectively enables | 
| 65 |             // basic block sections for a subset of basic blocks which can be | 
| 66 |             // used to control object size bloats from creating sections. | 
| 67 |     Labels, // Do not use Basic Block Sections but label basic blocks.  This | 
| 68 |             // is useful when associating profile counts from virtual addresses | 
| 69 |             // to basic blocks. | 
| 70 |     Preset, // Similar to list but the blocks are identified by passes which | 
| 71 |             // seek to use Basic Block Sections, e.g. MachineFunctionSplitter. | 
| 72 |             // This option cannot be set via the command line. | 
| 73 |     None    // Do not use Basic Block Sections. | 
| 74 |   }; | 
| 75 |  | 
| 76 |   enum class EABI { | 
| 77 |     Unknown, | 
| 78 |     Default, // Default means not specified | 
| 79 |     EABI4,   // Target-specific (either 4, 5 or gnu depending on triple). | 
| 80 |     EABI5, | 
| 81 |     GNU | 
| 82 |   }; | 
| 83 |  | 
| 84 |   /// Identify a debugger for "tuning" the debug info. | 
| 85 |   /// | 
| 86 |   /// The "debugger tuning" concept allows us to present a more intuitive | 
| 87 |   /// interface that unpacks into different sets of defaults for the various | 
| 88 |   /// individual feature-flag settings, that suit the preferences of the | 
| 89 |   /// various debuggers.  However, it's worth remembering that debuggers are | 
| 90 |   /// not the only consumers of debug info, and some variations in DWARF might | 
| 91 |   /// better be treated as target/platform issues. Fundamentally, | 
| 92 |   /// o if the feature is useful (or not) to a particular debugger, regardless | 
| 93 |   ///   of the target, that's a tuning decision; | 
| 94 |   /// o if the feature is useful (or not) on a particular platform, regardless | 
| 95 |   ///   of the debugger, that's a target decision. | 
| 96 |   /// It's not impossible to see both factors in some specific case. | 
| 97 |   enum class DebuggerKind { | 
| 98 |     Default, ///< No specific tuning requested. | 
| 99 |     GDB,     ///< Tune debug info for gdb. | 
| 100 |     LLDB,    ///< Tune debug info for lldb. | 
| 101 |     SCE,     ///< Tune debug info for SCE targets (e.g. PS4). | 
| 102 |     DBX      ///< Tune debug info for dbx. | 
| 103 |   }; | 
| 104 |  | 
| 105 |   /// Enable abort calls when global instruction selection fails to lower/select | 
| 106 |   /// an instruction. | 
| 107 |   enum class GlobalISelAbortMode { | 
| 108 |     Disable,        // Disable the abort. | 
| 109 |     Enable,         // Enable the abort. | 
| 110 |     DisableWithDiag // Disable the abort but emit a diagnostic on failure. | 
| 111 |   }; | 
| 112 |  | 
| 113 |   /// Indicates when and how the Swift async frame pointer bit should be set. | 
| 114 |   enum class SwiftAsyncFramePointerMode { | 
| 115 |     /// Determine whether to set the bit statically or dynamically based | 
| 116 |     /// on the deployment target. | 
| 117 |     DeploymentBased, | 
| 118 |     /// Always set the bit. | 
| 119 |     Always, | 
| 120 |     /// Never set the bit. | 
| 121 |     Never, | 
| 122 |   }; | 
| 123 |  | 
| 124 |   class TargetOptions { | 
| 125 |   public: | 
| 126 |     TargetOptions() | 
| 127 |         : UnsafeFPMath(false), NoInfsFPMath(false), NoNaNsFPMath(false), | 
| 128 |           NoTrappingFPMath(true), NoSignedZerosFPMath(false), | 
| 129 |           ApproxFuncFPMath(false), EnableAIXExtendedAltivecABI(false), | 
| 130 |           HonorSignDependentRoundingFPMathOption(false), NoZerosInBSS(false), | 
| 131 |           GuaranteedTailCallOpt(false), StackSymbolOrdering(true), | 
| 132 |           EnableFastISel(false), EnableGlobalISel(false), UseInitArray(false), | 
| 133 |           DisableIntegratedAS(false), RelaxELFRelocations(true), | 
| 134 |           FunctionSections(false), DataSections(false), | 
| 135 |           IgnoreXCOFFVisibility(false), XCOFFTracebackTable(true), | 
| 136 |           UniqueSectionNames(true), UniqueBasicBlockSectionNames(false), | 
| 137 |           TrapUnreachable(false), NoTrapAfterNoreturn(false), TLSSize(0), | 
| 138 |           EmulatedTLS(false), EnableIPRA(false), EmitStackSizeSection(false), | 
| 139 |           EnableMachineOutliner(false), EnableMachineFunctionSplitter(false), | 
| 140 |           SupportsDefaultOutlining(false), EmitAddrsig(false), | 
| 141 |           EmitCallSiteInfo(false), SupportsDebugEntryValues(false), | 
| 142 |           EnableDebugEntryValues(false), ValueTrackingVariableLocations(false), | 
| 143 |           ForceDwarfFrameSection(false), XRayFunctionIndex(true), | 
| 144 |           DebugStrictDwarf(false), Hotpatch(false), | 
| 145 |           PPCGenScalarMASSEntries(false), JMCInstrument(false), | 
| 146 |           EnableCFIFixup(false), MisExpect(false), XCOFFReadOnlyPointers(false), | 
| 147 |           FPDenormalMode(DenormalMode::IEEE, DenormalMode::IEEE) {} | 
| 148 |  | 
| 149 |     /// DisableFramePointerElim - This returns true if frame pointer elimination | 
| 150 |     /// optimization should be disabled for the given machine function. | 
| 151 |     bool DisableFramePointerElim(const MachineFunction &MF) const; | 
| 152 |  | 
| 153 |     /// If greater than 0, override the default value of | 
| 154 |     /// MCAsmInfo::BinutilsVersion. | 
| 155 |     std::pair<int, int> BinutilsVersion{0, 0}; | 
| 156 |  | 
| 157 |     /// UnsafeFPMath - This flag is enabled when the | 
| 158 |     /// -enable-unsafe-fp-math flag is specified on the command line.  When | 
| 159 |     /// this flag is off (the default), the code generator is not allowed to | 
| 160 |     /// produce results that are "less precise" than IEEE allows.  This includes | 
| 161 |     /// use of X86 instructions like FSIN and FCOS instead of libcalls. | 
| 162 |     unsigned UnsafeFPMath : 1; | 
| 163 |  | 
| 164 |     /// NoInfsFPMath - This flag is enabled when the | 
| 165 |     /// -enable-no-infs-fp-math flag is specified on the command line. When | 
| 166 |     /// this flag is off (the default), the code generator is not allowed to | 
| 167 |     /// assume the FP arithmetic arguments and results are never +-Infs. | 
| 168 |     unsigned NoInfsFPMath : 1; | 
| 169 |  | 
| 170 |     /// NoNaNsFPMath - This flag is enabled when the | 
| 171 |     /// -enable-no-nans-fp-math flag is specified on the command line. When | 
| 172 |     /// this flag is off (the default), the code generator is not allowed to | 
| 173 |     /// assume the FP arithmetic arguments and results are never NaNs. | 
| 174 |     unsigned NoNaNsFPMath : 1; | 
| 175 |  | 
| 176 |     /// NoTrappingFPMath - This flag is enabled when the | 
| 177 |     /// -enable-no-trapping-fp-math is specified on the command line. This | 
| 178 |     /// specifies that there are no trap handlers to handle exceptions. | 
| 179 |     unsigned NoTrappingFPMath : 1; | 
| 180 |  | 
| 181 |     /// NoSignedZerosFPMath - This flag is enabled when the | 
| 182 |     /// -enable-no-signed-zeros-fp-math is specified on the command line. This | 
| 183 |     /// specifies that optimizations are allowed to treat the sign of a zero | 
| 184 |     /// argument or result as insignificant. | 
| 185 |     unsigned NoSignedZerosFPMath : 1; | 
| 186 |  | 
| 187 |     /// ApproxFuncFPMath - This flag is enabled when the | 
| 188 |     /// -enable-approx-func-fp-math is specified on the command line. This | 
| 189 |     /// specifies that optimizations are allowed to substitute math functions | 
| 190 |     /// with approximate calculations | 
| 191 |     unsigned ApproxFuncFPMath : 1; | 
| 192 |  | 
| 193 |     /// EnableAIXExtendedAltivecABI - This flag returns true when -vec-extabi is | 
| 194 |     /// specified. The code generator is then able to use both volatile and | 
| 195 |     /// nonvolitle vector registers. When false, the code generator only uses | 
| 196 |     /// volatile vector registers which is the default setting on AIX. | 
| 197 |     unsigned EnableAIXExtendedAltivecABI : 1; | 
| 198 |  | 
| 199 |     /// HonorSignDependentRoundingFPMath - This returns true when the | 
| 200 |     /// -enable-sign-dependent-rounding-fp-math is specified.  If this returns | 
| 201 |     /// false (the default), the code generator is allowed to assume that the | 
| 202 |     /// rounding behavior is the default (round-to-zero for all floating point | 
| 203 |     /// to integer conversions, and round-to-nearest for all other arithmetic | 
| 204 |     /// truncations).  If this is enabled (set to true), the code generator must | 
| 205 |     /// assume that the rounding mode may dynamically change. | 
| 206 |     unsigned HonorSignDependentRoundingFPMathOption : 1; | 
| 207 |     bool HonorSignDependentRoundingFPMath() const; | 
| 208 |  | 
| 209 |     /// NoZerosInBSS - By default some codegens place zero-initialized data to | 
| 210 |     /// .bss section. This flag disables such behaviour (necessary, e.g. for | 
| 211 |     /// crt*.o compiling). | 
| 212 |     unsigned NoZerosInBSS : 1; | 
| 213 |  | 
| 214 |     /// GuaranteedTailCallOpt - This flag is enabled when -tailcallopt is | 
| 215 |     /// specified on the commandline. When the flag is on, participating targets | 
| 216 |     /// will perform tail call optimization on all calls which use the fastcc | 
| 217 |     /// calling convention and which satisfy certain target-independent | 
| 218 |     /// criteria (being at the end of a function, having the same return type | 
| 219 |     /// as their parent function, etc.), using an alternate ABI if necessary. | 
| 220 |     unsigned GuaranteedTailCallOpt : 1; | 
| 221 |  | 
| 222 |     /// StackSymbolOrdering - When true, this will allow CodeGen to order | 
| 223 |     /// the local stack symbols (for code size, code locality, or any other | 
| 224 |     /// heuristics). When false, the local symbols are left in whatever order | 
| 225 |     /// they were generated. Default is true. | 
| 226 |     unsigned StackSymbolOrdering : 1; | 
| 227 |  | 
| 228 |     /// EnableFastISel - This flag enables fast-path instruction selection | 
| 229 |     /// which trades away generated code quality in favor of reducing | 
| 230 |     /// compile time. | 
| 231 |     unsigned EnableFastISel : 1; | 
| 232 |  | 
| 233 |     /// EnableGlobalISel - This flag enables global instruction selection. | 
| 234 |     unsigned EnableGlobalISel : 1; | 
| 235 |  | 
| 236 |     /// EnableGlobalISelAbort - Control abort behaviour when global instruction | 
| 237 |     /// selection fails to lower/select an instruction. | 
| 238 |     GlobalISelAbortMode GlobalISelAbort = GlobalISelAbortMode::Enable; | 
| 239 |  | 
| 240 |     /// Control when and how the Swift async frame pointer bit should | 
| 241 |     /// be set. | 
| 242 |     SwiftAsyncFramePointerMode SwiftAsyncFramePointer = | 
| 243 |         SwiftAsyncFramePointerMode::Always; | 
| 244 |  | 
| 245 |     /// UseInitArray - Use .init_array instead of .ctors for static | 
| 246 |     /// constructors. | 
| 247 |     unsigned UseInitArray : 1; | 
| 248 |  | 
| 249 |     /// Disable the integrated assembler. | 
| 250 |     unsigned DisableIntegratedAS : 1; | 
| 251 |  | 
| 252 |     /// Compress DWARF debug sections. | 
| 253 |     DebugCompressionType CompressDebugSections = DebugCompressionType::None; | 
| 254 |  | 
| 255 |     unsigned RelaxELFRelocations : 1; | 
| 256 |  | 
| 257 |     /// Emit functions into separate sections. | 
| 258 |     unsigned FunctionSections : 1; | 
| 259 |  | 
| 260 |     /// Emit data into separate sections. | 
| 261 |     unsigned DataSections : 1; | 
| 262 |  | 
| 263 |     /// Do not emit visibility attribute for xcoff. | 
| 264 |     unsigned IgnoreXCOFFVisibility : 1; | 
| 265 |  | 
| 266 |     /// Emit XCOFF traceback table. | 
| 267 |     unsigned XCOFFTracebackTable : 1; | 
| 268 |  | 
| 269 |     unsigned UniqueSectionNames : 1; | 
| 270 |  | 
| 271 |     /// Use unique names for basic block sections. | 
| 272 |     unsigned UniqueBasicBlockSectionNames : 1; | 
| 273 |  | 
| 274 |     /// Emit target-specific trap instruction for 'unreachable' IR instructions. | 
| 275 |     unsigned TrapUnreachable : 1; | 
| 276 |  | 
| 277 |     /// Do not emit a trap instruction for 'unreachable' IR instructions behind | 
| 278 |     /// noreturn calls, even if TrapUnreachable is true. | 
| 279 |     unsigned NoTrapAfterNoreturn : 1; | 
| 280 |  | 
| 281 |     /// Bit size of immediate TLS offsets (0 == use the default). | 
| 282 |     unsigned TLSSize : 8; | 
| 283 |  | 
| 284 |     /// EmulatedTLS - This flag enables emulated TLS model, using emutls | 
| 285 |     /// function in the runtime library.. | 
| 286 |     unsigned EmulatedTLS : 1; | 
| 287 |  | 
| 288 |     /// This flag enables InterProcedural Register Allocation (IPRA). | 
| 289 |     unsigned EnableIPRA : 1; | 
| 290 |  | 
| 291 |     /// Emit section containing metadata on function stack sizes. | 
| 292 |     unsigned EmitStackSizeSection : 1; | 
| 293 |  | 
| 294 |     /// Enables the MachineOutliner pass. | 
| 295 |     unsigned EnableMachineOutliner : 1; | 
| 296 |  | 
| 297 |     /// Enables the MachineFunctionSplitter pass. | 
| 298 |     unsigned EnableMachineFunctionSplitter : 1; | 
| 299 |  | 
| 300 |     /// Set if the target supports default outlining behaviour. | 
| 301 |     unsigned SupportsDefaultOutlining : 1; | 
| 302 |  | 
| 303 |     /// Emit address-significance table. | 
| 304 |     unsigned EmitAddrsig : 1; | 
| 305 |  | 
| 306 |     /// Emit basic blocks into separate sections. | 
| 307 |     BasicBlockSection BBSections = BasicBlockSection::None; | 
| 308 |  | 
| 309 |     /// Memory Buffer that contains information on sampled basic blocks and used | 
| 310 |     /// to selectively generate basic block sections. | 
| 311 |     std::shared_ptr<MemoryBuffer> BBSectionsFuncListBuf; | 
| 312 |  | 
| 313 |     /// The flag enables call site info production. It is used only for debug | 
| 314 |     /// info, and it is restricted only to optimized code. This can be used for | 
| 315 |     /// something else, so that should be controlled in the frontend. | 
| 316 |     unsigned EmitCallSiteInfo : 1; | 
| 317 |     /// Set if the target supports the debug entry values by default. | 
| 318 |     unsigned SupportsDebugEntryValues : 1; | 
| 319 |     /// When set to true, the EnableDebugEntryValues option forces production | 
| 320 |     /// of debug entry values even if the target does not officially support | 
| 321 |     /// it. Useful for testing purposes only. This flag should never be checked | 
| 322 |     /// directly, always use \ref ShouldEmitDebugEntryValues instead. | 
| 323 |      unsigned EnableDebugEntryValues : 1; | 
| 324 |     /// NOTE: There are targets that still do not support the debug entry values | 
| 325 |     /// production. | 
| 326 |     bool ShouldEmitDebugEntryValues() const; | 
| 327 |  | 
| 328 |     // When set to true, use experimental new debug variable location tracking, | 
| 329 |     // which seeks to follow the values of variables rather than their location, | 
| 330 |     // post isel. | 
| 331 |     unsigned ValueTrackingVariableLocations : 1; | 
| 332 |  | 
| 333 |     /// Emit DWARF debug frame section. | 
| 334 |     unsigned ForceDwarfFrameSection : 1; | 
| 335 |  | 
| 336 |     /// Emit XRay Function Index section | 
| 337 |     unsigned XRayFunctionIndex : 1; | 
| 338 |  | 
| 339 |     /// When set to true, don't use DWARF extensions in later DWARF versions. | 
| 340 |     /// By default, it is set to false. | 
| 341 |     unsigned DebugStrictDwarf : 1; | 
| 342 |  | 
| 343 |     /// Emit the hotpatch flag in CodeView debug. | 
| 344 |     unsigned Hotpatch : 1; | 
| 345 |  | 
| 346 |     /// Enables scalar MASS conversions | 
| 347 |     unsigned PPCGenScalarMASSEntries : 1; | 
| 348 |  | 
| 349 |     /// Enable JustMyCode instrumentation. | 
| 350 |     unsigned JMCInstrument : 1; | 
| 351 |  | 
| 352 |     /// Enable the CFIFixup pass. | 
| 353 |     unsigned EnableCFIFixup : 1; | 
| 354 |  | 
| 355 |     /// When set to true, enable MisExpect Diagnostics | 
| 356 |     /// By default, it is set to false | 
| 357 |     unsigned MisExpect : 1; | 
| 358 |  | 
| 359 |     /// When set to true, const objects with relocatable address values are put | 
| 360 |     /// into the RO data section. | 
| 361 |     unsigned XCOFFReadOnlyPointers : 1; | 
| 362 |  | 
| 363 |     /// Name of the stack usage file (i.e., .su file) if user passes | 
| 364 |     /// -fstack-usage. If empty, it can be implied that -fstack-usage is not | 
| 365 |     /// passed on the command line. | 
| 366 |     std::string StackUsageOutput; | 
| 367 |  | 
| 368 |     /// If greater than 0, override TargetLoweringBase::PrefLoopAlignment. | 
| 369 |     unsigned LoopAlignment = 0; | 
| 370 |  | 
| 371 |     /// FloatABIType - This setting is set by -float-abi=xxx option is specfied | 
| 372 |     /// on the command line. This setting may either be Default, Soft, or Hard. | 
| 373 |     /// Default selects the target's default behavior. Soft selects the ABI for | 
| 374 |     /// software floating point, but does not indicate that FP hardware may not | 
| 375 |     /// be used. Such a combination is unfortunately popular (e.g. | 
| 376 |     /// arm-apple-darwin). Hard presumes that the normal FP ABI is used. | 
| 377 |     FloatABI::ABIType FloatABIType = FloatABI::Default; | 
| 378 |  | 
| 379 |     /// AllowFPOpFusion - This flag is set by the -fp-contract=xxx option. | 
| 380 |     /// This controls the creation of fused FP ops that store intermediate | 
| 381 |     /// results in higher precision than IEEE allows (E.g. FMAs). | 
| 382 |     /// | 
| 383 |     /// Fast mode - allows formation of fused FP ops whenever they're | 
| 384 |     /// profitable. | 
| 385 |     /// Standard mode - allow fusion only for 'blessed' FP ops. At present the | 
| 386 |     /// only blessed op is the fmuladd intrinsic. In the future more blessed ops | 
| 387 |     /// may be added. | 
| 388 |     /// Strict mode - allow fusion only if/when it can be proven that the excess | 
| 389 |     /// precision won't effect the result. | 
| 390 |     /// | 
| 391 |     /// Note: This option only controls formation of fused ops by the | 
| 392 |     /// optimizers.  Fused operations that are explicitly specified (e.g. FMA | 
| 393 |     /// via the llvm.fma.* intrinsic) will always be honored, regardless of | 
| 394 |     /// the value of this option. | 
| 395 |     FPOpFusion::FPOpFusionMode AllowFPOpFusion = FPOpFusion::Standard; | 
| 396 |  | 
| 397 |     /// ThreadModel - This flag specifies the type of threading model to assume | 
| 398 |     /// for things like atomics | 
| 399 |     ThreadModel::Model ThreadModel = ThreadModel::POSIX; | 
| 400 |  | 
| 401 |     /// EABIVersion - This flag specifies the EABI version | 
| 402 |     EABI EABIVersion = EABI::Default; | 
| 403 |  | 
| 404 |     /// Which debugger to tune for. | 
| 405 |     DebuggerKind DebuggerTuning = DebuggerKind::Default; | 
| 406 |  | 
| 407 |   private: | 
| 408 |     /// Flushing mode to assume in default FP environment. | 
| 409 |     DenormalMode FPDenormalMode; | 
| 410 |  | 
| 411 |     /// Flushing mode to assume in default FP environment, for float/vector of | 
| 412 |     /// float. | 
| 413 |     DenormalMode FP32DenormalMode; | 
| 414 |  | 
| 415 |   public: | 
| 416 |     void setFPDenormalMode(DenormalMode Mode) { | 
| 417 |       FPDenormalMode = Mode; | 
| 418 |     } | 
| 419 |  | 
| 420 |     void setFP32DenormalMode(DenormalMode Mode) { | 
| 421 |       FP32DenormalMode = Mode; | 
| 422 |     } | 
| 423 |  | 
| 424 |     DenormalMode getRawFPDenormalMode() const { | 
| 425 |       return FPDenormalMode; | 
| 426 |     } | 
| 427 |  | 
| 428 |     DenormalMode getRawFP32DenormalMode() const { | 
| 429 |       return FP32DenormalMode; | 
| 430 |     } | 
| 431 |  | 
| 432 |     DenormalMode getDenormalMode(const fltSemantics &FPType) const; | 
| 433 |  | 
| 434 |     /// What exception model to use | 
| 435 |     ExceptionHandling ExceptionModel = ExceptionHandling::None; | 
| 436 |  | 
| 437 |     /// Machine level options. | 
| 438 |     MCTargetOptions MCOptions; | 
| 439 |  | 
| 440 |     /// Stores the filename/path of the final .o/.obj file, to be written in the | 
| 441 |     /// debug information. This is used for emitting the CodeView S_OBJNAME | 
| 442 |     /// record. | 
| 443 |     std::string ObjectFilenameForDebug; | 
| 444 |   }; | 
| 445 |  | 
| 446 | } // End llvm namespace | 
| 447 |  | 
| 448 | #endif | 
| 449 |  |