[Mlir-commits] [mlir] Add method to invalidate cached symbol table (PR #138014)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Wed Apr 30 11:40:18 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir

Author: Michele Scuttari (mscuttari)

<details>
<summary>Changes</summary>

This PR adds a method to the `SymbolTableCollection` class to invalidate the cached symbol table for an operation.

This is important when doing IR modifications that erase and also create operations having the `OpTrait::SymbolTable` trait. If a symbol table of an erased operation is not invalidated, a new operation sharing the same address would be associated with outdated, and wrong, information.

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


2 Files Affected:

- (modified) mlir/include/mlir/IR/SymbolTable.h (+7) 
- (modified) mlir/lib/IR/SymbolTable.cpp (+7) 


``````````diff
diff --git a/mlir/include/mlir/IR/SymbolTable.h b/mlir/include/mlir/IR/SymbolTable.h
index 597c6a9a1d891..a22d6f3a0426b 100644
--- a/mlir/include/mlir/IR/SymbolTable.h
+++ b/mlir/include/mlir/IR/SymbolTable.h
@@ -316,6 +316,13 @@ class SymbolTableCollection {
   /// Lookup, or create, a symbol table for an operation.
   SymbolTable &getSymbolTable(Operation *op);
 
+  /// Invalidate the cached symbol table for an operation.
+  /// This is important when doing IR modifications that erase and also create
+  /// operations having the 'OpTrait::SymbolTable' trait. If a symbol table of
+  /// an erased operation is not invalidated, a new operation sharing the same
+  /// address would be associated with outdated, and wrong, information.
+  void invalidateSymbolTable(Operation *op);
+
 private:
   friend class LockedSymbolTableCollection;
 
diff --git a/mlir/lib/IR/SymbolTable.cpp b/mlir/lib/IR/SymbolTable.cpp
index 76c9b7b1e8afa..6a97adaba6cdc 100644
--- a/mlir/lib/IR/SymbolTable.cpp
+++ b/mlir/lib/IR/SymbolTable.cpp
@@ -998,6 +998,13 @@ SymbolTable &SymbolTableCollection::getSymbolTable(Operation *op) {
   return *it.first->second;
 }
 
+void SymbolTableCollection::invalidateSymbolTable(Operation *op) {
+  auto it = symbolTables.find(op);
+
+  if (it != symbolTables.end())
+    symbolTables.erase(it);
+}
+
 //===----------------------------------------------------------------------===//
 // LockedSymbolTableCollection
 //===----------------------------------------------------------------------===//

``````````

</details>


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


More information about the Mlir-commits mailing list