Index: lib/CodeGen/CodeGenAction.cpp =================================================================== --- lib/CodeGen/CodeGenAction.cpp +++ lib/CodeGen/CodeGenAction.cpp @@ -126,7 +126,6 @@ CodeGenOpts, C, CoverageInfo)), LinkModules(std::move(LinkModules)) { FrontendTimesIsEnabled = TimePasses; - llvm::TimePassesIsEnabled = TimePasses; } llvm::Module *getModule() const { return Gen->GetModule(); } std::unique_ptr takeModule() { Index: lib/Frontend/CompilerInstance.cpp =================================================================== --- lib/Frontend/CompilerInstance.cpp +++ lib/Frontend/CompilerInstance.cpp @@ -941,8 +941,10 @@ << " based upon " << BACKEND_PACKAGE_STRING << " default target " << llvm::sys::getDefaultTargetTriple() << "\n"; - if (getFrontendOpts().ShowTimers) + if (getFrontendOpts().ShowTimers) { + llvm::TimePassesIsEnabled = true; createFrontendTimer(); + } if (getFrontendOpts().ShowStats || !getFrontendOpts().StatsFile.empty()) llvm::EnableStatistics(false); Index: test/Frontend/ftime-report-bitcode.ll =================================================================== --- /dev/null +++ test/Frontend/ftime-report-bitcode.ll @@ -0,0 +1,14 @@ +; RUN: %clang_cc1 -triple x86_64-apple-darwin10 -ftime-report -emit-obj -o /dev/null %s 2>&1 | FileCheck %s + +target triple ="x86_64-apple-darwin10" + +; Make sure the backend time reports are produced when compiling an IR +; input + +; CHECK: Pass execution timing report +; CHECK: LLVM IR Parsing +; CHECK: Clang front-end time report + +define i32 @foo() { + ret i32 0 +}