Skip to content

Commit 7edf6bf

Browse files
woruyuRKSimon
andauthored
[DAG][X86] Use pattern matching to simplify PSADBW+ADD combine (#147637)
This patch refactors the add(psadbw(x, 0), psadbw(y, 0)) -> psadbw(x + y, 0) combine to use SDPatternMatch matchers instead of manually checking opcodes and operands. Co-authored-by: Simon Pilgrim <llvm-dev@redking.me.uk>
1 parent 9c97b38 commit 7edf6bf

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57872,22 +57872,20 @@ static SDValue combineAdd(SDNode *N, SelectionDAG &DAG,
5787257872
}
5787357873
}
5787457874

57875+
SDValue X, Y;
57876+
5787557877
// add(psadbw(X,0),psadbw(Y,0)) -> psadbw(add(X,Y),0)
5787657878
// iff X and Y won't overflow.
57877-
if (Op0.getOpcode() == X86ISD::PSADBW && Op1.getOpcode() == X86ISD::PSADBW &&
57878-
ISD::isBuildVectorAllZeros(Op0.getOperand(1).getNode()) &&
57879-
ISD::isBuildVectorAllZeros(Op1.getOperand(1).getNode())) {
57880-
if (DAG.willNotOverflowAdd(false, Op0.getOperand(0), Op1.getOperand(0))) {
57881-
MVT OpVT = Op0.getOperand(1).getSimpleValueType();
57882-
SDValue Sum =
57883-
DAG.getNode(ISD::ADD, DL, OpVT, Op0.getOperand(0), Op1.getOperand(0));
57884-
return DAG.getNode(X86ISD::PSADBW, DL, VT, Sum,
57885-
getZeroVector(OpVT, Subtarget, DAG, DL));
57886-
}
57879+
if (sd_match(Op0, m_c_BinOp(X86ISD::PSADBW, m_Value(X), m_Zero())) &&
57880+
sd_match(Op1, m_c_BinOp(X86ISD::PSADBW, m_Value(Y), m_Zero())) &&
57881+
DAG.willNotOverflowAdd(/*IsSigned=*/false, X, Y)) {
57882+
MVT OpVT = X.getSimpleValueType();
57883+
SDValue Sum = DAG.getNode(ISD::ADD, DL, OpVT, X, Y);
57884+
return DAG.getNode(X86ISD::PSADBW, DL, VT, Sum,
57885+
getZeroVector(OpVT, Subtarget, DAG, DL));
5788757886
}
5788857887

5788957888
if (VT.isVector()) {
57890-
SDValue X, Y;
5789157889
EVT BoolVT = EVT::getVectorVT(*DAG.getContext(), MVT::i1,
5789257890
VT.getVectorElementCount());
5789357891

0 commit comments

Comments
 (0)