Skip to content

Commit 1fbd7be

Browse files
[LLVM][ISel][SVE] Remove redundant merging fp patterns. (#101351)
Since "vselect cond, (binop, x, y), x" became the canonical form the equivalent PatFrags for "binop x, (vselect cond, y, 0)" are no longer required.
1 parent 14c8feb commit 1fbd7be

File tree

3 files changed

+2
-27
lines changed

3 files changed

+2
-27
lines changed

llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -239,18 +239,6 @@ class AArch64DAGToDAGISel : public SelectionDAGISel {
239239
return false;
240240
}
241241

242-
bool SelectDupNegativeZero(SDValue N) {
243-
switch(N->getOpcode()) {
244-
case AArch64ISD::DUP:
245-
case ISD::SPLAT_VECTOR: {
246-
ConstantFPSDNode *Const = dyn_cast<ConstantFPSDNode>(N->getOperand(0));
247-
return Const && Const->isZero() && Const->isNegative();
248-
}
249-
}
250-
251-
return false;
252-
}
253-
254242
template<MVT::SimpleValueType VT>
255243
bool SelectSVEAddSubImm(SDValue N, SDValue &Imm, SDValue &Shift) {
256244
return SelectSVEAddSubImm(N, VT, Imm, Shift);

llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -213,18 +213,10 @@ def AArch64fadd_p_contract : PatFrag<(ops node:$op1, node:$op2, node:$op3),
213213
(AArch64fadd_p node:$op1, node:$op2, node:$op3), [{
214214
return N->getFlags().hasAllowContract();
215215
}]>;
216-
def AArch64fadd_p_nsz : PatFrag<(ops node:$op1, node:$op2, node:$op3),
217-
(AArch64fadd_p node:$op1, node:$op2, node:$op3), [{
218-
return N->getFlags().hasNoSignedZeros();
219-
}]>;
220216
def AArch64fsub_p_contract : PatFrag<(ops node:$op1, node:$op2, node:$op3),
221217
(AArch64fsub_p node:$op1, node:$op2, node:$op3), [{
222218
return N->getFlags().hasAllowContract();
223219
}]>;
224-
def AArch64fsub_p_nsz : PatFrag<(ops node:$op1, node:$op2, node:$op3),
225-
(AArch64fsub_p node:$op1, node:$op2, node:$op3), [{
226-
return N->getFlags().hasNoSignedZeros();
227-
}]>;
228220

229221
def SDT_AArch64Arith_Imm : SDTypeProfile<1, 3, [
230222
SDTCisVec<0>, SDTCisVec<1>, SDTCisVec<2>, SDTCisVT<3,i32>,
@@ -281,15 +273,11 @@ def AArch64not_mt : PatFrags<(ops node:$pg, node:$op, node:$pt), [(int_aarch64_
281273
def AArch64fmul_m1 : VSelectPredOrPassthruPatFrags<int_aarch64_sve_fmul, AArch64fmul_p>;
282274
def AArch64fadd_m1 : PatFrags<(ops node:$pg, node:$op1, node:$op2), [
283275
(int_aarch64_sve_fadd node:$pg, node:$op1, node:$op2),
284-
(vselect node:$pg, (AArch64fadd_p (SVEAllActive), node:$op1, node:$op2), node:$op1),
285-
(AArch64fadd_p_nsz (SVEAllActive), node:$op1, (vselect node:$pg, node:$op2, (SVEDup0))),
286-
(AArch64fadd_p (SVEAllActive), node:$op1, (vselect node:$pg, node:$op2, (SVEDupNeg0)))
276+
(vselect node:$pg, (AArch64fadd_p (SVEAllActive), node:$op1, node:$op2), node:$op1)
287277
]>;
288278
def AArch64fsub_m1 : PatFrags<(ops node:$pg, node:$op1, node:$op2), [
289279
(int_aarch64_sve_fsub node:$pg, node:$op1, node:$op2),
290-
(vselect node:$pg, (AArch64fsub_p (SVEAllActive), node:$op1, node:$op2), node:$op1),
291-
(AArch64fsub_p (SVEAllActive), node:$op1, (vselect node:$pg, node:$op2, (SVEDup0))),
292-
(AArch64fsub_p_nsz (SVEAllActive), node:$op1, (vselect node:$pg, node:$op2, (SVEDupNeg0)))
280+
(vselect node:$pg, (AArch64fsub_p (SVEAllActive), node:$op1, node:$op2), node:$op1)
293281
]>;
294282

295283
def AArch64shadd : PatFrags<(ops node:$pg, node:$op1, node:$op2),

llvm/lib/Target/AArch64/SVEInstrFormats.td

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,6 @@ multiclass SVE_1_Op_PassthruUndef_Round_Pat<ValueType vtd, SDPatternOperator op,
446446
}
447447

448448
def SVEDup0 : ComplexPattern<vAny, 0, "SelectDupZero", []>;
449-
def SVEDupNeg0 : ComplexPattern<vAny, 0, "SelectDupNegativeZero", []>;
450449

451450
class SVE_1_Op_PassthruZero_Pat<ValueType vtd, SDPatternOperator op, ValueType vt1,
452451
ValueType vt2, Instruction inst>

0 commit comments

Comments
 (0)