[InstCombine] LogicOpc (zext X), C --> zext (LogicOpc X, C) (PR28476)
authorSanjay Patel <spatel@rotateright.com>
Thu, 21 Jul 2016 00:24:18 +0000 (00:24 +0000)
committerSanjay Patel <spatel@rotateright.com>
Thu, 21 Jul 2016 00:24:18 +0000 (00:24 +0000)
commit0753c06d9cfd7cbb6af1ed13af073cc274522862
treed1979e133c60dda0c86264b1643e6625952f00b8
parent99bd2de6194551d429751afc77030fdaed4e4dae
[InstCombine] LogicOpc (zext X), C --> zext (LogicOpc X, C) (PR28476)

The benefits of this change include:
1. Remove DeMorgan-matching code that was added specifically to work-around
   the missing transform in http://reviews.llvm.org/rL248634.
2. Makes the DeMorgan transform work for vectors too.
3. Fix PR28476: https://llvm.org/bugs/show_bug.cgi?id=28476

Extending this transform to other casts and other associative operators may
be useful too. See https://reviews.llvm.org/D22421 for a prerequisite for
doing that though.

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

llvm-svn: 276221
llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
llvm/test/Transforms/InstCombine/apint-select.ll
llvm/test/Transforms/InstCombine/assoc-cast-assoc.ll
llvm/test/Transforms/InstCombine/cast.ll
llvm/test/Transforms/InstCombine/demorgan-zext.ll
llvm/test/Transforms/InstCombine/select.ll
llvm/test/Transforms/InstCombine/zeroext-and-reduce.ll
llvm/test/Transforms/InstCombine/zext.ll