[llvm] [AArch64] Convert UADDV(add(zext, zext)) into UADDLV(concat). (PR #78301)
Rin Dobrescu via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 17 01:59:54 PST 2024
================
@@ -16539,14 +16570,20 @@ static SDValue performUADDVAddCombine(SDValue A, SelectionDAG &DAG) {
if (SDValue R = performUADDVAddCombine(A.getOperand(1), DAG))
return DAG.getNode(ISD::ADD, SDLoc(A), A.getValueType(), R,
A.getOperand(0));
+
+ if (SDValue R = DetectZextConcat(A, DAG))
+ return R;
+
return SDValue();
}
static SDValue performUADDVCombine(SDNode *N, SelectionDAG &DAG) {
SDValue A = N->getOperand(0);
if (A.getOpcode() == ISD::ADD)
if (SDValue R = performUADDVAddCombine(A, DAG))
- return DAG.getNode(N->getOpcode(), SDLoc(N), N->getValueType(0), R);
+ return R.getOpcode() == AArch64ISD::UADDLV
----------------
Rin18 wrote:
> Just out of curiosity do we know why the original code is so odd, i.e.
>
> `return DAG.getNode(N->getOpcode(), SDLoc(N), N->getValueType(0), R);`
>
> and why we can't just return `R` instead?
That's because for the DetectAddExtract case, we are returning UADDV(UADDLP(x)), so we need to return UADDV(R) basically. But for DetectZextConcat we are only returning UADDLV(concat) so we can just return R.
https://github.com/llvm/llvm-project/pull/78301
More information about the llvm-commits
mailing list