[AArch64][SVE] Enable shouldFoldSelectWithIdentityConstant for SVE.
authorDavid Green <david.green@arm.com>
Thu, 15 Jun 2023 08:17:50 +0000 (09:17 +0100)
committerDavid Green <david.green@arm.com>
Thu, 15 Jun 2023 08:17:50 +0000 (09:17 +0100)
commit1643197e1911a81a939debcd0af99635d53bc831
treee8842a92c80563811f42b142da0b24c8c1b1b112
parentb92ccc355acb8a329918ceb2837df1b351675ece
[AArch64][SVE] Enable shouldFoldSelectWithIdentityConstant for SVE.

Instcombine will canonicalize `select(c, binop(a, b), a)` to
`binop(select(c, b, identityvalue), a)`. The original select form
makes a more natural form for vector predicated operations for
vector architectures like SVE where predication is well supported.
This patch enables shouldFoldSelectWithIdentityConstant for SVE so
that more predicated instructions can be generated, helping simplify
the handling with identity constants.

Predicated FMA patterns have also been adjusted here as they need to
look at FMF's. Other operations like add/sub, mul, and/or/xor and
mla/mls have been recently updated.

There is one test (scalable_int_min_max) that increases in size. There
are multiple selects that could be combined into a single select but
does not currently fold.

Differential Revision: https://reviews.llvm.org/D149967
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/lib/Target/AArch64/AArch64ISelLowering.h
llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
llvm/test/CodeGen/AArch64/sve-fp-int-min-max.ll
llvm/test/CodeGen/AArch64/sve-pred-selectop2.ll
llvm/test/CodeGen/AArch64/sve-pred-selectop3.ll