CodeGenOptions.h revision f2d8b9f967a1ab53ee9fdbcc3ac0a4ee0a83a26e
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 142811ccf48d6d898c42cc4cfad37abedb36236d20Chandler Carruth#ifndef LLVM_CLANG_CODEGEN_CODEGENOPTIONS_H 152811ccf48d6d898c42cc4cfad37abedb36236d20Chandler Carruth#define LLVM_CLANG_CODEGEN_CODEGENOPTIONS_H 1670f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar 17e062533e298f72d970b2aa99cd0e3818b20d73dfChris Lattner#include <string> 18e062533e298f72d970b2aa99cd0e3818b20d73dfChris Lattner#include <vector> 19e062533e298f72d970b2aa99cd0e3818b20d73dfChris Lattner 2070f92436f5828c11ef108463da4473d44e114c28Daniel Dunbarnamespace clang { 2170f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar 222811ccf48d6d898c42cc4cfad37abedb36236d20Chandler Carruth/// CodeGenOptions - Track various options which control how the code 2370f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar/// is optimized and passed to the backend. 242811ccf48d6d898c42cc4cfad37abedb36236d20Chandler Carruthclass CodeGenOptions { 25e062533e298f72d970b2aa99cd0e3818b20d73dfChris Lattnerpublic: 26877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar enum InliningMethod { 27877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar NoInlining, // Perform no inlining whatsoever. 28877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar NormalInlining, // Use the standard function inlining pass. 29877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar OnlyAlwaysInlining // Only run the always inlining pass. 30877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar }; 31877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar 323b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar unsigned AsmVerbose : 1; /// -dA, -fverbose-asm. 3320126046221404b81cdd8de192bd72fdc7b0a670Chris Lattner unsigned DebugInfo : 1; /// Should generate deubg info (-g). 34f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar unsigned DisableFPElim : 1; /// Set when -fomit-frame-pointer is enabled. 358d35314401047092eb97b989ed930967ed9e8cccDaniel Dunbar unsigned DisableLLVMOpts : 1; /// Don't run any optimizations, for use in 368d35314401047092eb97b989ed930967ed9e8cccDaniel Dunbar /// getting .bc files that correspond to the 378d35314401047092eb97b989ed930967ed9e8cccDaniel Dunbar /// internal state before optimizations are 388d35314401047092eb97b989ed930967ed9e8cccDaniel Dunbar /// done. 39145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned DisableRedZone : 1; /// Set when -mno-red-zone is enabled. 40145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned MergeAllConstants : 1; /// Merge identical constants. 41145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned NoCommon : 1; /// Set when -fno-common or C++ is enabled. 42145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned NoImplicitFloat : 1; /// Set when -mno-implicit-float is enabled. 43f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar unsigned NoZeroInitializedInBSS : 1; /// -fno-zero-initialized-in-bss 44145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned OptimizationLevel : 3; /// The -O[0-4] option specified. 45145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned OptimizeSize : 1; /// If -Os is specified. 463b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar unsigned SoftFloat : 1; /// -soft-float. 47145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned TimePasses : 1; /// Set when -ftime-report is enabled. 48145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned UnitAtATime : 1; /// Unused. For mirroring GCC optimization 49145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar /// selection. 50145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned UnrollLoops : 1; /// Control whether loops are unrolled. 51f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar unsigned UnwindTables : 1; /// Emit unwind tables. 52145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar unsigned VerifyModule : 1; /// Control whether the module should be run 53145e2ea10fb6240265c3fac8137a5f2b01b1a426Daniel Dunbar /// through the LLVM Verifier. 548d35314401047092eb97b989ed930967ed9e8cccDaniel Dunbar 55f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar /// The code model to use (-mcmodel). 56f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar std::string CodeModel; 57f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar 583b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar /// Enable additional debugging information. 59f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar std::string DebugPass; 60f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar 61f2d8b9f967a1ab53ee9fdbcc3ac0a4ee0a83a26eDaniel Dunbar /// The string to embed in the debug information for the compile unit, if 62f2d8b9f967a1ab53ee9fdbcc3ac0a4ee0a83a26eDaniel Dunbar /// non-empty. 63f2d8b9f967a1ab53ee9fdbcc3ac0a4ee0a83a26eDaniel Dunbar std::string DwarfDebugFlags; 64f2d8b9f967a1ab53ee9fdbcc3ac0a4ee0a83a26eDaniel Dunbar 653b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar /// The ABI to use for passing floating point arguments. 663b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar std::string FloatABI; 673b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar 68f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar /// The float precision limit to use, if non-empty. 69f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar std::string LimitFloatPrecision; 70f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar 71f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar /// The kind of inlining to perform. 72877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar InliningMethod Inlining; 73877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar 747d065d0f21b35f445cee13730398bc2bec6edff2Daniel Dunbar /// The user provided name for the "main file", if non-empty. This is useful 757d065d0f21b35f445cee13730398bc2bec6edff2Daniel Dunbar /// in situations where the input file name does not match the original input 767d065d0f21b35f445cee13730398bc2bec6edff2Daniel Dunbar /// file, for example with -save-temps. 777d065d0f21b35f445cee13730398bc2bec6edff2Daniel Dunbar std::string MainFileName; 787d065d0f21b35f445cee13730398bc2bec6edff2Daniel Dunbar 79f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar /// The name of the relocation model to use. 80f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar std::string RelocationModel; 81f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar 8270f92436f5828c11ef108463da4473d44e114c28Daniel Dunbarpublic: 832811ccf48d6d898c42cc4cfad37abedb36236d20Chandler Carruth CodeGenOptions() { 84f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar AsmVerbose = 0; 85f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar DebugInfo = 0; 86f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar DisableFPElim = 0; 87f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar DisableLLVMOpts = 0; 88f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar DisableRedZone = 0; 89f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar MergeAllConstants = 1; 90f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar NoCommon = 0; 91f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar NoImplicitFloat = 0; 92f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar NoZeroInitializedInBSS = 0; 9370f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar OptimizationLevel = 0; 9470f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar OptimizeSize = 0; 953636e1d784aedb37052aa235966e4fdbe7ed9082Daniel Dunbar UnrollLoops = 0; 963b315264d1a6fa303e20fe0caec306ccafc090deDaniel Dunbar SoftFloat = 0; 97445026698ca8f97ee7320464dedbe0d077b32d16Chris Lattner TimePasses = 0; 98f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar UnitAtATime = 1; 99f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar UnwindTables = 0; 100f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar VerifyModule = 1; 101f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar 102877db3852e29c5b5a2dc25b3fe4a3b78619aa904Daniel Dunbar Inlining = NoInlining; 103f219e7c1529fac29e34483667f740b452e5ef9ccDaniel Dunbar RelocationModel = "pic"; 1041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump } 10570f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar}; 10670f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar 10770f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar} // end namespace clang 10870f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar 10970f92436f5828c11ef108463da4473d44e114c28Daniel Dunbar#endif 110