[InstCombine] improve folds for icmp with multiply operands (PR47432)
authorSanjay Patel <spatel@rotateright.com>
Mon, 7 Sep 2020 16:37:59 +0000 (12:37 -0400)
committerSanjay Patel <spatel@rotateright.com>
Mon, 7 Sep 2020 16:40:37 +0000 (12:40 -0400)
commit7a6d6f0f7046f6ebcbf06eaf8f996d991a90e440
treed411daa0464872802b9683ebbaa12bded942631f
parent11d8eedfa5b796a9ba0276a5e4bad8b9e549f0b6
[InstCombine] improve folds for icmp with multiply operands (PR47432)

Check for no overflow along with an odd constant before
we lose information by converting to bitwise logic.

https://rise4fun.com/Alive/2Xl

  Pre: C1 != 0
  %mx = mul nsw i8 %x, C1
  %my = mul nsw i8 %y, C1
  %r = icmp eq i8 %mx, %my
  =>
  %r = icmp eq i8 %x, %y

  Name: nuw ne
  Pre: C1 != 0
  %mx = mul nuw i8 %x, C1
  %my = mul nuw i8 %y, C1
  %r = icmp ne i8 %mx, %my
  =>
  %r = icmp ne i8 %x, %y

  Name: odd ne
  Pre: C1 % 2 != 0
  %mx = mul i8 %x, C1
  %my = mul i8 %y, C1
  %r = icmp ne i8 %mx, %my
  =>
  %r = icmp ne i8 %x, %y
llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
llvm/test/Transforms/InstCombine/icmp-mul.ll