Skip to content

Commit 3a1ce17

Browse files
committed
Fix merge issues
1 parent 1ed6ae3 commit 3a1ce17

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29537,20 +29537,31 @@ SDValue AArch64TargetLowering::LowerVECTOR_HISTOGRAM(SDValue Op,
2953729537
SDValue
2953829538
AArch64TargetLowering::LowerPARTIAL_REDUCE_MLA(SDValue Op,
2953929539
SelectionDAG &DAG) const {
29540+
bool Scalable = Op.getValueType().isScalableVector();
29541+
if (Scalable && !Subtarget->isSVEorStreamingSVEAvailable())
29542+
return SDValue();
29543+
if (!Scalable && (!Subtarget->isNeonAvailable() || !Subtarget->hasDotProd()))
29544+
return SDValue();
2954029545

2954129546
SDLoc DL(Op);
2954229547

2954329548
SDValue Acc = Op.getOperand(0);
2954429549
SDValue LHS = Op.getOperand(1);
2954529550
SDValue RHS = Op.getOperand(2);
2954629551
EVT ResultVT = Op.getValueType();
29547-
assert(ResultVT == MVT::nxv2i64 && LHS.getValueType() == MVT::nxv16i8);
2954829552

29549-
SDValue DotNode = DAG.getNode(Op.getOpcode(), DL, MVT::nxv4i32,
29550-
DAG.getConstant(0, DL, MVT::nxv4i32), LHS, RHS);
29553+
assert((Scalable && ResultVT == MVT::nxv2i64 &&
29554+
LHS.getValueType() == MVT::nxv16i8) ||
29555+
(!Scalable && ResultVT == MVT::v2i64 &&
29556+
LHS.getValueType() == MVT::v16i8));
29557+
29558+
EVT DotVT = Scalable ? MVT::nxv4i32 : MVT::v4i32;
29559+
SDValue DotNode = DAG.getNode(Op.getOpcode(), DL, DotVT,
29560+
DAG.getConstant(0, DL, DotVT), LHS, RHS);
2955129561

2955229562
bool IsUnsigned = Op.getOpcode() == ISD::PARTIAL_REDUCE_UMLA;
29553-
if (Subtarget->hasSVE2() || Subtarget->isStreamingSVEAvailable()) {
29563+
if (Scalable &&
29564+
(Subtarget->hasSVE2() || Subtarget->isStreamingSVEAvailable())) {
2955429565
unsigned LoOpcode = IsUnsigned ? AArch64ISD::UADDWB : AArch64ISD::SADDWB;
2955529566
unsigned HiOpcode = IsUnsigned ? AArch64ISD::UADDWT : AArch64ISD::SADDWT;
2955629567
SDValue Lo = DAG.getNode(LoOpcode, DL, ResultVT, Acc, DotNode);

0 commit comments

Comments
 (0)