[InstCombine] canonicalize constant-minus-boolean to select-of-constants
authorSanjay Patel <spatel@rotateright.com>
Wed, 6 Dec 2017 21:22:57 +0000 (21:22 +0000)
committerSanjay Patel <spatel@rotateright.com>
Wed, 6 Dec 2017 21:22:57 +0000 (21:22 +0000)
commitb6404a8ca6e7d3a77894f3dcfdad89cda1eb6042
tree9c24ea0afd42a259eed25375b6508b3c30683151
parente363d2cebbc1b880059a372d69f6ddee587f9d2d
[InstCombine] canonicalize constant-minus-boolean to select-of-constants

This restores the half of:
https://reviews.llvm.org/rL75531
that was reverted at:
https://reviews.llvm.org/rL159230

For the x86 case mentioned there, we now produce:
leal 1(%rdi), %eax
subl %esi, %eax

We have target hooks to invert this in DAGCombiner (and x86 is enabled) with:
https://reviews.llvm.org/rL296977
https://reviews.llvm.org/rL311731

AArch64 and possibly other targets would probably benefit from enabling those hooks too.
See PR30327:
https://bugs.llvm.org/show_bug.cgi?id=30327#c2

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

llvm-svn: 319964
llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
llvm/test/Transforms/InstCombine/zext-bool-add-sub.ll