This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Eliminable register breakage
- To: bernds at redhat dot com
- Subject: Re: Eliminable register breakage
- From: kenner at vlsi1 dot ultra dot nyu dot edu (Richard Kenner)
- Date: Sun, 3 Jun 01 19:07:18 EDT
- Cc: gcc at gcc dot gnu dot org
Shouldn't matter, I think. Have a look at the code around
/* Force reload if this is a constant or PLUS or if there may
be a problem accessing OPERAND in the outer mode. */
in find_reloads, which seems to try and detect this situation.
It does. However, find_reloads then doesn't reload inside the SUBREG.
There are three problems here:
(1) Probably the first test should be true. See
http://gcc.gnu.org/ml/gcc-patches/2001-06/msg00013.html which would fix
this, but:
(2) The second test should also catch it, meaning that
reload_inner_reg_of_subreg should return 1 for PLUS as well as constant,
but:
(3) If it does, the code below the call fails since it assumes the
return value is a REG. But it already can be a constant, so that code
is wrong. But where it is supposed to get the class from in that case?
So there is a whole morass of problems that this finds.