[llvm] 366ac8c - [LegalizeVectorOps] Defer UnrollVectorOp in ExpandFNEG to caller. (#106783)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 2 16:16:16 PDT 2024
Author: Craig Topper
Date: 2024-09-02T16:16:12-07:00
New Revision: 366ac8c09051b6e293ecc0390168f505b56f6654
URL: https://github.com/llvm/llvm-project/commit/366ac8c09051b6e293ecc0390168f505b56f6654
DIFF: https://github.com/llvm/llvm-project/commit/366ac8c09051b6e293ecc0390168f505b56f6654.diff
LOG: [LegalizeVectorOps] Defer UnrollVectorOp in ExpandFNEG to caller. (#106783)
Make ExpandFNEG return SDValue() when it doesn't expand. The caller
already knows how to Unroll when Results is empty.
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
index dc9a90752cd35a..297c349ae4e2f4 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
@@ -937,8 +937,11 @@ void VectorLegalizer::Expand(SDNode *Node, SmallVectorImpl<SDValue> &Results) {
ExpandUINT_TO_FLOAT(Node, Results);
return;
case ISD::FNEG:
- Results.push_back(ExpandFNEG(Node));
- return;
+ if (SDValue Expanded = ExpandFNEG(Node)) {
+ Results.push_back(Expanded);
+ return;
+ }
+ break;
case ISD::FSUB:
ExpandFSUB(Node, Results);
return;
@@ -1777,16 +1780,16 @@ SDValue VectorLegalizer::ExpandFNEG(SDNode *Node) {
EVT IntVT = VT.changeVectorElementTypeToInteger();
// FIXME: The FSUB check is here to force unrolling v1f64 vectors on AArch64.
- if (TLI.isOperationLegalOrCustom(ISD::XOR, IntVT) &&
- TLI.isOperationLegalOrCustom(ISD::FSUB, VT)) {
- SDLoc DL(Node);
- SDValue Cast = DAG.getNode(ISD::BITCAST, DL, IntVT, Node->getOperand(0));
- SDValue SignMask = DAG.getConstant(
- APInt::getSignMask(IntVT.getScalarSizeInBits()), DL, IntVT);
- SDValue Xor = DAG.getNode(ISD::XOR, DL, IntVT, Cast, SignMask);
- return DAG.getNode(ISD::BITCAST, DL, VT, Xor);
- }
- return DAG.UnrollVectorOp(Node);
+ if (!TLI.isOperationLegalOrCustom(ISD::XOR, IntVT) ||
+ !TLI.isOperationLegalOrCustom(ISD::FSUB, VT))
+ return SDValue();
+
+ SDLoc DL(Node);
+ SDValue Cast = DAG.getNode(ISD::BITCAST, DL, IntVT, Node->getOperand(0));
+ SDValue SignMask = DAG.getConstant(
+ APInt::getSignMask(IntVT.getScalarSizeInBits()), DL, IntVT);
+ SDValue Xor = DAG.getNode(ISD::XOR, DL, IntVT, Cast, SignMask);
+ return DAG.getNode(ISD::BITCAST, DL, VT, Xor);
}
void VectorLegalizer::ExpandFSUB(SDNode *Node,
More information about the llvm-commits
mailing list