Author: Fangrui Song Date: 2022-11-14T15:51:03-08:00 New Revision: 77bf0df376d7fcd305d9576511e7d0806b96971a
URL: https://github.com/llvm/llvm-project/commit/77bf0df376d7fcd305d9576511e7d0806b96971a DIFF: https://github.com/llvm/llvm-project/commit/77bf0df376d7fcd305d9576511e7d0806b96971a.diff LOG: Revert "[opt][clang] Enable using -module-summary/-flto=thin with -S/-emit-llvm" This reverts commit bf8381a8bce28fc69857645cc7e84a72317e693e. There is a layering violation: LLVMAnalysis depends on LLVMCore, so LLVMCore should not include LLVMAnalysis header llvm/Analysis/ModuleSummaryAnalysis.h Added: Modified: clang/lib/CodeGen/BackendUtil.cpp clang/test/CodeGen/split-lto-unit.c llvm/include/llvm/IR/IRPrintingPasses.h llvm/lib/Analysis/ModuleSummaryAnalysis.cpp llvm/lib/IR/IRPrintingPasses.cpp llvm/test/Bitcode/thinlto-function-summary.ll llvm/tools/opt/NewPMDriver.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 26633f8007037..41f9ce3a009da 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -978,24 +978,19 @@ void EmitAssemblyHelper::RunOptimizationPipeline( if (!actionRequiresCodeGen(Action) && CodeGenOpts.VerifyModule) MPM.addPass(VerifierPass()); - if (Action == Backend_EmitBC || Action == Backend_EmitLL) { + switch (Action) { + case Backend_EmitBC: if (CodeGenOpts.PrepareForThinLTO && !CodeGenOpts.DisableLLVMPasses) { + if (!CodeGenOpts.ThinLinkBitcodeFile.empty()) { + ThinLinkOS = openOutputFile(CodeGenOpts.ThinLinkBitcodeFile); + if (!ThinLinkOS) + return; + } if (!TheModule->getModuleFlag("EnableSplitLTOUnit")) TheModule->addModuleFlag(Module::Error, "EnableSplitLTOUnit", CodeGenOpts.EnableSplitLTOUnit); - if (Action == Backend_EmitBC) { - if (!CodeGenOpts.ThinLinkBitcodeFile.empty()) { - ThinLinkOS = openOutputFile(CodeGenOpts.ThinLinkBitcodeFile); - if (!ThinLinkOS) - return; - } - MPM.addPass(ThinLTOBitcodeWriterPass(*OS, ThinLinkOS ? &ThinLinkOS->os() - : nullptr)); - } else { - MPM.addPass(PrintModulePass(*OS, "", CodeGenOpts.EmitLLVMUseLists, - true /* EmitLTOSummary */)); - } - + MPM.addPass(ThinLTOBitcodeWriterPass(*OS, ThinLinkOS ? &ThinLinkOS->os() + : nullptr)); } else { // Emit a module summary by default for Regular LTO except for ld64 // targets @@ -1007,13 +1002,17 @@ void EmitAssemblyHelper::RunOptimizationPipeline( TheModule->addModuleFlag(Module::Error, "EnableSplitLTOUnit", uint32_t(1)); } - if (Action == Backend_EmitBC) - MPM.addPass(BitcodeWriterPass(*OS, CodeGenOpts.EmitLLVMUseLists, - EmitLTOSummary)); - else - MPM.addPass(PrintModulePass(*OS, "", CodeGenOpts.EmitLLVMUseLists, - EmitLTOSummary)); + MPM.addPass( + BitcodeWriterPass(*OS, CodeGenOpts.EmitLLVMUseLists, EmitLTOSummary)); } + break; + + case Backend_EmitLL: + MPM.addPass(PrintModulePass(*OS, "", CodeGenOpts.EmitLLVMUseLists)); + break; + + default: + break; } // Now that we have all of the passes ready, run them. diff --git a/clang/test/CodeGen/split-lto-unit.c b/clang/test/CodeGen/split-lto-unit.c index b1560b61f3e30..941aebafd01b3 100644 --- a/clang/test/CodeGen/split-lto-unit.c +++ b/clang/test/CodeGen/split-lto-unit.c @@ -1,15 +1,12 @@ // ; Check that -flto=thin without -fsplit-lto-unit has EnableSplitLTOUnit = 0 // RUN: %clang_cc1 -flto=thin -emit-llvm-bc < %s | llvm-dis -o - | FileCheck %s -// RUN: %clang_cc1 -flto=thin -emit-llvm < %s | FileCheck %s // CHECK: !{i32 1, !"EnableSplitLTOUnit", i32 0} // // ; Check that -flto=thin with -fsplit-lto-unit has EnableSplitLTOUnit = 1 // RUN: %clang_cc1 -flto=thin -fsplit-lto-unit -emit-llvm-bc < %s | llvm-dis -o - | FileCheck %s --check-prefix=SPLIT -// RUN: %clang_cc1 -flto=thin -fsplit-lto-unit -emit-llvm < %s | FileCheck %s --check-prefix=SPLIT // SPLIT: !{i32 1, !"EnableSplitLTOUnit", i32 1} // // ; Check that regular LTO has EnableSplitLTOUnit = 1 // RUN: %clang_cc1 -flto -triple x86_64-pc-linux-gnu -emit-llvm-bc < %s | llvm-dis -o - | FileCheck %s --implicit-check-not="EnableSplitLTOUnit" --check-prefix=SPLIT -// RUN: %clang_cc1 -flto -triple x86_64-pc-linux-gnu -emit-llvm < %s | FileCheck %s --implicit-check-not="EnableSplitLTOUnit" --check-prefix=SPLIT int main(void) {} diff --git a/llvm/include/llvm/IR/IRPrintingPasses.h b/llvm/include/llvm/IR/IRPrintingPasses.h index 5f4880643c52d..3fba5b81e37a9 100644 --- a/llvm/include/llvm/IR/IRPrintingPasses.h +++ b/llvm/include/llvm/IR/IRPrintingPasses.h @@ -58,13 +58,11 @@ class PrintModulePass : public PassInfoMixin<PrintModulePass> { raw_ostream &OS; std::string Banner; bool ShouldPreserveUseListOrder; - bool EmitSummaryIndex; public: PrintModulePass(); PrintModulePass(raw_ostream &OS, const std::string &Banner = "", - bool ShouldPreserveUseListOrder = false, - bool EmitSummaryIndex = false); + bool ShouldPreserveUseListOrder = false); PreservedAnalyses run(Module &M, AnalysisManager<Module> &); static bool isRequired() { return true; } diff --git a/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp b/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp index 14fe63247fdad..52827c210b5ad 100644 --- a/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp +++ b/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp @@ -880,6 +880,8 @@ ModuleSummaryIndex llvm::buildModuleSummaryIndex( return Index; } +AnalysisKey ModuleSummaryIndexAnalysis::Key; + ModuleSummaryIndex ModuleSummaryIndexAnalysis::run(Module &M, ModuleAnalysisManager &AM) { ProfileSummaryInfo &PSI = AM.getResult<ProfileSummaryAnalysis>(M); diff --git a/llvm/lib/IR/IRPrintingPasses.cpp b/llvm/lib/IR/IRPrintingPasses.cpp index 912f5175f7461..8d6fe1eb61347 100644 --- a/llvm/lib/IR/IRPrintingPasses.cpp +++ b/llvm/lib/IR/IRPrintingPasses.cpp @@ -12,7 +12,6 @@ #include "llvm/IR/IRPrintingPasses.h" #include "llvm/ADT/StringRef.h" -#include "llvm/Analysis/ModuleSummaryAnalysis.h" #include "llvm/IR/Function.h" #include "llvm/IR/Module.h" #include "llvm/IR/PrintPasses.h" @@ -25,23 +24,19 @@ using namespace llvm; PrintModulePass::PrintModulePass() : OS(dbgs()) {} PrintModulePass::PrintModulePass(raw_ostream &OS, const std::string &Banner, - bool ShouldPreserveUseListOrder, - bool EmitSummaryIndex) + bool ShouldPreserveUseListOrder) : OS(OS), Banner(Banner), - ShouldPreserveUseListOrder(ShouldPreserveUseListOrder), - EmitSummaryIndex(EmitSummaryIndex) {} + ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {} - -AnalysisKey ModuleSummaryIndexAnalysis::Key; - -PreservedAnalyses PrintModulePass::run(Module &M, ModuleAnalysisManager &AM) { +PreservedAnalyses PrintModulePass::run(Module &M, ModuleAnalysisManager &) { if (llvm::isFunctionInPrintList("*")) { if (!Banner.empty()) OS << Banner << "\n"; M.print(OS, nullptr, ShouldPreserveUseListOrder); - } else { + } + else { bool BannerPrinted = false; - for (const auto &F : M.functions()) { + for(const auto &F : M.functions()) { if (llvm::isFunctionInPrintList(F.getName())) { if (!BannerPrinted && !Banner.empty()) { OS << Banner << "\n"; @@ -51,16 +46,6 @@ PreservedAnalyses PrintModulePass::run(Module &M, ModuleAnalysisManager &AM) { } } } - - ModuleSummaryIndex *Index = - EmitSummaryIndex ? &(AM.getResult<ModuleSummaryIndexAnalysis>(M)) - : nullptr; - if (Index) { - if (Index->modulePaths().empty()) - Index->addModule("", 0); - Index->print(OS); - } - return PreservedAnalyses::all(); } diff --git a/llvm/test/Bitcode/thinlto-function-summary.ll b/llvm/test/Bitcode/thinlto-function-summary.ll index 68636ed192a19..ad745dd826acd 100644 --- a/llvm/test/Bitcode/thinlto-function-summary.ll +++ b/llvm/test/Bitcode/thinlto-function-summary.ll @@ -31,8 +31,6 @@ ; RUN: opt -passes=name-anon-globals -module-summary < %s | llvm-dis | FileCheck %s -; RUN: opt -passes=name-anon-globals -module-summary -S < %s | FileCheck %s -; RUN: opt -passes=name-anon-globals -module-summary -S < %s | llvm-as | llvm-dis | FileCheck %s ; Check that this round-trips correctly. ; ModuleID = '<stdin>' diff --git a/llvm/tools/opt/NewPMDriver.cpp b/llvm/tools/opt/NewPMDriver.cpp index 3ed2dd87a055a..d4bf250bc78de 100644 --- a/llvm/tools/opt/NewPMDriver.cpp +++ b/llvm/tools/opt/NewPMDriver.cpp @@ -443,16 +443,16 @@ bool llvm::runPassPipeline(StringRef Arg0, Module &M, TargetMachine *TM, MPM.addPass(NewPMCheckDebugifyPass(false, "", &DIStatsMap)); if (VerifyDIPreserve) MPM.addPass(NewPMCheckDebugifyPass( - false, "", nullptr, DebugifyMode::OriginalDebugInfo, - &DebugInfoBeforePass, VerifyDIPreserveExport)); + false, "", nullptr, DebugifyMode::OriginalDebugInfo, &DebugInfoBeforePass, + VerifyDIPreserveExport)); // Add any relevant output pass at the end of the pipeline. switch (OK) { case OK_NoOutput: break; // No output pass needed. case OK_OutputAssembly: - MPM.addPass(PrintModulePass( - Out->os(), "", ShouldPreserveAssemblyUseListOrder, EmitSummaryIndex)); + MPM.addPass( + PrintModulePass(Out->os(), "", ShouldPreserveAssemblyUseListOrder)); break; case OK_OutputBitcode: MPM.addPass(BitcodeWriterPass(Out->os(), ShouldPreserveBitcodeUseListOrder, _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits