diff --git a/tools/clang-cc/Options.cpp b/tools/clang-cc/Options.cpp
index 1217a54..174143d 100644
--- a/tools/clang-cc/Options.cpp
+++ b/tools/clang-cc/Options.cpp
@@ -807,7 +807,9 @@
 // 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 @@
   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::InitializeLangOptions(LangOptions &Options,
                                   FrontendOptions::InputKind IK,
-                                  TargetInfo &Target,
-                                  const CodeGenOptions &CodeGenOpts) {
+                                  TargetInfo &Target) {
   using namespace langoptions;
 
   bool NoPreprocess = false;
@@ -1289,18 +1297,19 @@
 
   // 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 461c46e..0b67da3 100644
--- a/tools/clang-cc/Options.h
+++ b/tools/clang-cc/Options.h
@@ -29,22 +29,23 @@
 
 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 19c0590..aea9774 100644
--- a/tools/clang-cc/clang-cc.cpp
+++ b/tools/clang-cc/clang-cc.cpp
@@ -165,10 +165,6 @@
   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 @@
   // 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 @@
   // 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();
 }
