This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] type promotion pass


On Fri, Sep 15, 2017 at 09:18:23AM -0600, Jeff Law wrote:
> WORD_REGISTER_OPERATIONS works with PROMOTE_MODE.  The reason you can't
> define WORD_REGISTER_OPERATIONS on aarch64 is because that the implicit
> promotion is sometimes to 32 bits and sometimes to 64 bits.
> WORD_REGISTER_OPERATIONS can't really describe that.

WORD_REGISTER_OPERATIONS isn't well-defined.

"""
@defmac WORD_REGISTER_OPERATIONS
Define this macro to 1 if operations between registers with integral mode
smaller than a word are always performed on the entire register.
Most RISC machines have this property and most CISC machines do not.
@end defmac
"""

Exactly what operations?  For almost all targets it isn't true for *all*
operations.  Or no targets even, if you include rotate, etc.

For targets that have both 32-bit and 64-bit operations it is never true
either.

> And I'm also keen on doing something with type promotion -- Kai did some
> work in this space years ago which I found interesting, even if the work
> didn't go forward.  It showed a real weakness.  So I'm certainly
> interested in looking at Prathamesh's work -- with the caveat that if it
> stumbles across the same issues as Kai's work that it likely wouldn't be
> acceptable in its current form.

Doing type promotion too aggressively reduces code quality.  "Just" find
a sweet spot :-)

Example: on Power, an AND of QImode with 0xc3 is just one insn, which
actually does a SImode AND with 0xffffffc3.  This is what we do currently.
A SImode AND with 0x000000c3 is two insns, or one if we allow it to write
to CR0 as well ("andi."); same for DImode, except there isn't a way to do
an AND with 0xffffffffffffffc3 in one insn at all.

unsigned char a;
void f(void) { a &= 0xc3; };


Segher


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]