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