This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug optimization/12630] [3.4 regression] Various unrecognizable insns and ICEs at -O3
- From: "danglin at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 5 Nov 2003 17:39:58 -0000
- Subject: [Bug optimization/12630] [3.4 regression] Various unrecognizable insns and ICEs at -O3
- References: <20031015232442.12630.danglin@gcc.gnu.org>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12630
------- Additional Comments From danglin at gcc dot gnu dot org 2003-11-05 17:39 -------
I have looked at the problem some more. Using match_scratch fails because
it requires a secondary reload. The secondary reload uses the equivalent
MEM for X when it is a pseudo register:
/* If X is a pseudo-register that has an equivalent MEM (actually, if it
is still a pseudo-register by now, it *must* have an equivalent MEM
but we don't want to assume that), use that equivalent when seeing if
a secondary reload is needed since whether or not a reload is needed
might be sensitive to the form of the MEM. */
if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
&& reg_equiv_mem[REGNO (x)] != 0)
x = reg_equiv_mem[REGNO (x)];
When the MEM is symbolic, we need to use %r1 for the reload (this is
absolutely required in pic code and desireable in non-pic code). As there
are two inputs for the movstr pattern, we fail when both memory references
are symbolic. See the rtl shown in comment #12.
The possible fixes are:
1) Delete the PA movstr pattern :(
2) Use two additional registers for the movstr operation and do a split
after reload to allow unnecessary copies to be deleted. I'm not
particularly in favor of doing this as it seems like a hack.
3) Revert and/or fix the regrename.c patch so that the clobber match_dup
semantic works again.
4) Somehow fix reload to not generate secondary reloads when we have
numeric constraints. I don't understand reload well enough to know
whether this is a viable option.