//===--- CodeGenOptions.h ---------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines the CodeGenOptions interface. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_FRONTEND_CODEGENOPTIONS_H #define LLVM_CLANG_FRONTEND_CODEGENOPTIONS_H #include #include namespace clang { /// CodeGenOptions - Track various options which control how the code /// is optimized and passed to the backend. class CodeGenOptions { public: enum InliningMethod { NoInlining, // Perform no inlining whatsoever. NormalInlining, // Use the standard function inlining pass. OnlyAlwaysInlining // Only run the always inlining pass. }; enum ObjCDispatchMethodKind { Legacy = 0, NonLegacy = 1, Mixed = 2 }; enum DebugInfoKind { NoDebugInfo, // Don't generate debug info. DebugLineTablesOnly, // Emit only debug info necessary for generating // line number tables (-gline-tables-only). LimitedDebugInfo, // Limit generated debug info to reduce size // (-flimit-debug-info). FullDebugInfo // Generate complete debug info. }; enum TLSModel { GeneralDynamicTLSModel, LocalDynamicTLSModel, InitialExecTLSModel, LocalExecTLSModel }; unsigned AsmVerbose : 1; ///< -dA, -fverbose-asm. unsigned ObjCAutoRefCountExceptions : 1; ///< Whether ARC should be EH-safe. unsigned CUDAIsDevice : 1; ///< Set when compiling for CUDA device. unsigned CXAAtExit : 1; ///< Use __cxa_atexit for calling destructors. unsigned CXXCtorDtorAliases: 1; ///< Emit complete ctors/dtors as linker ///< aliases to base ctors when possible. unsigned DataSections : 1; ///< Set when -fdata-sections is enabled. unsigned DisableFPElim : 1; ///< Set when -fomit-frame-pointer is enabled. unsigned DisableLLVMOpts : 1; ///< Don't run any optimizations, for use in ///< getting .bc files that correspond to the ///< internal state before optimizations are ///< done. unsigned DisableRedZone : 1; ///< Set when -mno-red-zone is enabled. unsigned DisableTailCalls : 1; ///< Do not emit tail calls. unsigned EmitDeclMetadata : 1; ///< Emit special metadata indicating what ///< Decl* various IR entities came from. Only ///< useful when running CodeGen as a ///< subroutine. unsigned EmitGcovArcs : 1; ///< Emit coverage data files, aka. GCDA. unsigned EmitGcovNotes : 1; ///< Emit coverage "notes" files, aka GCNO. unsigned EmitOpenCLArgMetadata : 1; ///< Emit OpenCL kernel arg metadata. unsigned EmitMicrosoftInlineAsm : 1; ///< Enable emission of MS-style inline ///< assembly. unsigned ForbidGuardVariables : 1; ///< Issue errors if C++ guard variables ///< are required. unsigned FunctionSections : 1; ///< Set when -ffunction-sections is enabled. unsigned HiddenWeakTemplateVTables : 1; ///< Emit weak vtables and RTTI for ///< template classes with hidden visibility unsigned HiddenWeakVTables : 1; ///< Emit weak vtables, RTTI, and thunks with ///< hidden visibility. unsigned InstrumentFunctions : 1; ///< Set when -finstrument-functions is ///< enabled. unsigned InstrumentForProfiling : 1; ///< Set when -pg is enabled. unsigned LessPreciseFPMAD : 1; ///< Enable less precise MAD instructions to ///< be generated. unsigned MergeAllConstants : 1; ///< Merge identical constants. unsigned NoCommon : 1; ///< Set when -fno-common or C++ is enabled. unsigned NoDwarf2CFIAsm : 1; ///< Set when -fno-dwarf2-cfi-asm is enabled. unsigned NoDwarfDirectoryAsm : 1; ///< Set when -fno-dwarf-directory-asm is ///< enabled. unsigned NoExecStack : 1; ///< Set when -Wa,--noexecstack is enabled. unsigned NoGlobalMerge : 1; ///< Set when -mno-global-merge is enabled. unsigned NoImplicitFloat : 1; ///< Set when -mno-implicit-float is enabled. unsigned NoInfsFPMath : 1; ///< Assume FP arguments, results not +-Inf. unsigned NoInline : 1; ///< Set when -fno-inline is enabled. Disables ///< use of the inline keyword. unsigned NoNaNsFPMath : 1; ///< Assume FP arguments, results not NaN. unsigned NoZeroInitializedInBSS : 1; ///< -fno-zero-initialized-in-bss. unsigned ObjCDispatchMethod : 2; ///< Method of Objective-C dispatch to use. unsigned OmitLeafFramePointer : 1; ///< Set when -momit-leaf-frame-pointer is ///< enabled. unsigned OptimizationLevel : 3; ///< The -O[0-4] option specified. unsigned OptimizeSize : 2; ///< If -Os (==1) or -Oz (==2) is specified. unsigned RelaxAll : 1; ///< Relax all machine code instructions. unsigned RelaxedAliasing : 1; ///< Set when -fno-strict-aliasing is enabled. unsigned SaveTempLabels : 1; ///< Save temporary labels. unsigned SimplifyLibCalls : 1; ///< Set when -fbuiltin is enabled. unsigned SoftFloat : 1; ///< -soft-float. unsigned StrictEnums : 1; ///< Optimize based on strict enum definition. unsigned TimePasses : 1; ///< Set when -ftime-report is enabled. unsigned UnitAtATime : 1; ///< Unused. For mirroring GCC optimization ///< selection. unsigned UnrollLoops : 1; ///< Control whether loops are unrolled. unsigned UnsafeFPMath : 1; ///< Allow unsafe floating point optzns. unsigned UnwindTables : 1; ///< Emit unwind tables. /// Attempt to use register sized accesses to bit-fields in structures, when /// possible. unsigned UseRegisterSizedBitfieldAccess : 1; unsigned VerifyModule : 1; ///< Control whether the module should be run ///< through the LLVM Verifier. unsigned StackRealignment : 1; ///< Control whether to permit stack ///< realignment. unsigned UseInitArray : 1; ///< Control whether to use .init_array or ///< .ctors. unsigned StackAlignment; ///< Overrides default stack alignment, ///< if not 0. /// The code model to use (-mcmodel). std::string CodeModel; /// The filename with path we use for coverage files. The extension will be /// replaced. std::string CoverageFile; /// Enable additional debugging information. std::string DebugPass; /// The string to embed in debug information as the current working directory. std::string DebugCompilationDir; /// The kind of generated debug info. DebugInfoKind DebugInfo; /// The string to embed in the debug information for the compile unit, if /// non-empty. std::string DwarfDebugFlags; /// The ABI to use for passing floating point arguments. std::string FloatABI; /// The float precision limit to use, if non-empty. std::string LimitFloatPrecision; /// The name of the bitcode file to link before optzns. std::string LinkBitcodeFile; /// The kind of inlining to perform. InliningMethod Inlining; /// The user provided name for the "main file", if non-empty. This is useful /// in situations where the input file name does not match the original input /// file, for example with -save-temps. std::string MainFileName; /// The name of the relocation model to use. std::string RelocationModel; /// If not an empty string, trap intrinsics are lowered to calls to this /// function instead of to trap instructions. std::string TrapFuncName; /// A list of command-line options to forward to the LLVM backend. std::vector BackendOptions; /// The user specified number of registers to be used for integral arguments, /// or 0 if unspecified. unsigned NumRegisterParameters; /// The run-time penalty for bounds checking, or 0 to disable. unsigned char BoundsChecking; /// The default TLS model to use. TLSModel DefaultTLSModel; public: CodeGenOptions() { AsmVerbose = 0; CUDAIsDevice = 0; CXAAtExit = 1; CXXCtorDtorAliases = 0; DataSections = 0; DisableFPElim = 0; DisableLLVMOpts = 0; DisableRedZone = 0; DisableTailCalls = 0; EmitDeclMetadata = 0; EmitGcovArcs = 0; EmitGcovNotes = 0; EmitOpenCLArgMetadata = 0; EmitMicrosoftInlineAsm = 0; ForbidGuardVariables = 0; FunctionSections = 0; HiddenWeakTemplateVTables = 0; HiddenWeakVTables = 0; InstrumentFunctions = 0; InstrumentForProfiling = 0; LessPreciseFPMAD = 0; MergeAllConstants = 1; NoCommon = 0; NoDwarf2CFIAsm = 0; NoImplicitFloat = 0; NoInfsFPMath = 0; NoInline = 0; NoNaNsFPMath = 0; NoZeroInitializedInBSS = 0; NumRegisterParameters = 0; ObjCAutoRefCountExceptions = 0; ObjCDispatchMethod = Legacy; OmitLeafFramePointer = 0; OptimizationLevel = 0; OptimizeSize = 0; RelaxAll = 0; RelaxedAliasing = 0; SaveTempLabels = 0; SimplifyLibCalls = 1; SoftFloat = 0; StrictEnums = 0; TimePasses = 0; UnitAtATime = 1; UnrollLoops = 0; UnsafeFPMath = 0; UnwindTables = 0; UseRegisterSizedBitfieldAccess = 0; VerifyModule = 1; StackRealignment = 0; StackAlignment = 0; BoundsChecking = 0; UseInitArray = 0; DebugInfo = NoDebugInfo; Inlining = NoInlining; RelocationModel = "pic"; DefaultTLSModel = GeneralDynamicTLSModel; } ObjCDispatchMethodKind getObjCDispatchMethod() const { return ObjCDispatchMethodKind(ObjCDispatchMethod); } }; } // end namespace clang #endif