[all-commits] [llvm/llvm-project] 0c6979: [InstCombine] fold opposite shifts around an add

RotateRight via All-commits all-commits at lists.llvm.org
Thu Dec 30 09:01:46 PST 2021

  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 0c6979b2d64d97298671ba7ed44d1446c9f302cf
  Author: Sanjay Patel <spatel at rotateright.com>
  Date:   2021-12-30 (Thu, 30 Dec 2021)

  Changed paths:
    M llvm/lib/Transforms/InstCombine/InstCombineShifts.cpp
    M llvm/test/Transforms/InstCombine/lshr.ll
    M llvm/test/Transforms/LoopVectorize/X86/gather_scatter.ll

  Log Message:
  [InstCombine] fold opposite shifts around an add

((X << C) + Y) >>u C --> (X + (Y >>u C)) & (-1 >>u C)


This replaces a shift with an 'and', and in the case
where the add has a constant operand, it eliminates
both shifts.

As noted in the TODO comment, we already have this fold when
the shifts are in the opposite order (and that code handles
bitwise logic ops too).

Fixes #52851

More information about the All-commits mailing list