[PATCH] D130881: [SelectionDAG] Properly copy ExtraInfo on RAUW
Marco Elver via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 4 09:57:05 PDT 2022
melver updated this revision to Diff 450026.
melver added a comment.
Rebase.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D130881/new/
https://reviews.llvm.org/D130881
Files:
llvm/include/llvm/CodeGen/SelectionDAG.h
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
===================================================================
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -1018,6 +1018,9 @@
// If any of the SDDbgValue nodes refer to this SDNode, invalidate
// them and forget about that node.
DbgInfo->erase(N);
+
+ // Invalidate extra info.
+ SDEI.erase(N);
}
#ifndef NDEBUG
@@ -10047,6 +10050,8 @@
// Preserve Debug Values
transferDbgValues(FromN, To);
+ // Preserve extra info.
+ copyExtraInfo(From, To.getNode());
// Iterate over all the existing uses of From. New uses will be added
// to the beginning of the use list, which we avoid visiting.
@@ -10108,6 +10113,8 @@
assert((i < To->getNumValues()) && "Invalid To location");
transferDbgValues(SDValue(From, i), SDValue(To, i));
}
+ // Preserve extra info.
+ copyExtraInfo(From, To);
// Iterate over just the existing users of From. See the comments in
// the ReplaceAllUsesWith above.
@@ -10150,9 +10157,12 @@
if (From->getNumValues() == 1) // Handle the simple case efficiently.
return ReplaceAllUsesWith(SDValue(From, 0), To[0]);
- // Preserve Debug Info.
- for (unsigned i = 0, e = From->getNumValues(); i != e; ++i)
+ for (unsigned i = 0, e = From->getNumValues(); i != e; ++i) {
+ // Preserve Debug Info.
transferDbgValues(SDValue(From, i), To[i]);
+ // Preserve extra info.
+ copyExtraInfo(From, To[i].getNode());
+ }
// Iterate over just the existing users of From. See the comments in
// the ReplaceAllUsesWith above.
@@ -10205,6 +10215,7 @@
// Preserve Debug Info.
transferDbgValues(From, To);
+ copyExtraInfo(From.getNode(), To.getNode());
// Iterate over just the existing users of From. See the comments in
// the ReplaceAllUsesWith above.
@@ -10358,6 +10369,7 @@
return ReplaceAllUsesOfValueWith(*From, *To);
transferDbgValues(*From, *To);
+ copyExtraInfo(From->getNode(), To->getNode());
// Read up all the uses and make records of them. This helps
// processing new uses that are introduced during the
@@ -11803,6 +11815,14 @@
}
}
+void SelectionDAG::copyExtraInfo(SDNode *From, SDNode *To) {
+ assert(From && To);
+ auto I = SDEI.find(From);
+ if (I == SDEI.end())
+ return;
+ SDEI[To] = I->second;
+}
+
#ifndef NDEBUG
static void checkForCyclesHelper(const SDNode *N,
SmallPtrSetImpl<const SDNode*> &Visited,
Index: llvm/include/llvm/CodeGen/SelectionDAG.h
===================================================================
--- llvm/include/llvm/CodeGen/SelectionDAG.h
+++ llvm/include/llvm/CodeGen/SelectionDAG.h
@@ -2169,6 +2169,9 @@
return I != SDEI.end() ? I->second.NoMerge : false;
}
+ /// Copy extra info associated with one node to another.
+ void copyExtraInfo(SDNode *From, SDNode *To);
+
/// Return the current function's default denormal handling kind for the given
/// floating point type.
DenormalMode getDenormalMode(EVT VT) const {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D130881.450026.patch
Type: text/x-patch
Size: 3085 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220804/251b9a3c/attachment.bin>
More information about the llvm-commits
mailing list