[SelectOpt] Don't treat LogicalAnd/LogicalOr as selects
authorDavid Green <david.green@arm.com>
Thu, 24 Nov 2022 14:29:57 +0000 (14:29 +0000)
committerDavid Green <david.green@arm.com>
Thu, 24 Nov 2022 14:29:57 +0000 (14:29 +0000)
commitca78b5601466f8515f5f958ef8e63d787d9d812e
tree9de304391e767f31f3377fec70104b4f714ec297
parent0cb2dd5322f494769a7c31c8ed8aab930919f5f3
[SelectOpt] Don't treat LogicalAnd/LogicalOr as selects

A `select i1 %c, i1 true, i1 %d` is just an or and a `select i1 %c, i1 %d, i1 false`
is just an and. There are better treated as such in the logic of SelectOpt, allowing
the backend to optimize them to and/or directly.

Differential Revision: https://reviews.llvm.org/D138490
llvm/lib/CodeGen/SelectOptimize.cpp
llvm/test/CodeGen/AArch64/selectopt-logical.ll [new file with mode: 0644]