[InstCombine] Fold (min/max ~X, Y) -> ~(max/min X, ~Y) when Y is freely invertible
authorCraig Topper <craig.topper@intel.com>
Sat, 22 Sep 2018 05:53:27 +0000 (05:53 +0000)
committerCraig Topper <craig.topper@intel.com>
Sat, 22 Sep 2018 05:53:27 +0000 (05:53 +0000)
commit2b3f5df73a7d3413c4f354d57ff377b8982af207
tree9a83db44907e8ef0718cb801b1a928f04ca4326e
parent082e04c61d2b6c6b6ed3a8e010e9b1b1a3a22ef4
[InstCombine] Fold (min/max ~X, Y) -> ~(max/min X, ~Y) when Y is freely invertible

Summary: This restores the combine that was reverted in r341883. The infinite loop from the failing test no longer occurs due to changes from r342163.

Reviewers: spatel, dmgreen

Reviewed By: spatel

Subscribers: llvm-commits

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

llvm-svn: 342797
llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
llvm/test/Transforms/InstCombine/max-of-nots.ll
llvm/test/Transforms/InstCombine/pr38897.ll [new file with mode: 0644]
llvm/test/Transforms/InstCombine/select.ll
llvm/test/Transforms/InstCombine/select_meta.ll
llvm/test/Transforms/InstCombine/sub.ll
llvm/test/Transforms/InstCombine/xor.ll