HomePhabricator

[DAGCombiner] Unfold scalar masked merge if profitable

Authored by lebedev.ri on Apr 23 2018, 1:38 PM.

Description

[DAGCombiner] Unfold scalar masked merge if profitable

Summary:
This is PR37104.

PR6773 will introduce an IR canonicalization that is likely bad for the end assembly.
Previously, andl+andn/andps+andnps / bic/bsl would be generated. (see @out)
Now, they would no longer be generated (see @in).
So we need to make sure that they are still generated.

If the mask is constant, we do nothing. InstCombine should have unfolded it.
Else, i use hasAndNot() TLI hook.

For now, only handle scalars.

https://rise4fun.com/Alive/bO6


I *really* don't like the code i wrote in DAGCombiner::unfoldMaskedMerge().
It is super fragile. Is there something like IR Pattern Matchers for this?

Reviewers: spatel, craig.topper, RKSimon, javed.absar

Reviewed By: spatel

Subscribers: andreadb, courbet, kristof.beyls, javed.absar, rengolin, nemanjai, llvm-commits

Differential Revision: https://reviews.llvm.org/D45733

llvm-svn: 330646

Details

Committed
lebedev.riApr 23 2018, 1:38 PM
Reviewer
spatel
Differential Revision
D45733: [DAGCombiner] Unfold scalar masked merge if profitable
Parents
rGbf18cc56d3a5: [X86][AArch64][NFC] Add tests for masked merge unfolding
Branches
Unknown
Tags
Unknown