diff options
| author | Roman Lebedev <lebedev.ri@gmail.com> | 2018-04-23 20:38:49 +0000 |
|---|---|---|
| committer | Roman Lebedev <lebedev.ri@gmail.com> | 2018-04-23 20:38:49 +0000 |
| commit | 95c6eaf530c190e62c15e35fe7a8c1e7b30e37c6 (patch) | |
| tree | 9fd52facacd42de6b4c21f0887ba47c94fa18bcd /llvm/lib/CodeGen/BranchRelaxation.cpp | |
| parent | bf18cc56d3a58a2016767024b199a483d2083e8b (diff) | |
| download | bcm5719-llvm-95c6eaf530c190e62c15e35fe7a8c1e7b30e37c6.tar.gz bcm5719-llvm-95c6eaf530c190e62c15e35fe7a8c1e7b30e37c6.zip | |
[DAGCombiner] Unfold scalar masked merge if profitable
Summary:
This is [[ https://bugs.llvm.org/show_bug.cgi?id=37104 | PR37104 ]].
[[ https://bugs.llvm.org/show_bug.cgi?id=6773 | 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
Diffstat (limited to 'llvm/lib/CodeGen/BranchRelaxation.cpp')
0 files changed, 0 insertions, 0 deletions

