CodeGenOptions.h revision 41a621d00e974829b75ff95cdff556755116dea1
12811ccf48d6d898c42cc4cfad37abedb36236d20Chandler Carruth//===--- CodeGenOptions.h ---------------------------------------*- C++ -*-===// 270f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar// 370f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar// The LLVM Compiler Infrastructure 470f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar// 570f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar// This file is distributed under the University of Illinois Open Source 670f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar// License. See LICENSE.TXT for details. 770f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar// 870f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar//===----------------------------------------------------------------------===// 970f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar// 102811ccf48d6d898c42cc4cfad37abedb36236d20Chandler Carruth// This file defines the CodeGenOptions interface. 1170f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar// 1270f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar//===----------------------------------------------------------------------===// 1370f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar 1406057cef0bcd7804e80f3ce2bbe352178396c715Chandler Carruth#ifndef LLVM_CLANG_FRONTEND_CODEGENOPTIONS_H 1506057cef0bcd7804e80f3ce2bbe352178396c715Chandler Carruth#define LLVM_CLANG_FRONTEND_CODEGENOPTIONS_H 1670f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar 17e062533e298f72d970b2aa99cd0e3818b20d73dfChris Lattner#include <string> 18e062533e298f72d970b2aa99cd0e3818b20d73dfChris Lattner 1970f92436f5828c11ef108463da4473d44e114c28Daniel Dunbarnamespace clang { 2070f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar 212811ccf48d6d898c42cc4cfad37abedb36236d20Chandler Carruth/// CodeGenOptions - Track various options which control how the code 2270f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar/// is optimized and passed to the backend. 232811ccf48d6d898c42cc4cfad37abedb36236d20Chandler Carruthclass CodeGenOptions { 24e062533e298f72d970b2aa99cd0e3818b20d73dfChris Lattnerpublic: 25877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar enum InliningMethod { 26877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar NoInlining, // Perform no inlining whatsoever. 27877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar NormalInlining, // Use the standard function inlining pass. 28877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar OnlyAlwaysInlining // Only run the always inlining pass. 29877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar }; 30877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar 31f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar enum ObjCDispatchMethodKind { 32f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar Legacy = 0, 33f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar NonLegacy = 1, 34f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar Mixed = 2 35f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar }; 36f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar 373b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar unsigned AsmVerbose : 1; /// -dA, -fverbose-asm. 38efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar unsigned CXAAtExit : 1; /// Use __cxa_atexit for calling destructors. 39efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar unsigned CXXCtorDtorAliases: 1; /// Emit complete ctors/dtors as linker 40efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar /// aliases to base ctors when possible. 41bbea7168326d810eff18dfb8bc43c7790fd55010Chris Lattner unsigned DataSections : 1; /// Set when -fdata-sections is enabled 42515ddd8f7a36fc2684492c13665642153fc690c0Sebastian Redl unsigned DebugInfo : 1; /// Should generate debug info (-g). 43f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar unsigned DisableFPElim : 1; /// Set when -fomit-frame-pointer is enabled. 448d35314401047092eb97b989ed930967ed9e8cccDaniel Dunbar unsigned DisableLLVMOpts : 1; /// Don't run any optimizations, for use in 458d35314401047092eb97b989ed930967ed9e8cccDaniel Dunbar /// getting .bc files that correspond to the 468d35314401047092eb97b989ed930967ed9e8cccDaniel Dunbar /// internal state before optimizations are 478d35314401047092eb97b989ed930967ed9e8cccDaniel Dunbar /// done. 48145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned DisableRedZone : 1; /// Set when -mno-red-zone is enabled. 497a536907da776bdc47a704e7cafd641e8150e653John McCall unsigned EmitDeclMetadata : 1; /// Emit special metadata indicating what Decl* 507a536907da776bdc47a704e7cafd641e8150e653John McCall /// various IR entities came from. Only useful 517a536907da776bdc47a704e7cafd641e8150e653John McCall /// when running CodeGen as a subroutine. 52bbea7168326d810eff18dfb8bc43c7790fd55010Chris Lattner unsigned FunctionSections : 1; /// Set when -ffunction-sections is enabled 53279b5eb6910d64a293e9c0e2887a05c65d8737d7John McCall unsigned HiddenWeakTemplateVTables : 1; /// Emit weak vtables and RTTI for 547a536907da776bdc47a704e7cafd641e8150e653John McCall /// template classes with hidden visibility 55279b5eb6910d64a293e9c0e2887a05c65d8737d7John McCall unsigned HiddenWeakVTables : 1; /// Emit weak vtables, RTTI, and thunks with 56279b5eb6910d64a293e9c0e2887a05c65d8737d7John McCall /// hidden visibility 577255a2d997b15beae82e627052fdb1b2474495c2Chris Lattner unsigned InstrumentFunctions : 1; /// Set when -finstrument-functions is enabled 58145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned MergeAllConstants : 1; /// Merge identical constants. 59145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned NoCommon : 1; /// Set when -fno-common or C++ is enabled. 60145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned NoImplicitFloat : 1; /// Set when -mno-implicit-float is enabled. 61f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar unsigned NoZeroInitializedInBSS : 1; /// -fno-zero-initialized-in-bss 62f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar unsigned ObjCDispatchMethod : 2; /// Method of Objective-C dispatch to use. 631ad6648cce57bd187f1853f58fef26cd9bf4934fDaniel Dunbar unsigned OmitLeafFramePointer : 1; /// Set when -momit-leaf-frame-pointer is 641ad6648cce57bd187f1853f58fef26cd9bf4934fDaniel Dunbar /// enabled. 65145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned OptimizationLevel : 3; /// The -O[0-4] option specified. 66145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned OptimizeSize : 1; /// If -Os is specified. 674ecc9b73b3716775ed4e09091e300796a9a72378Daniel Dunbar unsigned RelaxAll : 1; /// Relax all machine code instructions. 686b0cf67ae72a9ebb90e94cc9a14e09364a2b3466Daniel Dunbar unsigned SimplifyLibCalls : 1; /// Set when -fbuiltin is enabled. 693b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar unsigned SoftFloat : 1; /// -soft-float. 70145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned TimePasses : 1; /// Set when -ftime-report is enabled. 71145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned UnitAtATime : 1; /// Unused. For mirroring GCC optimization 72145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar /// selection. 73145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned UnrollLoops : 1; /// Control whether loops are unrolled. 74f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar unsigned UnwindTables : 1; /// Emit unwind tables. 75145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned VerifyModule : 1; /// Control whether the module should be run 76145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar /// through the LLVM Verifier. 778d35314401047092eb97b989ed930967ed9e8cccDaniel Dunbar 78f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar /// The code model to use (-mcmodel). 79f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar std::string CodeModel; 80f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar 813b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar /// Enable additional debugging information. 82f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar std::string DebugPass; 83f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar 84f2d8b9f967a1ab53ee9fdbcc3ac0a4ee0a83a26eDaniel Dunbar /// The string to embed in the debug information for the compile unit, if 85f2d8b9f967a1ab53ee9fdbcc3ac0a4ee0a83a26eDaniel Dunbar /// non-empty. 86f2d8b9f967a1ab53ee9fdbcc3ac0a4ee0a83a26eDaniel Dunbar std::string DwarfDebugFlags; 87f2d8b9f967a1ab53ee9fdbcc3ac0a4ee0a83a26eDaniel Dunbar 883b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar /// The ABI to use for passing floating point arguments. 893b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar std::string FloatABI; 903b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar 91f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar /// The float precision limit to use, if non-empty. 92f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar std::string LimitFloatPrecision; 93f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar 94f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar /// The kind of inlining to perform. 95877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar InliningMethod Inlining; 96877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar 977d065d0f21b35f445cee13730398bc2bec6edff2Daniel Dunbar /// The user provided name for the "main file", if non-empty. This is useful 987d065d0f21b35f445cee13730398bc2bec6edff2Daniel Dunbar /// in situations where the input file name does not match the original input 997d065d0f21b35f445cee13730398bc2bec6edff2Daniel Dunbar /// file, for example with -save-temps. 1007d065d0f21b35f445cee13730398bc2bec6edff2Daniel Dunbar std::string MainFileName; 1017d065d0f21b35f445cee13730398bc2bec6edff2Daniel Dunbar 102f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar /// The name of the relocation model to use. 103f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar std::string RelocationModel; 104f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar 10570f92436f5828c11ef108463da4473d44e114c28Daniel Dunbarpublic: 1062811ccf48d6d898c42cc4cfad37abedb36236d20Chandler Carruth CodeGenOptions() { 107f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar AsmVerbose = 0; 108efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar CXAAtExit = 1; 109efb0fa9e11f75af51744a6159530ef7cc8efa24aDaniel Dunbar CXXCtorDtorAliases = 0; 110bbea7168326d810eff18dfb8bc43c7790fd55010Chris Lattner DataSections = 0; 111f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar DebugInfo = 0; 112f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar DisableFPElim = 0; 113f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar DisableLLVMOpts = 0; 114f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar DisableRedZone = 0; 1157a536907da776bdc47a704e7cafd641e8150e653John McCall EmitDeclMetadata = 0; 116bbea7168326d810eff18dfb8bc43c7790fd55010Chris Lattner FunctionSections = 0; 117279b5eb6910d64a293e9c0e2887a05c65d8737d7John McCall HiddenWeakTemplateVTables = 0; 118279b5eb6910d64a293e9c0e2887a05c65d8737d7John McCall HiddenWeakVTables = 0; 11941a621d00e974829b75ff95cdff556755116dea1Douglas Gregor InstrumentFunctions = 0; 120f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar MergeAllConstants = 1; 121f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar NoCommon = 0; 122f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar NoImplicitFloat = 0; 123f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar NoZeroInitializedInBSS = 0; 124f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar ObjCDispatchMethod = Legacy; 1251ad6648cce57bd187f1853f58fef26cd9bf4934fDaniel Dunbar OmitLeafFramePointer = 0; 12670f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar OptimizationLevel = 0; 12770f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar OptimizeSize = 0; 1284ecc9b73b3716775ed4e09091e300796a9a72378Daniel Dunbar RelaxAll = 0; 1296b0cf67ae72a9ebb90e94cc9a14e09364a2b3466Daniel Dunbar SimplifyLibCalls = 1; 1303b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar SoftFloat = 0; 131445026698ca8f97ee7320464dedbe0d077b32d16Chris Lattner TimePasses = 0; 132f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar UnitAtATime = 1; 133984eb8611d9ee46fc6351dee43609f2deed99f3cDaniel Dunbar UnrollLoops = 0; 134f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar UnwindTables = 0; 135f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar VerifyModule = 1; 136f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar 137877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar Inlining = NoInlining; 138f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar RelocationModel = "pic"; 1391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump } 140f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar 141f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar ObjCDispatchMethodKind getObjCDispatchMethod() const { 142f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar return ObjCDispatchMethodKind(ObjCDispatchMethod); 143f643b9b338b797a824447207d7eab5f1187f4f34Daniel Dunbar } 14470f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar}; 14570f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar 14670f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar} // end namespace clang 14770f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar 14870f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar#endif 149