diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-11-16 22:38:14 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-11-16 22:38:14 +0000 |
commit | 6143ea28a922ebd1d81a4fc0093d4daeab1e42ac (patch) | |
tree | 3af0b788e626009cba3447f45fafd37392b18208 | |
parent | 6d10ac9ef3435993d0ceae7782fbeee7659af30e (diff) |
clang-cc: Eliminate cyclic dependency in initializing CodeGenOptions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@88980 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | tools/clang-cc/Options.cpp | 21 | ||||
-rw-r--r-- | tools/clang-cc/Options.h | 9 | ||||
-rw-r--r-- | tools/clang-cc/clang-cc.cpp | 17 |
3 files changed, 25 insertions, 22 deletions
diff --git a/tools/clang-cc/Options.cpp b/tools/clang-cc/Options.cpp index 1217a54776..174143d39c 100644 --- a/tools/clang-cc/Options.cpp +++ b/tools/clang-cc/Options.cpp @@ -807,7 +807,9 @@ TargetTriple("triple", // Option Object Construction //===----------------------------------------------------------------------===// -void clang::InitializeCodeGenOptions(CodeGenOptions &Opts) { +void clang::InitializeCodeGenOptions(CodeGenOptions &Opts, + const LangOptions &Lang, + bool TimePasses) { using namespace codegenoptions; // -Os implies -O2 @@ -827,6 +829,13 @@ void clang::InitializeCodeGenOptions(CodeGenOptions &Opts) { Opts.SimplifyLibCalls = 1; Opts.UnrollLoops = (Opts.OptimizationLevel > 1 && !OptSize); + // FIXME: Eliminate this dependency? + if (Lang.NoBuiltin) + Opts.SimplifyLibCalls = 0; + if (Lang.CPlusPlus) + Opts.NoCommon = 1; + Opts.TimePasses = TimePasses; + #ifdef NDEBUG Opts.VerifyModule = 0; #endif @@ -1068,8 +1077,7 @@ void clang::InitializePreprocessorOptions(PreprocessorOptions &Opts) { void clang::InitializeLangOptions(LangOptions &Options, FrontendOptions::InputKind IK, - TargetInfo &Target, - const CodeGenOptions &CodeGenOpts) { + TargetInfo &Target) { using namespace langoptions; bool NoPreprocess = false; @@ -1289,18 +1297,19 @@ void clang::InitializeLangOptions(LangOptions &Options, // The __OPTIMIZE_SIZE__ define is tied to -Oz, which we don't support. Options.OptimizeSize = 0; - Options.Optimize = !!CodeGenOpts.OptimizationLevel; + Options.Optimize = codegenoptions::OptSize || codegenoptions::OptLevel; assert(PICLevel <= 2 && "Invalid value for -pic-level"); Options.PICLevel = PICLevel; Options.GNUInline = !Options.C99; - // FIXME: This is affected by other options (-fno-inline). // This is the __NO_INLINE__ define, which just depends on things like the // optimization level and -fno-inline, not actually whether the backend has // inlining enabled. - Options.NoInline = !CodeGenOpts.OptimizationLevel; + // + // FIXME: This is affected by other options (-fno-inline). + Options.NoInline = !codegenoptions::OptLevel; Options.Static = StaticDefine; diff --git a/tools/clang-cc/Options.h b/tools/clang-cc/Options.h index 461c46ef09..0b67da3594 100644 --- a/tools/clang-cc/Options.h +++ b/tools/clang-cc/Options.h @@ -29,22 +29,23 @@ class TargetOptions; void InitializeAnalyzerOptions(AnalyzerOptions &Opts); +void InitializeCodeGenOptions(CodeGenOptions &Opts, + const LangOptions &Lang, + bool TimePasses); + void InitializeDependencyOutputOptions(DependencyOutputOptions &Opts); void InitializeDiagnosticOptions(DiagnosticOptions &Opts); void InitializeFrontendOptions(FrontendOptions &Opts); -void InitializeCodeGenOptions(CodeGenOptions &Opts); - void InitializeHeaderSearchOptions(HeaderSearchOptions &Opts, llvm::StringRef BuiltinIncludePath, const LangOptions &Lang); void InitializeLangOptions(LangOptions &Options, FrontendOptions::InputKind LK, - TargetInfo &Target, - const CodeGenOptions &CodeGenOpts); + TargetInfo &Target); void InitializePreprocessorOptions(PreprocessorOptions &Opts); diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp index 19c059079f..aea9774420 100644 --- a/tools/clang-cc/clang-cc.cpp +++ b/tools/clang-cc/clang-cc.cpp @@ -165,10 +165,6 @@ ConstructCompilerInvocation(CompilerInvocation &Opts, Diagnostic &Diags, if (!Target) return 0; - // Initialize backend options, which may also be used to key some language - // options. - InitializeCodeGenOptions(Opts.getCodeGenOpts()); - // Initialize frontend options. InitializeFrontendOptions(Opts.getFrontendOpts()); @@ -188,8 +184,7 @@ ConstructCompilerInvocation(CompilerInvocation &Opts, Diagnostic &Diags, // code path to make this obvious. IsAST = (IK == FrontendOptions::IK_AST); if (!IsAST) - InitializeLangOptions(Opts.getLangOpts(), IK, *Target, - Opts.getCodeGenOpts()); + InitializeLangOptions(Opts.getLangOpts(), IK, *Target); // Initialize the static analyzer options. InitializeAnalyzerOptions(Opts.getAnalyzerOpts()); @@ -208,12 +203,10 @@ ConstructCompilerInvocation(CompilerInvocation &Opts, Diagnostic &Diags, // Initialize the preprocessed output options. InitializePreprocessorOutputOptions(Opts.getPreprocessorOutputOpts()); - // Finalize some code generation options which are derived from other places. - if (Opts.getLangOpts().NoBuiltin) - Opts.getCodeGenOpts().SimplifyLibCalls = 0; - if (Opts.getLangOpts().CPlusPlus) - Opts.getCodeGenOpts().NoCommon = 1; - Opts.getCodeGenOpts().TimePasses = Opts.getFrontendOpts().ShowTimers; + // Initialize backend options, which may also be used to key some language + // options. + InitializeCodeGenOptions(Opts.getCodeGenOpts(), Opts.getLangOpts(), + Opts.getFrontendOpts().ShowTimers); return Target.take(); } |