[Bug target/33256] internal compiler error: in print_operand_reloc, at config/mips/mips.c:5579
------- Comment #10 from rsandifo at gcc dot gnu dot org 2007-09-04 09:54 -------
Created an attachment (id=14155)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14155&action=view)
Proposed patch
David, thanks for the analysis and reduced testcase.
Re comment #7: I agree that we can't drop the offset_within_block_p
check entirely. However (re comment #9) adjust_address_1 is actually
making a legitimate optimisation here. It is given a memory that is
known to be 8-byte-aligned, so it knows that adding 4 to the LO_SUM
will not induce a carry. The problem is that the mips_classify_address
has no access to that information; all it sees is the narrowed MEM.
This PR is related to:
http://thread.gmane.org/gmane.comp.gcc.patches/139565/focus=140004
I still think the final fix in that thread:
http://gcc.gnu.org/viewcvs/trunk/gcc/config/mips/mips.c?r1=124833&r2=124832&pathrev=124833
was the right one for that bug because we always have access to a TLS's
decl, so we can apply suitably small offsets to HIGHs as well as LO_SUMs.
However, although we do have access to decl in the testcase for this PR,
we won't for all (non-TLS) %hi/%los, so a similar fix won't work here.
I think we have to trust the creator of the LO_SUM to do something
vaguely sane. Target-independent code that creates a LO_SUM should also
create and verify the associated HIGH, which must use the same symbol as
the LO_SUM. Target-independent code that adds an offset to a LO_SUM
should prove that the offset will not induce a carry. Failure to do
either of these things would be a bug. And the MIPS backend should
only create LO_SUMs for valid symbolic constants, with the high part
being either a HIGH or a copy of _gp.
So I'm wondering about the attached patch. Note that the lo_sum mips.md
patterns are already OK, because they use immediate_operand.
Richard
--
rsandifo at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |rsandifo at gcc dot gnu dot
|dot org |org
Status|NEW |ASSIGNED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33256
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
Reply to: