GCC reload problem
David S. Miller
davem@redhat.com
Fri Apr 11 09:37:00 GMT 2003
From: Eric Botcazou <ebotcazou@libertysurf.fr>
Date: Fri, 11 Apr 2003 09:07:54 +0200
> The problem here is that with SUBREG_BYTE, the word-based tests in
> this if statement are no longer valid. Which parts of the comparison
> are actually passing?
The same part that triggers in reload.c:reload_inner_reg_of_subreg()
/* If the outer part is a word or smaller, INNER larger than a
word and the number of regs for INNER is not the same as the
number of words in INNER, then INNER will need reloading. */
return (GET_MODE_SIZE (mode) <= UNITS_PER_WORD
&& GET_MODE_SIZE (GET_MODE (inner)) > UNITS_PER_WORD
&& ((GET_MODE_SIZE (GET_MODE (inner)) / UNITS_PER_WORD)
!= HARD_REGNO_NREGS (REGNO (inner), GET_MODE (inner))));
reload_inner_reg_of_subreg() is the function that detects invalid subregs,
but only if a reload has already been scheduled by find_reloads().
This clearly shows that my #if 0 and comment needs to be
removed.
More information about the Gcc
mailing list