[llvm] [LLVM-Reduce] - Distinct Metadata Reduction (PR #104624)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 16 23:52:30 PDT 2024


================
@@ -0,0 +1,147 @@
+//===- ReduceDistinctMetadata.cpp - Specialized Delta Pass ------------------------===//
+//
+// 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
+//
+//===------------------------------------------------------------------------------===//
+//
+// This file implements two functions used by the Generic Delta Debugging
+// Algorithm, which are used to reduce unnamed distinct metadata nodes.
+//
+//===------------------------------------------------------------------------------===//
+
+#include "ReduceDistinctMetadata.h"
+#include "Delta.h"
+#include "llvm/ADT/Sequence.h"
+#include "llvm/ADT/SetVector.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/IR/InstIterator.h"
+#include <algorithm>
+#include <queue>
+
+using namespace llvm;
+
+// Traverse the graph breadth-first and try to remove unnamed metadata nodes
+void reduceNodes(MDNode *Root,
+                 SetVector<std::pair<unsigned int, MDNode *>> &NodesToDelete,
+                 MDNode *TemporaryNode, Oracle &O, Module &Program) {
+  std::queue<MDNode *> NodesToTraverse{};
+  // Keep track of visited nodes not to get into loops
+  SetVector<MDNode *> VisitedNodes{};
+  NodesToTraverse.push(Root);
+
+  while (!NodesToTraverse.empty()) {
+    MDNode *CurrentNode = NodesToTraverse.front();
+    NodesToTraverse.pop();
+
+    // Mark the nodes for removal
+    for (unsigned int I = 0; I < CurrentNode->getNumOperands(); ++I) {
+      if (MDNode *Operand =
+              dyn_cast<MDNode>(CurrentNode->getOperand(I).get())) {
+        // Check whether node has been visited
+        if (!VisitedNodes.contains(Operand)) {
+          NodesToTraverse.push(Operand);
+          VisitedNodes.insert(Operand);
+        }
+        // Delete the node only if it is distinct
+        if (Operand->isDistinct())
----------------
arsenm wrote:

Braces ,or remove the "Add to removal list" comment 

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


More information about the llvm-commits mailing list