[DAG] Fold vector mul(x,0)/mul(x,1) to a clearing mask
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 26 Sep 2020 13:31:17 +0000 (14:31 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 26 Sep 2020 13:31:57 +0000 (14:31 +0100)
commita61272a900296573902dfce99274fd335239a4d3
tree030b81629cda2689d2524f2399aecf7bff21ed11
parentdecc1944f38f4205bf53829bf91e3c98ea6fc7ac
[DAG] Fold vector mul(x,0)/mul(x,1) to a clearing mask

If we're multiplying all elements of a vector by '0' or '1' then we can more efficiently perform this as a clearing mask (that is likely to further simplify to a shuffle blend).

This was noticed when reviewing D87502 but seems to help idiv/irem by constant cases even more as '0'/'1' values are often used for 'passthrough' cases.

Differential Revision: https://reviews.llvm.org/D88225
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/test/CodeGen/AArch64/srem-seteq-vec-nonsplat.ll
llvm/test/CodeGen/X86/srem-seteq-vec-nonsplat.ll
llvm/test/CodeGen/X86/vector-idiv-sdiv-128.ll
llvm/test/CodeGen/X86/vector-idiv-sdiv-256.ll
llvm/test/CodeGen/X86/vector-idiv-sdiv-512.ll
llvm/test/CodeGen/X86/vector-mul.ll
llvm/test/CodeGen/X86/vector-trunc-math.ll