diff options
author | vporpo <vporpodas@google.com> | 2025-02-14 11:26:21 -0800 |
---|---|---|
committer | joaosaffran <joao.saffran@microsoft.com> | 2025-02-14 20:26:34 +0000 |
commit | d6b82e8bf4de66278da7660cc194de5823ff05bb (patch) | |
tree | daa6462f9ae16c63d79078abee20f5b65228d4f9 /llvm/lib/SandboxIR/User.cpp | |
parent | 2c50fc34dea7495bcc0b125a721151cdb7a7b9d6 (diff) | |
download | llvm-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.cpp | 13 |
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); } } |