[AArch64][SVE] Fold vselect into predicated fmul, fsub and fadd
Fold vselect with an unpredicated fmul/fsub/fadd operand into a predicated fmul/fsub/fadd:
(vselect (p) (op (a) (b)) (a)) => (op -> (p) (a) (b))
Differential D117689
[AArch64][SVE] Fold vselect into predicated fmul, fsub and fadd MattDevereau on Jan 19 2022, 8:50 AM. Authored by
Details [AArch64][SVE] Fold vselect into predicated fmul, fsub and fadd Fold vselect with an unpredicated fmul/fsub/fadd operand into a predicated fmul/fsub/fadd: (vselect (p) (op (a) (b)) (a)) => (op -> (p) (a) (b))
Diff Detail Event Timeline
Comment Actions I'd focus on one thing at a time. This patch enables the isel required for the way merged arithmetic is modelled by the DAG. Once that is complete you can see what's needed to improve the reciprocal code. For that follow-on work I'm guessing you'll need a DAG combine for the select that inverts the comparison for the cases where this'll be beneficial. Comment Actions The IR within the tests looks like it's been doubly indented and there's a typo in the commit message (should be (vselect (p) (op (a) (b)) (a)) => (op -> (p) (a) (b)) but otherwise looks good. |
Out of interest are the SDTCisVec<1>, SDTCisVec<2>, SDTCisVec<3> bits removable? I'm thinking they're redundant given the next line is now very specific about what the types of those operands are.