[all-commits] [llvm/llvm-project] fc3b34: [InstSimplify] remove shift that is redundant with...

Sanjay Patel via All-commits all-commits at lists.llvm.org
Wed Feb 23 06:10:17 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: fc3b34c50803274b8ba3b8a30df9177b7d29063c
      https://github.com/llvm/llvm-project/commit/fc3b34c50803274b8ba3b8a30df9177b7d29063c
  Author: Sanjay Patel <spatel at rotateright.com>
  Date:   2022-02-23 (Wed, 23 Feb 2022)

  Changed paths:
    M llvm/lib/Analysis/InstructionSimplify.cpp
    M llvm/test/Transforms/InstSimplify/or.ll

  Log Message:
  -----------
  [InstSimplify] remove shift that is redundant with part of funnel shift

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 ( #49541 ) 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.

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




More information about the All-commits mailing list