[llvm] [LLVM][CodeGen] Add lowering for scalable vector bfloat operations. (PR #109803)
Graham Hunter via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 3 08:39:53 PDT 2024
================
@@ -11917,3 +11923,38 @@ bool TargetLowering::LegalizeSetCCCondCode(SelectionDAG &DAG, EVT VT,
}
return false;
}
+
+SDValue TargetLowering::expandVectorNaryOpBySplitting(SDNode *Node,
+ SelectionDAG &DAG) const {
+ EVT VT = Node->getValueType(0);
+ // Despite its documentation, GetSplitDestVTs will assert if VT cannot be
+ // split into two equal parts.
+ if (!VT.isVector() || !VT.getVectorElementCount().isKnownMultipleOf(2))
+ return SDValue();
+
+ EVT LoVT, HiVT;
+ std::tie(LoVT, HiVT) = DAG.GetSplitDestVTs(VT);
+
+ // Restrict expansion to cases where both parts can be concatenated.
+ if (LoVT != HiVT || !isTypeLegal(LoVT))
+ return SDValue();
+
+ SDLoc DL(Node);
+ unsigned Opcode = Node->getOpcode();
+
+ // Don't expand if the result is likely to be unrolled anyway.
+ if (!isOperationLegalOrCustomOrPromote(Opcode, LoVT))
+ return SDValue();
+
+ SmallVector<SDValue, 4> LoOps, HiOps;
+ for (const SDValue &V : Node->op_values()) {
+ SDValue Lo, Hi;
+ std::tie(Lo, Hi) = DAG.SplitVector(V, DL, LoVT, HiVT);
----------------
huntergr-arm wrote:
Same structured binding style can be applied here.
https://github.com/llvm/llvm-project/pull/109803
More information about the llvm-commits
mailing list