On 12/17/2015 04:36 PM, Kyrill Tkachov wrote:
The documentation on RTL canonical forms in md.texi says:"Equality comparisons of a group of bits (usually a single bit) with zero will be written using @code{zero_extract} rather than the equivalent @code{and} or @code{sign_extract} operations. " However, this is not always followed in combine. If it's trying to optimise a comparison against zero of a bitmask that is the mode mask of some mode (255 for QImode and 65535 for HImode in the testcases of this patch) it will instead create a subreg to that shorter mode.
I suspect that this is an oversight in the documentation, and if given two choices the simpler form is intended to be the canonical one.
it ends up trying to make a QImode comparison against zero, for which targets like aarch64 have no pattern.
So, can you define a pattern for it...
To get the benefit on aarch64 this needs patch 1/2 that adds an aarch64 pattern for comparing a zero_extract with zero.
... instead of this one?
What do people think of this approach? I hope this just enforces the already documented canonicalisation rules with minimal(none?) negative fallout.
I'm not so sure about this. Other ports have QImode comparisons and I would want to see some evidence that there are no code quality regressions. This is not stage 3 material in any case.
Bernd
