hard_regno_nregs == 0 ?

Jim Wilson wilson@specifix.com
Wed Jan 9 19:27:00 GMT 2008


DJ Delorie wrote:
> Which assumption is wrong?  That hard_regno_nregs can be zero (m32c),
> or that hard_regno_nregs will never be zero (rtlanal)?

I would say the m32c port is wrong.  HARD_REGNO_MODE_OK indicates 
whether a register can hold a mode.  HARD_REGNO_NREGS indicates how many 
registers we need to hold a value.  This is a number that can be larger 
than 1 if the value is larger than one register, but it makes no sense 
for it to be zero, as no (non-void) value can ever be held in zero 
registers.  The number of registers needed is irrespective of whether 
the register can actually hold the value, as that is specified by 
HARD_REGNO_MODE_OK.  There are lots of places that use HARD_REGNO_NREGS 
in division/modulus operations.  It would be complicated to fix them all 
to handle a zero value.

However, as Ian mentioned, there does seem to be something else wrong 
here, as it seems odd that you have an invalid subreg being passed in here.
-- 
Jim Wilson, GNU Tools Support, http://www.specifix.com



More information about the Gcc mailing list