[DemandedBits] Revert r249687 due to PR26071
authorJames Molloy <james.molloy@arm.com>
Wed, 3 Feb 2016 15:05:06 +0000 (15:05 +0000)
committerJames Molloy <james.molloy@arm.com>
Wed, 3 Feb 2016 15:05:06 +0000 (15:05 +0000)
commit6e518a3b5075067b0bb839b4df5d9c05bd46ffcb
treebda96f58049e1add24dc8b80cc95ff04db75707f
parent739ae643463efde42581c7286c2568fbb26d7c7b
[DemandedBits] Revert r249687 due to PR26071

This regresses a test in LoopVectorize, so I'll need to go away and think about how to solve this in a way that isn't broken.

From the writeup in PR26071:

What's happening is that ComputeKnownZeroes is telling us that all bits except the LSB are zero. We're then deciding that only the LSB needs to be demanded from the icmp's inputs.

This is where we're wrong - we're assuming that after simplification the bits that were known zero will continue to be known zero. But they're not - during trivialization the upper bits get changed (because an XOR isn't shrunk), so the icmp fails.

The fault is in demandedbits - its contract does clearly state that a non-demanded bit may either be zero or one.

llvm-svn: 259649
llvm/lib/Analysis/DemandedBits.cpp
llvm/test/Analysis/DemandedBits/basic.ll
llvm/test/Transforms/LoopVectorize/AArch64/loop-vectorization-factors.ll