[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