Author: Alexander Shaposhnikov Date: 2022-11-18T08:58:31Z New Revision: f102fe73044062542f022182381c17172a999db2
URL: https://github.com/llvm/llvm-project/commit/f102fe73044062542f022182381c17172a999db2 DIFF: https://github.com/llvm/llvm-project/commit/f102fe73044062542f022182381c17172a999db2.diff LOG: Revert "Revert "[opt][clang] Enable using -module-summary/-flto=thin with -S/-emit-llvm"" This reverts commit 7f608a2497c7578b9f3ca98014176ab95cffe3c0 and removes the dependency of Object on IRPrinter. Added: Modified: clang/lib/CodeGen/BackendUtil.cpp clang/test/CodeGen/split-lto-unit.c llvm/include/llvm/IRPrinter/IRPrintingPasses.h llvm/lib/IRPrinter/CMakeLists.txt llvm/lib/IRPrinter/IRPrintingPasses.cpp llvm/test/Bitcode/thinlto-function-summary.ll llvm/tools/opt/NewPMDriver.cpp utils/bazel/llvm-project-overlay/llvm/BUILD.bazel Removed: ################################################################################ diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 9c677140b4a5d..d6a7a9800ec58 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -983,19 +983,24 @@ void EmitAssemblyHelper::RunOptimizationPipeline( if (!actionRequiresCodeGen(Action) && CodeGenOpts.VerifyModule) MPM.addPass(VerifierPass()); - switch (Action) { - case Backend_EmitBC: + if (Action == Backend_EmitBC || Action == Backend_EmitLL) { 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); - MPM.addPass(ThinLTOBitcodeWriterPass(*OS, ThinLinkOS ? &ThinLinkOS->os() - : nullptr)); + 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, + /*EmitLTOSummary=*/true)); + } + } else { // Emit a module summary by default for Regular LTO except for ld64 // targets @@ -1007,17 +1012,13 @@ void EmitAssemblyHelper::RunOptimizationPipeline( TheModule->addModuleFlag(Module::Error, "EnableSplitLTOUnit", uint32_t(1)); } - MPM.addPass( - BitcodeWriterPass(*OS, CodeGenOpts.EmitLLVMUseLists, EmitLTOSummary)); + if (Action == Backend_EmitBC) + MPM.addPass(BitcodeWriterPass(*OS, CodeGenOpts.EmitLLVMUseLists, + EmitLTOSummary)); + else + MPM.addPass(PrintModulePass(*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 941aebafd01b3..b1560b61f3e30 100644 --- a/clang/test/CodeGen/split-lto-unit.c +++ b/clang/test/CodeGen/split-lto-unit.c @@ -1,12 +1,15 @@ // ; 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/IRPrinter/IRPrintingPasses.h b/llvm/include/llvm/IRPrinter/IRPrintingPasses.h index 6cfa7a87af933..8eb7973365172 100644 --- a/llvm/include/llvm/IRPrinter/IRPrintingPasses.h +++ b/llvm/include/llvm/IRPrinter/IRPrintingPasses.h @@ -34,11 +34,13 @@ 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 ShouldPreserveUseListOrder = false, + bool EmitSummaryIndex = false); PreservedAnalyses run(Module &M, AnalysisManager<Module> &); static bool isRequired() { return true; } diff --git a/llvm/lib/IRPrinter/CMakeLists.txt b/llvm/lib/IRPrinter/CMakeLists.txt index 926835ab965bc..0c8c4a0122c15 100644 --- a/llvm/lib/IRPrinter/CMakeLists.txt +++ b/llvm/lib/IRPrinter/CMakeLists.txt @@ -8,6 +8,7 @@ add_llvm_component_library(LLVMIRPrinter intrinsics_gen LINK_COMPONENTS + Analysis Core Support ) diff --git a/llvm/lib/IRPrinter/IRPrintingPasses.cpp b/llvm/lib/IRPrinter/IRPrintingPasses.cpp index 4b31c68bfc2b6..9552ce3862c57 100644 --- a/llvm/lib/IRPrinter/IRPrintingPasses.cpp +++ b/llvm/lib/IRPrinter/IRPrintingPasses.cpp @@ -12,6 +12,7 @@ #include "llvm/IRPrinter/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" @@ -23,11 +24,13 @@ using namespace llvm; PrintModulePass::PrintModulePass() : OS(dbgs()) {} PrintModulePass::PrintModulePass(raw_ostream &OS, const std::string &Banner, - bool ShouldPreserveUseListOrder) + bool ShouldPreserveUseListOrder, + bool EmitSummaryIndex) : OS(OS), Banner(Banner), - ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {} + ShouldPreserveUseListOrder(ShouldPreserveUseListOrder), + EmitSummaryIndex(EmitSummaryIndex) {} -PreservedAnalyses PrintModulePass::run(Module &M, ModuleAnalysisManager &) { +PreservedAnalyses PrintModulePass::run(Module &M, ModuleAnalysisManager &AM) { if (llvm::isFunctionInPrintList("*")) { if (!Banner.empty()) OS << Banner << "\n"; @@ -44,6 +47,16 @@ PreservedAnalyses PrintModulePass::run(Module &M, ModuleAnalysisManager &) { } } } + + 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 ad745dd826acd..68636ed192a19 100644 --- a/llvm/test/Bitcode/thinlto-function-summary.ll +++ b/llvm/test/Bitcode/thinlto-function-summary.ll @@ -31,6 +31,8 @@ ; 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 8c4233f8f5560..4e6a501a4f0a8 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)); + MPM.addPass(PrintModulePass( + Out->os(), "", ShouldPreserveAssemblyUseListOrder, EmitSummaryIndex)); break; case OK_OutputBitcode: MPM.addPass(BitcodeWriterPass(Out->os(), ShouldPreserveBitcodeUseListOrder, diff --git a/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel b/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel index 0cbd51b0591b8..75e9d1933308b 100644 --- a/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel +++ b/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel @@ -915,7 +915,6 @@ cc_library( ":BinaryFormat", ":BitReader", ":Core", - ":IRPrinter", ":IRReader", ":MC", ":MCParser", @@ -1386,6 +1385,7 @@ cc_library( ]), copts = llvm_copts, deps = [ + ":Analysis", ":Core", ":Support", ], _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits