From 48ecc7affef226b2bac1e08bdfdc059306a1734c Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 3 Jun 2009 13:29:08 +0000 Subject: Import Clang, at r72770. --- tools/clang-cc/clang-cc.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'tools') diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp index a0ccafa..0e0a072 100644 --- a/tools/clang-cc/clang-cc.cpp +++ b/tools/clang-cc/clang-cc.cpp @@ -667,6 +667,10 @@ static llvm::cl::opt OptSize("Os", llvm::cl::desc("Optimize for size")); static llvm::cl::opt +DisableLLVMOptimizations("disable-llvm-optzns", + llvm::cl::desc("Don't run LLVM optimization passes")); + +static llvm::cl::opt NoCommon("fno-common", llvm::cl::desc("Compile common globals like normal definitions"), llvm::cl::ValueDisallowed); @@ -1420,16 +1424,26 @@ static void InitializeCompileOptions(CompileOptions &Opts, const llvm::StringMap &Features) { Opts.OptimizeSize = OptSize; Opts.DebugInfo = GenerateDebugInfo; - if (OptSize) { - // -Os implies -O2 - // FIXME: Diagnose conflicting options. - Opts.OptimizationLevel = 2; + + if (DisableLLVMOptimizations) { + Opts.OptimizationLevel = 0; + Opts.Inlining = CompileOptions::NoInlining; } else { - Opts.OptimizationLevel = OptLevel; + if (OptSize) { + // -Os implies -O2 + Opts.OptimizationLevel = 2; + } else { + Opts.OptimizationLevel = OptLevel; + } + + // We must always run at least the always inlining pass. + if (Opts.OptimizationLevel > 1) + Opts.Inlining = CompileOptions::NormalInlining; + else + Opts.Inlining = CompileOptions::OnlyAlwaysInlining; } // FIXME: There are llvm-gcc options to control these selectively. - Opts.InlineFunctions = (Opts.OptimizationLevel > 1); Opts.UnrollLoops = (Opts.OptimizationLevel > 1 && !OptSize); Opts.SimplifyLibCalls = !LangOpts.NoBuiltin; -- cgit v1.1