[llvm] [AArch64] Lower masked.expandload intrinsic using SVE2p2/SME2p2 EXPAND (PR #190999)
Paul Walker via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 15 05:21:48 PDT 2026
================
@@ -7436,16 +7365,52 @@ SDValue AArch64TargetLowering::LowerMLOAD(SDValue Op, SelectionDAG &DAG) const {
SDValue PassThru = LoadNode->getPassThru();
SDValue Mask = LoadNode->getMask();
- if (PassThru->isUndef() || isZerosVector(PassThru.getNode()))
+ if (!LoadNode->isExpandingLoad()) {
+ if (PassThru->isUndef() || isZerosVector(PassThru.getNode()))
+ return Op;
+
+ SDValue Load = DAG.getMaskedLoad(
+ VT, DL, LoadNode->getChain(), LoadNode->getBasePtr(),
+ LoadNode->getOffset(), Mask, DAG.getUNDEF(VT), LoadNode->getMemoryVT(),
+ LoadNode->getMemOperand(), LoadNode->getAddressingMode(),
+ LoadNode->getExtensionType());
+
+ SDValue Result = DAG.getSelect(DL, VT, Mask, Load, PassThru);
+ return DAG.getMergeValues({Result, Load.getValue(1)}, DL);
+ }
+
+ // Return if EXPAND instruction is not available.
+ if ((!Subtarget->isSVEAvailable() || !Subtarget->hasSVE2p2()) &&
+ (!Subtarget->isSVEorStreamingSVEAvailable() || !Subtarget->hasSME2p2()))
return Op;
----------------
paulwalker-arm wrote:
This should return `SDValue();` to say the operation is not legal and we don't know how to lower it.
https://github.com/llvm/llvm-project/pull/190999
More information about the llvm-commits
mailing list