[ARM][LowOverheadLoops] Add checks for narrowing
authorSam Parker <sam.parker@arm.com>
Tue, 24 Mar 2020 08:41:48 +0000 (08:41 +0000)
committerSam Parker <sam.parker@arm.com>
Tue, 24 Mar 2020 08:41:48 +0000 (08:41 +0000)
commit94cacebccadf1e0821bdab6983d9f5251f73eab0
treef5831607fd5950f1748da3c5e32094eee42a220a
parent6f86e6bf4043b0fc75d285bac06ebc7c3f5828b0
[ARM][LowOverheadLoops] Add checks for narrowing

Modify ValidateLiveOuts to track 'FalseLaneZeros' more precisely,
including checks on specific operations that can generate non-zeros
from zero values, e.g VMVN. We can then check that any instructions
that retain some information in their output register (all narrowing
instructions) that they only use and def registers that always have
zeros in their falsely predicated bytes, whether or not tail
predication happens.

Most of the logic remains the same, just the names of the data
structures and helpers have been renamed to reflect the change in
logic. The key change, apart from the opcode checkers, is that the
FalseZeros set now strictly contains only instructions which will
always generate zeros, and not instructions that could also have
their false bytes masked away later.

Differential Revision: https://reviews.llvm.org/D76235
llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp