[llvm] [MemProf] Add more assertion checking to the edge removal helper (PR #125017)
Teresa Johnson via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 29 19:10:59 PST 2025
https://github.com/teresajohnson created https://github.com/llvm/llvm-project/pull/125017
Check a few unexpected cases (edge already removed, edge not in its
caller or callee edge lists).
>From 0b82780f4e98ce8d09254ff596c141cae327870a Mon Sep 17 00:00:00 2001
From: Teresa Johnson <tejohnson at google.com>
Date: Wed, 29 Jan 2025 19:07:49 -0800
Subject: [PATCH] [MemProf] Add more assertion checking to the edge removal
helper
Check a few unexpected cases (edge already removed, edge not in its
caller or callee edge lists).
---
llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
index 03e2e7089202de..d478088e5bbcb2 100644
--- a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
+++ b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
@@ -1057,6 +1057,7 @@ template <typename DerivedCCG, typename FuncTy, typename CallTy>
void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::removeEdgeFromGraph(
ContextEdge *Edge, EdgeIter *EI, bool CalleeIter) {
assert(!EI || (*EI)->get() == Edge);
+ assert(!Edge->isRemoved());
// Save the Caller and Callee pointers so we can erase Edge from their edge
// lists after clearing Edge below. We do the clearing first in case it is
// destructed after removing from the edge lists (if those were the last
@@ -1069,6 +1070,10 @@ void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::removeEdgeFromGraph(
// reference.
Edge->clear();
+#ifndef NDEBUG
+ auto CalleeCallerCount = Callee->CallerEdges.size();
+ auto CallerCalleeCount = Caller->CalleeEdges.size();
+#endif
if (!EI) {
Callee->eraseCallerEdge(Edge);
Caller->eraseCalleeEdge(Edge);
@@ -1079,6 +1084,8 @@ void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::removeEdgeFromGraph(
Caller->eraseCalleeEdge(Edge);
*EI = Callee->CallerEdges.erase(*EI);
}
+ assert(Callee->CallerEdges.size() < CalleeCallerCount);
+ assert(Caller->CalleeEdges.size() < CallerCalleeCount);
}
template <typename DerivedCCG, typename FuncTy, typename CallTy>
More information about the llvm-commits
mailing list