llvm-project/llvm/test/Transforms/AggressiveInstCombine
Anton Afanasyev cfb6dfcbd1 [AggressiveInstCombine] Add logical shift right instr to `TruncInstCombine` DAG
Add `lshr` instruction to the DAG post-dominated by `trunc`, allowing
TruncInstCombine to reduce bitwidth of expressions containing
these instructions.

We should be shifting by less than the target bitwidth.
Also it is sufficient to require that all truncated bits
of the value-to-be-shifted are zeros: https://alive2.llvm.org/ce/z/_LytbB

Alive2 variable-length proof:
https://godbolt.org/z/1srE1aqzf => s/32/8/ => https://alive2.llvm.org/ce/z/StwPia

Part of https://reviews.llvm.org/D107766

Differential Revision: https://reviews.llvm.org/D108201
2021-08-18 22:20:58 +03:00
..
funnel.ll [AggressiveInstCombine] Generalize foldGuardedRotateToFunnelShift to generic funnel shifts (REAPPLIED) 2020-12-21 15:22:27 +00:00
masked-cmp.ll
popcount.ll
pr50555.ll [AggressiveInstCombine] Add logical shift right instr to `TruncInstCombine` DAG 2021-08-18 22:20:58 +03:00
rotate.ll [AggressiveInstCombine] Generalize foldGuardedRotateToFunnelShift to generic funnel shifts (REAPPLIED) 2020-12-21 15:22:27 +00:00
trunc_const_expr.ll [TruncInstCombine] Remove scalable vector restriction 2020-12-10 18:00:19 +08:00
trunc_multi_uses.ll
trunc_select.ll
trunc_select_cmp.ll
trunc_shifts.ll [AggressiveInstCombine] Add logical shift right instr to `TruncInstCombine` DAG 2021-08-18 22:20:58 +03:00
trunc_unreachable_bb.ll