[InstSimplify] allow vector folds for (Pow2C << X) == NonPow2C
authorSanjay Patel <spatel@rotateright.com>
Sun, 8 Nov 2020 14:49:31 +0000 (09:49 -0500)
committerSanjay Patel <spatel@rotateright.com>
Sun, 8 Nov 2020 14:52:05 +0000 (09:52 -0500)
commit00808e321c724bd9f2a822bce87fe7fe87376371
tree4c6a7c07c0e121f6033a552ed3ecbedbca765758
parent73a5f0b614fcd4d3732bc4ffba54b6c4dce5b4ed
[InstSimplify] allow vector folds for (Pow2C << X) == NonPow2C

Existing pre-conditions seem to be correct:
https://rise4fun.com/Alive/lCLB

  Name: non-zero C1
  Pre: !isPowerOf2(C1) && isPowerOf2(C2) && C1 != 0
  %sub = shl i8 C2, %X
  %cmp = icmp eq i8 %sub, C1
  =>
  %cmp = false

  Name: one == C2
  Pre: !isPowerOf2(C1) && isPowerOf2(C2) && C2 == 1
  %sub = shl i8 C2, %X
  %cmp = icmp eq i8 %sub, C1
  =>
  %cmp = false

  Name: nuw
  Pre: !isPowerOf2(C1) && isPowerOf2(C2)
  %sub = shl nuw i8 C2, %X
  %cmp = icmp eq i8 %sub, C1
  =>
  %cmp = false

  Name: nsw
  Pre: !isPowerOf2(C1) && isPowerOf2(C2)
  %sub = shl nsw i8 C2, %X
  %cmp = icmp eq i8 %sub, C1
  =>
  %cmp = false
llvm/lib/Analysis/InstructionSimplify.cpp
llvm/test/Transforms/InstSimplify/compare.ll