InstCombine: Don't fold (X <<s log(INT_MIN)) /s INT_MIN to X
authorDavid Majnemer <david.majnemer@gmail.com>
Sat, 11 Oct 2014 10:20:04 +0000 (10:20 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Sat, 11 Oct 2014 10:20:04 +0000 (10:20 +0000)
commit171825a8cec198cad76ed9c032f537fd42e78325
tree79358a3e07def1c68eeac27324866e292f3d7dfd
parent9043f74acb70f48b6bb7717cf0e1b39ac259ac1b
InstCombine: Don't fold (X <<s log(INT_MIN)) /s INT_MIN to X

Consider the case where X is 2.  (2 <<s 31)/s-2147483648 is zero but we
would fold to X.  Note that this is valid when we are in the unsigned
domain because we require NUW: 2 <<u 31 results in poison.

This fixes PR21245.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219568 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
test/Transforms/InstCombine/div.ll