[llvm] [CodeGen][NewPM] Port "RemoveRedundantDebugValues" to NPM (PR #129005)

via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 26 21:45:22 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-debuginfo

Author: Vikram Hegde (vikramRH)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/129005.diff


8 Files Affected:

- (added) llvm/include/llvm/CodeGen/RemoveRedundantDebugValues.h (+25) 
- (modified) llvm/include/llvm/InitializePasses.h (+1-1) 
- (modified) llvm/include/llvm/Passes/CodeGenPassBuilder.h (+1) 
- (modified) llvm/include/llvm/Passes/MachinePassRegistry.def (+1-1) 
- (modified) llvm/lib/CodeGen/CodeGen.cpp (+1-1) 
- (modified) llvm/lib/CodeGen/RemoveRedundantDebugValues.cpp (+39-20) 
- (modified) llvm/lib/Passes/PassBuilder.cpp (+1) 
- (modified) llvm/test/DebugInfo/MIR/X86/remove-redundant-dbg-vals.mir (+1) 


``````````diff
diff --git a/llvm/include/llvm/CodeGen/RemoveRedundantDebugValues.h b/llvm/include/llvm/CodeGen/RemoveRedundantDebugValues.h
new file mode 100644
index 0000000000000..7d6dfa9bb830d
--- /dev/null
+++ b/llvm/include/llvm/CodeGen/RemoveRedundantDebugValues.h
@@ -0,0 +1,25 @@
+//===- llvm/CodeGen/RemoveRedundantDebugValues.h ----------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CODEGEN_REMOVEREDUNDANTDEBUGVALUES_H
+#define LLVM_CODEGEN_REMOVEREDUNDANTDEBUGVALUES_H
+
+#include "llvm/CodeGen/MachinePassManager.h"
+
+namespace llvm {
+
+class RemoveRedundantDebugValuesPass
+    : public PassInfoMixin<RemoveRedundantDebugValuesPass> {
+public:
+  PreservedAnalyses run(MachineFunction &MF,
+                        MachineFunctionAnalysisManager &MFAM);
+};
+
+} // namespace llvm
+
+#endif // LLVM_CODEGEN_REMOVEREDUNDANTDEBUGVALUES_H
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index 0dfb46a210c7e..39e454adba57c 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -266,7 +266,7 @@ void initializeRegionPrinterPass(PassRegistry &);
 void initializeRegionViewerPass(PassRegistry &);
 void initializeRegisterCoalescerLegacyPass(PassRegistry &);
 void initializeRemoveLoadsIntoFakeUsesPass(PassRegistry &);
-void initializeRemoveRedundantDebugValuesPass(PassRegistry &);
+void initializeRemoveRedundantDebugValuesLegacyPass(PassRegistry &);
 void initializeRenameIndependentSubregsLegacyPass(PassRegistry &);
 void initializeReplaceWithVeclibLegacyPass(PassRegistry &);
 void initializeResetMachineFunctionPass(PassRegistry &);
diff --git a/llvm/include/llvm/Passes/CodeGenPassBuilder.h b/llvm/include/llvm/Passes/CodeGenPassBuilder.h
index 30f0742fd2c26..9d998b0e4e8c6 100644
--- a/llvm/include/llvm/Passes/CodeGenPassBuilder.h
+++ b/llvm/include/llvm/Passes/CodeGenPassBuilder.h
@@ -64,6 +64,7 @@
 #include "llvm/CodeGen/RegUsageInfoPropagate.h"
 #include "llvm/CodeGen/RegisterCoalescerPass.h"
 #include "llvm/CodeGen/RegisterUsageInfo.h"
+#include "llvm/CodeGen/RemoveRedundantDebugValues.h"
 #include "llvm/CodeGen/RenameIndependentSubregs.h"
 #include "llvm/CodeGen/ReplaceWithVeclib.h"
 #include "llvm/CodeGen/SafeStack.h"
diff --git a/llvm/include/llvm/Passes/MachinePassRegistry.def b/llvm/include/llvm/Passes/MachinePassRegistry.def
index 67eab42b014c9..a94b5505b7ecc 100644
--- a/llvm/include/llvm/Passes/MachinePassRegistry.def
+++ b/llvm/include/llvm/Passes/MachinePassRegistry.def
@@ -173,6 +173,7 @@ MACHINE_FUNCTION_PASS("reg-usage-collector", RegUsageInfoCollectorPass())
 MACHINE_FUNCTION_PASS("reg-usage-propagation", RegUsageInfoPropagationPass())
 MACHINE_FUNCTION_PASS("register-coalescer", RegisterCoalescerPass())
 MACHINE_FUNCTION_PASS("rename-independent-subregs", RenameIndependentSubregsPass())
+MACHINE_FUNCTION_PASS("removeredundantdebugvalues", RemoveRedundantDebugValuesPass())
 MACHINE_FUNCTION_PASS("require-all-machine-function-properties",
                       RequireAllMachineFunctionPropertiesPass())
 MACHINE_FUNCTION_PASS("stack-coloring", StackColoringPass())
@@ -266,7 +267,6 @@ DUMMY_MACHINE_FUNCTION_PASS("regalloc", RegAllocPass)
 DUMMY_MACHINE_FUNCTION_PASS("regallocscoringpass", RegAllocScoringPass)
 DUMMY_MACHINE_FUNCTION_PASS("regbankselect", RegBankSelectPass)
 DUMMY_MACHINE_FUNCTION_PASS("remove-loads-into-fake-uses", RemoveLoadsIntoFakeUsesPass)
-DUMMY_MACHINE_FUNCTION_PASS("removeredundantdebugvalues", RemoveRedundantDebugValuesPass)
 DUMMY_MACHINE_FUNCTION_PASS("reset-machine-function", ResetMachineFunctionPass)
 DUMMY_MACHINE_FUNCTION_PASS("shrink-wrap", ShrinkWrapPass)
 DUMMY_MACHINE_FUNCTION_PASS("stack-frame-layout", StackFrameLayoutAnalysisPass)
diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp
index 046a3ee42dd6b..c57953299590f 100644
--- a/llvm/lib/CodeGen/CodeGen.cpp
+++ b/llvm/lib/CodeGen/CodeGen.cpp
@@ -118,7 +118,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
   initializeRegUsageInfoPropagationLegacyPass(Registry);
   initializeRegisterCoalescerLegacyPass(Registry);
   initializeRemoveLoadsIntoFakeUsesPass(Registry);
-  initializeRemoveRedundantDebugValuesPass(Registry);
+  initializeRemoveRedundantDebugValuesLegacyPass(Registry);
   initializeRenameIndependentSubregsLegacyPass(Registry);
   initializeSafeStackLegacyPassPass(Registry);
   initializeSelectOptimizePass(Registry);
diff --git a/llvm/lib/CodeGen/RemoveRedundantDebugValues.cpp b/llvm/lib/CodeGen/RemoveRedundantDebugValues.cpp
index ba8dd49ba9291..e9ea50160b7df 100644
--- a/llvm/lib/CodeGen/RemoveRedundantDebugValues.cpp
+++ b/llvm/lib/CodeGen/RemoveRedundantDebugValues.cpp
@@ -6,6 +6,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "llvm/CodeGen/RemoveRedundantDebugValues.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/DenseSet.h"
 #include "llvm/ADT/SmallVector.h"
@@ -33,14 +34,15 @@ STATISTIC(NumRemovedForward, "Number of DBG_VALUEs removed (forward scan)");
 
 namespace {
 
-class RemoveRedundantDebugValues : public MachineFunctionPass {
+struct RemoveRedundantDebugValuesImpl {
+  bool reduceDbgValues(MachineFunction &MF);
+};
+
+class RemoveRedundantDebugValuesLegacy : public MachineFunctionPass {
 public:
   static char ID;
 
-  RemoveRedundantDebugValues();
-
-  bool reduceDbgValues(MachineFunction &MF);
-
+  RemoveRedundantDebugValuesLegacy();
   /// Remove redundant debug value MIs for the given machine function.
   bool runOnMachineFunction(MachineFunction &MF) override;
 
@@ -56,17 +58,18 @@ class RemoveRedundantDebugValues : public MachineFunctionPass {
 //            Implementation
 //===----------------------------------------------------------------------===//
 
-char RemoveRedundantDebugValues::ID = 0;
+char RemoveRedundantDebugValuesLegacy::ID = 0;
 
-char &llvm::RemoveRedundantDebugValuesID = RemoveRedundantDebugValues::ID;
+char &llvm::RemoveRedundantDebugValuesID = RemoveRedundantDebugValuesLegacy::ID;
 
-INITIALIZE_PASS(RemoveRedundantDebugValues, DEBUG_TYPE,
+INITIALIZE_PASS(RemoveRedundantDebugValuesLegacy, DEBUG_TYPE,
                 "Remove Redundant DEBUG_VALUE analysis", false, false)
 
 /// Default construct and initialize the pass.
-RemoveRedundantDebugValues::RemoveRedundantDebugValues()
+RemoveRedundantDebugValuesLegacy::RemoveRedundantDebugValuesLegacy()
     : MachineFunctionPass(ID) {
-  initializeRemoveRedundantDebugValuesPass(*PassRegistry::getPassRegistry());
+  initializeRemoveRedundantDebugValuesLegacyPass(
+      *PassRegistry::getPassRegistry());
 }
 
 // This analysis aims to remove redundant DBG_VALUEs by going forward
@@ -199,7 +202,7 @@ static bool reduceDbgValsBackwardScan(MachineBasicBlock &MBB) {
   return !DbgValsToBeRemoved.empty();
 }
 
-bool RemoveRedundantDebugValues::reduceDbgValues(MachineFunction &MF) {
+bool RemoveRedundantDebugValuesImpl::reduceDbgValues(MachineFunction &MF) {
   LLVM_DEBUG(dbgs() << "\nDebug Value Reduction\n");
 
   bool Changed = false;
@@ -212,16 +215,32 @@ bool RemoveRedundantDebugValues::reduceDbgValues(MachineFunction &MF) {
   return Changed;
 }
 
-bool RemoveRedundantDebugValues::runOnMachineFunction(MachineFunction &MF) {
-  // Skip functions without debugging information.
-  if (!MF.getFunction().getSubprogram())
+bool RemoveRedundantDebugValuesLegacy::runOnMachineFunction(
+    MachineFunction &MF) {
+  // Skip functions without debugging information or functions from NoDebug
+  // compilation units.
+  if (!MF.getFunction().getSubprogram() ||
+      (MF.getFunction().getSubprogram()->getUnit()->getEmissionKind() ==
+       DICompileUnit::NoDebug))
     return false;
 
-  // Skip functions from NoDebug compilation units.
-  if (MF.getFunction().getSubprogram()->getUnit()->getEmissionKind() ==
-      DICompileUnit::NoDebug)
-    return false;
+  return RemoveRedundantDebugValuesImpl().reduceDbgValues(MF);
+}
 
-  bool Changed = reduceDbgValues(MF);
-  return Changed;
+PreservedAnalyses
+RemoveRedundantDebugValuesPass::run(MachineFunction &MF,
+                                    MachineFunctionAnalysisManager &MFAM) {
+  // Skip functions without debugging information or functions from NoDebug
+  // compilation units.
+  if (!MF.getFunction().getSubprogram() ||
+      (MF.getFunction().getSubprogram()->getUnit()->getEmissionKind() ==
+       DICompileUnit::NoDebug))
+    return PreservedAnalyses::all();
+
+  if (!RemoveRedundantDebugValuesImpl().reduceDbgValues(MF))
+    return PreservedAnalyses::all();
+
+  auto PA = getMachineFunctionPassPreservedAnalyses();
+  PA.preserveSet<CFGAnalyses>();
+  return PA;
 }
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index c9825dfc89d3d..6134820370431 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -135,6 +135,7 @@
 #include "llvm/CodeGen/RegUsageInfoPropagate.h"
 #include "llvm/CodeGen/RegisterCoalescerPass.h"
 #include "llvm/CodeGen/RegisterUsageInfo.h"
+#include "llvm/CodeGen/RemoveRedundantDebugValues.h"
 #include "llvm/CodeGen/RenameIndependentSubregs.h"
 #include "llvm/CodeGen/SafeStack.h"
 #include "llvm/CodeGen/SelectOptimize.h"
diff --git a/llvm/test/DebugInfo/MIR/X86/remove-redundant-dbg-vals.mir b/llvm/test/DebugInfo/MIR/X86/remove-redundant-dbg-vals.mir
index 4817fe3115058..1e5fb5943407c 100644
--- a/llvm/test/DebugInfo/MIR/X86/remove-redundant-dbg-vals.mir
+++ b/llvm/test/DebugInfo/MIR/X86/remove-redundant-dbg-vals.mir
@@ -1,4 +1,5 @@
 # RUN: llc %s -o - -run-pass=removeredundantdebugvalues | FileCheck --implicit-check-not=DBG_VALUE %s
+# RUN: llc %s -o - -passes=removeredundantdebugvalues | FileCheck --implicit-check-not=DBG_VALUE %s
 
 ## This checks that the RemoveRedundantDebugValues removes redundant
 ## DBG_VALUEs. The MIR was hand-written, and foo{[2-6]}() are just

``````````

</details>


https://github.com/llvm/llvm-project/pull/129005


More information about the llvm-commits mailing list