[llvm] [NewPM] Set diagnostic handler in `MachineModuleAnalysis` (PR #88229)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 9 23:29:22 PDT 2024
https://github.com/paperchalice updated https://github.com/llvm/llvm-project/pull/88229
>From 7b9c8f7ace34d84aae91ed47345eb383dffd7952 Mon Sep 17 00:00:00 2001
From: PaperChalice <liujunchang97 at outlook.com>
Date: Wed, 10 Apr 2024 10:32:54 +0800
Subject: [PATCH] [NewPM] Set diagnostic handler in `MachineModuleAnalysis`
`setDiagnosticHandler` is idempotent.
---
llvm/lib/CodeGen/MachineModuleInfo.cpp | 12 +++++++++++-
llvm/unittests/CodeGen/PassManagerTest.cpp | 14 ++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/CodeGen/MachineModuleInfo.cpp b/llvm/lib/CodeGen/MachineModuleInfo.cpp
index f24288bb69de00..1dba591d02b6c2 100644
--- a/llvm/lib/CodeGen/MachineModuleInfo.cpp
+++ b/llvm/lib/CodeGen/MachineModuleInfo.cpp
@@ -213,7 +213,6 @@ static unsigned getLocCookie(const SMDiagnostic &SMD, const SourceMgr &SrcMgr,
bool MachineModuleInfoWrapperPass::doInitialization(Module &M) {
MMI.initialize();
MMI.TheModule = &M;
- // FIXME: Do this for new pass manager.
LLVMContext &Ctx = M.getContext();
MMI.getContext().setDiagnosticHandler(
[&Ctx, &M](const SMDiagnostic &SMD, bool IsInlineAsm,
@@ -240,6 +239,17 @@ AnalysisKey MachineModuleAnalysis::Key;
MachineModuleAnalysis::Result
MachineModuleAnalysis::run(Module &M, ModuleAnalysisManager &) {
MMI.TheModule = &M;
+ LLVMContext &Ctx = M.getContext();
+ MMI.getContext().setDiagnosticHandler(
+ [&Ctx, &M](const SMDiagnostic &SMD, bool IsInlineAsm,
+ const SourceMgr &SrcMgr,
+ std::vector<const MDNode *> &LocInfos) {
+ unsigned LocCookie = 0;
+ if (IsInlineAsm)
+ LocCookie = getLocCookie(SMD, SrcMgr, LocInfos);
+ Ctx.diagnose(
+ DiagnosticInfoSrcMgr(SMD, M.getName(), IsInlineAsm, LocCookie));
+ });
MMI.DbgInfoAvailable =
!DisableDebugInfoPrinting && !M.debug_compile_units().empty();
return Result(MMI);
diff --git a/llvm/unittests/CodeGen/PassManagerTest.cpp b/llvm/unittests/CodeGen/PassManagerTest.cpp
index 4283eb01a9c8f2..0aa519f5d634c5 100644
--- a/llvm/unittests/CodeGen/PassManagerTest.cpp
+++ b/llvm/unittests/CodeGen/PassManagerTest.cpp
@@ -125,6 +125,15 @@ struct TestMachineModulePass : public PassInfoMixin<TestMachineModulePass> {
std::vector<int> &Counts;
};
+struct ReportWarningPass : public PassInfoMixin<ReportWarningPass> {
+ PreservedAnalyses run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ auto &Ctx = MF.getContext();
+ Ctx.reportWarning(SMLoc(), "Test warning message.");
+ return PreservedAnalyses::all();
+ }
+};
+
std::unique_ptr<Module> parseIR(LLVMContext &Context, const char *IR) {
SMDiagnostic Err;
return parseAssemblyString(IR, Err, Context);
@@ -202,12 +211,17 @@ TEST_F(PassManagerTest, Basic) {
TestMachineFunctionPass(Count, Counts)));
MPM.addPass(TestMachineModulePass(Count, Counts));
MFPM.addPass(TestMachineFunctionPass(Count, Counts));
+ MFPM.addPass(ReportWarningPass());
MPM.addPass(createModuleToMachineFunctionPassAdaptor(std::move(MFPM)));
+ testing::internal::CaptureStderr();
MPM.run(*M, MAM);
+ std::string Output = testing::internal::GetCapturedStderr();
EXPECT_EQ((std::vector<int>{10, 16, 18, 20, 30, 36, 38, 40}), Counts);
EXPECT_EQ(40, Count);
+ EXPECT_TRUE(Output.find("warning: <unknown>:0: Test warning message.") !=
+ std::string::npos);
}
} // namespace
More information about the llvm-commits
mailing list