CodeGenOptions.h revision f24a151d645abc89f94aa58ad59f3131502041b1
1//===--- CodeGenOptions.h ---------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file defines the CodeGenOptions interface. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef LLVM_CLANG_FRONTEND_CODEGENOPTIONS_H 15#define LLVM_CLANG_FRONTEND_CODEGENOPTIONS_H 16 17#include <string> 18#include <vector> 19 20namespace clang { 21 22/// CodeGenOptions - Track various options which control how the code 23/// is optimized and passed to the backend. 24class CodeGenOptions { 25public: 26 enum InliningMethod { 27 NoInlining, // Perform no inlining whatsoever. 28 NormalInlining, // Use the standard function inlining pass. 29 OnlyAlwaysInlining // Only run the always inlining pass. 30 }; 31 32 enum ObjCDispatchMethodKind { 33 Legacy = 0, 34 NonLegacy = 1, 35 Mixed = 2 36 }; 37 38 unsigned AsmVerbose : 1; /// -dA, -fverbose-asm. 39 unsigned CXAAtExit : 1; /// Use __cxa_atexit for calling destructors. 40 unsigned CXXCtorDtorAliases: 1; /// Emit complete ctors/dtors as linker 41 /// aliases to base ctors when possible. 42 unsigned DataSections : 1; /// Set when -fdata-sections is enabled 43 unsigned DebugInfo : 1; /// Should generate debug info (-g). 44 unsigned LimitDebugInfo : 1; /// Limit generated debug info to reduce size. 45 unsigned DisableFPElim : 1; /// Set when -fomit-frame-pointer is enabled. 46 unsigned DisableLLVMOpts : 1; /// Don't run any optimizations, for use in 47 /// getting .bc files that correspond to the 48 /// internal state before optimizations are 49 /// done. 50 unsigned DisableRedZone : 1; /// Set when -mno-red-zone is enabled. 51 unsigned EmitDeclMetadata : 1; /// Emit special metadata indicating what 52 /// Decl* various IR entities came from. Only 53 /// useful when running CodeGen as a 54 /// subroutine. 55 unsigned EmitGcovArcs : 1; /// Emit coverage data files, aka. GCDA. 56 unsigned EmitGcovNotes : 1; /// Emit coverage "notes" files, aka GCNO. 57 unsigned ForbidGuardVariables : 1; /// Issue errors if C++ guard variables 58 /// are required 59 unsigned FunctionSections : 1; /// Set when -ffunction-sections is enabled 60 unsigned HiddenWeakTemplateVTables : 1; /// Emit weak vtables and RTTI for 61 /// template classes with hidden visibility 62 unsigned HiddenWeakVTables : 1; /// Emit weak vtables, RTTI, and thunks with 63 /// hidden visibility. 64 unsigned InstrumentFunctions : 1; /// Set when -finstrument-functions is 65 /// enabled. 66 unsigned InstrumentForProfiling : 1; /// Set when -pg is enabled 67 unsigned LessPreciseFPMAD : 1; /// Enable less precise MAD instructions to be 68 /// generated. 69 unsigned MergeAllConstants : 1; /// Merge identical constants. 70 unsigned NoCommon : 1; /// Set when -fno-common or C++ is enabled. 71 unsigned NoDwarf2CFIAsm : 1; /// Set when -fno-dwarf2-cfi-asm is enabled. 72 unsigned NoImplicitFloat : 1; /// Set when -mno-implicit-float is enabled. 73 unsigned NoInfsFPMath : 1; /// Assume FP arguments, results not +-Inf. 74 unsigned NoNaNsFPMath : 1; /// Assume FP arguments, results not NaN. 75 unsigned NoZeroInitializedInBSS : 1; /// -fno-zero-initialized-in-bss 76 unsigned ObjCDispatchMethod : 2; /// Method of Objective-C dispatch to use. 77 unsigned OmitLeafFramePointer : 1; /// Set when -momit-leaf-frame-pointer is 78 /// enabled. 79 unsigned OptimizationLevel : 3; /// The -O[0-4] option specified. 80 unsigned OptimizeSize : 2; /// If -Os (==1) or -Oz (==2) is specified. 81 unsigned RelaxAll : 1; /// Relax all machine code instructions. 82 unsigned RelaxedAliasing : 1; /// Set when -fno-strict-aliasing is enabled. 83 unsigned SaveTempLabels : 1; /// Save temporary labels. 84 unsigned SimplifyLibCalls : 1; /// Set when -fbuiltin is enabled. 85 unsigned SoftFloat : 1; /// -soft-float. 86 unsigned TimePasses : 1; /// Set when -ftime-report is enabled. 87 unsigned UnitAtATime : 1; /// Unused. For mirroring GCC optimization 88 /// selection. 89 unsigned UnrollLoops : 1; /// Control whether loops are unrolled. 90 unsigned UnsafeFPMath : 1; /// Allow unsafe floating point optzns. 91 unsigned UnwindTables : 1; /// Emit unwind tables. 92 unsigned VerifyModule : 1; /// Control whether the module should be run 93 /// through the LLVM Verifier. 94 95 /// The code model to use (-mcmodel). 96 std::string CodeModel; 97 98 /// Enable additional debugging information. 99 std::string DebugPass; 100 101 /// The string to embed in the debug information for the compile unit, if 102 /// non-empty. 103 std::string DwarfDebugFlags; 104 105 /// The ABI to use for passing floating point arguments. 106 std::string FloatABI; 107 108 /// The float precision limit to use, if non-empty. 109 std::string LimitFloatPrecision; 110 111 /// The kind of inlining to perform. 112 InliningMethod Inlining; 113 114 /// The user provided name for the "main file", if non-empty. This is useful 115 /// in situations where the input file name does not match the original input 116 /// file, for example with -save-temps. 117 std::string MainFileName; 118 119 /// The name of the relocation model to use. 120 std::string RelocationModel; 121 122 /// A list of command-line options to forward to the LLVM backend. 123 std::vector<std::string> BackendOptions; 124 125 /// The user specified number of registers to be used for integral arguments, 126 /// or 0 if unspecified. 127 unsigned NumRegisterParameters; 128 129public: 130 CodeGenOptions() { 131 AsmVerbose = 0; 132 CXAAtExit = 1; 133 CXXCtorDtorAliases = 0; 134 DataSections = 0; 135 DebugInfo = 0; 136 LimitDebugInfo = 0; 137 DisableFPElim = 0; 138 DisableLLVMOpts = 0; 139 DisableRedZone = 0; 140 EmitDeclMetadata = 0; 141 EmitGcovArcs = 0; 142 EmitGcovNotes = 0; 143 ForbidGuardVariables = 0; 144 FunctionSections = 0; 145 HiddenWeakTemplateVTables = 0; 146 HiddenWeakVTables = 0; 147 InstrumentFunctions = 0; 148 InstrumentForProfiling = 0; 149 LessPreciseFPMAD = 0; 150 MergeAllConstants = 1; 151 NoCommon = 0; 152 NoDwarf2CFIAsm = 0; 153 NoImplicitFloat = 0; 154 NoInfsFPMath = 0; 155 NoNaNsFPMath = 0; 156 NoZeroInitializedInBSS = 0; 157 NumRegisterParameters = 0; 158 ObjCDispatchMethod = Legacy; 159 OmitLeafFramePointer = 0; 160 OptimizationLevel = 0; 161 OptimizeSize = 0; 162 RelaxAll = 0; 163 RelaxedAliasing = 0; 164 SaveTempLabels = 0; 165 SimplifyLibCalls = 1; 166 SoftFloat = 0; 167 TimePasses = 0; 168 UnitAtATime = 1; 169 UnrollLoops = 0; 170 UnsafeFPMath = 0; 171 UnwindTables = 0; 172 VerifyModule = 1; 173 174 Inlining = NoInlining; 175 RelocationModel = "pic"; 176 } 177 178 ObjCDispatchMethodKind getObjCDispatchMethod() const { 179 return ObjCDispatchMethodKind(ObjCDispatchMethod); 180 } 181}; 182 183} // end namespace clang 184 185#endif 186