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: subreg_get_info vs mode restrictions in registers?


DJ Delorie <dj@redhat.com> writes:

> subreg_get_inf() in rtlanal.c blindly assumes that any hard register
> can hold any smaller-than-native mode:
> 
>   nregs_ymode = hard_regno_nregs[xregno][ymode];
>   . . .
>       && (GET_MODE_SIZE (ymode) % nregs_ymode) == 0)
> 
> However, there are registers in m32c that cannot hold a QImode value.
> By this, I mean there are NO opcodes that deal with a QImode subset of
> the 16 bits in $r2 or $r3.
> 
> So which assumption is valid: that there can be registers that cannot
> be subreg'd, or that all registers can be subreg'd?

I believe we've generally assumed that all hard registers can be
subreg'd.  That said, HARD_REGNO_MODE_OK should keep QImode values out
of those registers.  And insn constraints should keep reload from
using those registers for QImode insns.  So can you expand on what is
actually going wrong?

Ian


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