[llvm] [AArch64][SelectionDAG][SVE] Fold following extend(icmp) patterns (PR #192052)
Ricardo Jesus via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 15 04:56:18 PDT 2026
================
@@ -20941,6 +20941,22 @@ static SDValue performSVEAndCombine(SDNode *N,
SDValue Src = N->getOperand(0);
unsigned Opc = Src->getOpcode();
+ // and(splat(1), sext(setcc_merge_zero)) -> zext(setcc_merge_zero)
+ SDLoc DL(N);
+ SDValue Op0 = N->getOperand(0);
+ SDValue Op1 = N->getOperand(1);
+ if (Op0.getOpcode() == ISD::SPLAT_VECTOR ||
+ Op1.getOpcode() == ISD::SPLAT_VECTOR) {
+ SDValue NonSplatOp = (Op0.getOpcode() == ISD::SPLAT_VECTOR ? Op1 : Op0);
+ SDValue SplatOp = (Op0.getOpcode() == ISD::SPLAT_VECTOR ? Op0 : Op1);
+ if (NonSplatOp.getOpcode() == ISD::SIGN_EXTEND) {
+ SDValue Compare = NonSplatOp.getOperand(0);
+ if (Compare.getOpcode() == AArch64ISD::SETCC_MERGE_ZERO) {
+ return DAG.getNode(ISD::ZERO_EXTEND, DL, N->getValueType(0), Compare);
+ }
+ }
+ }
----------------
rj-jesus wrote:
This looks like a separate change, but is it necessary? Are these patterns being generated in the backend?
I would assume such code (presumably from ACLE?) should have been optimised earlier.
https://github.com/llvm/llvm-project/pull/192052
More information about the llvm-commits
mailing list