aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@sifive.com>2025-10-31 23:38:04 -0700
committerCraig Topper <craig.topper@sifive.com>2025-10-31 23:38:32 -0700
commit06575b48ce3b71cdaa6120853cb959e67d324ead (patch)
tree35d7640f7730e2fa0bae1da72362cf177809a820 /llvm/lib
parent02fef973e99db058595bea483566eb4582ea0d63 (diff)
downloadllvm-06575b48ce3b71cdaa6120853cb959e67d324ead.zip
llvm-06575b48ce3b71cdaa6120853cb959e67d324ead.tar.gz
llvm-06575b48ce3b71cdaa6120853cb959e67d324ead.tar.bz2
Revert "[LegalizeTypes] Use UpdateNodeOperands in SoftPromoteHalfOp_STACKMAP/PATCHPOINT. (#165927)"
This reverts commit 4357fcbbd5012369dbbbe50f99941147895d6611. Causes a crash when combined with #165922.
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
index 780c9b3..58983cb 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
@@ -3977,14 +3977,28 @@ SDValue DAGTypeLegalizer::SoftPromoteHalfOp_ATOMIC_STORE(SDNode *N,
SDValue DAGTypeLegalizer::SoftPromoteHalfOp_STACKMAP(SDNode *N, unsigned OpNo) {
assert(OpNo > 1); // Because the first two arguments are guaranteed legal.
SmallVector<SDValue> NewOps(N->ops());
- NewOps[OpNo] = GetSoftPromotedHalf(NewOps[OpNo]);
- return SDValue(DAG.UpdateNodeOperands(N, NewOps), 0);
+ SDValue Op = N->getOperand(OpNo);
+ NewOps[OpNo] = GetSoftPromotedHalf(Op);
+ SDValue NewNode =
+ DAG.getNode(N->getOpcode(), SDLoc(N), N->getVTList(), NewOps);
+
+ for (unsigned ResNum = 0; ResNum < N->getNumValues(); ResNum++)
+ ReplaceValueWith(SDValue(N, ResNum), NewNode.getValue(ResNum));
+
+ return SDValue(); // Signal that we replaced the node ourselves.
}
SDValue DAGTypeLegalizer::SoftPromoteHalfOp_PATCHPOINT(SDNode *N,
unsigned OpNo) {
assert(OpNo >= 7);
SmallVector<SDValue> NewOps(N->ops());
- NewOps[OpNo] = GetSoftPromotedHalf(NewOps[OpNo]);
- return SDValue(DAG.UpdateNodeOperands(N, NewOps), 0);
+ SDValue Op = N->getOperand(OpNo);
+ NewOps[OpNo] = GetSoftPromotedHalf(Op);
+ SDValue NewNode =
+ DAG.getNode(N->getOpcode(), SDLoc(N), N->getVTList(), NewOps);
+
+ for (unsigned ResNum = 0; ResNum < N->getNumValues(); ResNum++)
+ ReplaceValueWith(SDValue(N, ResNum), NewNode.getValue(ResNum));
+
+ return SDValue(); // Signal that we replaced the node ourselves.
}