aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/SandboxIR/User.cpp
diff options
context:
space:
mode:
authorvporpo <vporpodas@google.com>2025-02-14 11:26:21 -0800
committerjoaosaffran <joao.saffran@microsoft.com>2025-02-14 20:26:34 +0000
commitd6b82e8bf4de66278da7660cc194de5823ff05bb (patch)
treedaa6462f9ae16c63d79078abee20f5b65228d4f9 /llvm/lib/SandboxIR/User.cpp
parent2c50fc34dea7495bcc0b125a721151cdb7a7b9d6 (diff)
downloadllvm-users/joaosaffran/123147.zip
llvm-users/joaosaffran/123147.tar.gz
llvm-users/joaosaffran/123147.tar.bz2
[SandboxIR] SetUse callback (#126985)users/joaosaffran/123147
This patch implements a callback mechanism similar to the existing ones, but for getting notified whenever a Use edge gets updated. This is going to be used in a follow up patch by the Dependency Graph.
Diffstat (limited to 'llvm/lib/SandboxIR/User.cpp')
-rw-r--r--llvm/lib/SandboxIR/User.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/llvm/lib/SandboxIR/User.cpp b/llvm/lib/SandboxIR/User.cpp
index d7e4656..43fd565 100644
--- a/llvm/lib/SandboxIR/User.cpp
+++ b/llvm/lib/SandboxIR/User.cpp
@@ -90,17 +90,20 @@ bool User::classof(const Value *From) {
void User::setOperand(unsigned OperandIdx, Value *Operand) {
assert(isa<llvm::User>(Val) && "No operands!");
- Ctx.getTracker().emplaceIfTracking<UseSet>(getOperandUse(OperandIdx));
+ const auto &U = getOperandUse(OperandIdx);
+ Ctx.getTracker().emplaceIfTracking<UseSet>(U);
+ Ctx.runSetUseCallbacks(U, Operand);
// We are delegating to llvm::User::setOperand().
cast<llvm::User>(Val)->setOperand(OperandIdx, Operand->Val);
}
bool User::replaceUsesOfWith(Value *FromV, Value *ToV) {
auto &Tracker = Ctx.getTracker();
- if (Tracker.isTracking()) {
- for (auto OpIdx : seq<unsigned>(0, getNumOperands())) {
- auto Use = getOperandUse(OpIdx);
- if (Use.get() == FromV)
+ for (auto OpIdx : seq<unsigned>(0, getNumOperands())) {
+ auto Use = getOperandUse(OpIdx);
+ if (Use.get() == FromV) {
+ Ctx.runSetUseCallbacks(Use, ToV);
+ if (Tracker.isTracking())
Tracker.emplaceIfTracking<UseSet>(Use);
}
}