]> granicus.if.org Git - llvm/commit
[InstCombine] canShiftBinOpWithConstantRHS(): drop bogus signbit check
authorRoman Lebedev <lebedev.ri@gmail.com>
Fri, 17 May 2019 15:52:49 +0000 (15:52 +0000)
committerRoman Lebedev <lebedev.ri@gmail.com>
Fri, 17 May 2019 15:52:49 +0000 (15:52 +0000)
commitf96e8b1ee50a0f054039024871c35e843d26631e
treed8dee2beaaf16039e19b1a21f048dc4256bb4238
parent497c8e8e05438454d720c373e0c03a3279985bec
[InstCombine] canShiftBinOpWithConstantRHS(): drop bogus signbit check

Summary:
In D61918 i was looking at dropping it in DAGCombiner `visitShiftByConstant()`,
but as @craig.topper pointed out, it was copied from here.

That check claims that the transform is illegal otherwise.
That isn't true:
1. For `ISD::ADD`, we only process `ISD::SHL` outer shift => sign bit does not matter
   https://rise4fun.com/Alive/K4A
2. For `ISD::AND`, there is no restriction on constants:
   https://rise4fun.com/Alive/Wy3
3. For `ISD::OR`, there is no restriction on constants:
   https://rise4fun.com/Alive/GOH
3. For `ISD::XOR`, there is no restriction on constants:
   https://rise4fun.com/Alive/ml6

So, why is it there then?
As far as i can tell, it dates all the way back to original check-in rL7793.
I think we should just drop it.

Reviewers: spatel, craig.topper, efriedma, majnemer

Reviewed By: spatel

Subscribers: llvm-commits, craig.topper

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@361043 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/InstCombine/InstCombineShifts.cpp
test/Transforms/InstCombine/pull-binop-through-shift.ll
test/Transforms/InstCombine/pull-conditional-binop-through-shift.ll
test/Transforms/InstCombine/trunc.ll