This is an archive of the discontinued LLVM Phabricator instance.

[InstSimplify] remove shift that is redundant with part of funnel shift
ClosedPublic

Authored by spatel on Feb 21 2022, 7:37 AM.

Details

Summary

In D111530, I suggested that we add some relatively basic pattern-matching folds for shifts and funnel shifts and avoid a more specialized solution if possible.

We can start by implementing at least one of these in IR because it's easier to write the code and verify with Alive2:
https://alive2.llvm.org/ce/z/qHpmNn

This will need to be adapted/extended for SDAG to handle the motivating bug because the patterns only appear later with that example (added some tests: bb850d422b64)

This can be extended within InstSimplify to handle cases where we 'and' with a shift too (in that case, kill the funnel shift).
We could also handle patterns where the shift and funnel shift directions are inverted, but I think it's better to canonicalize that instead to avoid pattern-match case explosion.

Diff Detail