This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/16480] using -msdata causes internal compiler error
- From: "geoffk at geoffk dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 26 Aug 2004 00:03:37 -0000
- Subject: [Bug target/16480] using -msdata causes internal compiler error
- References: <20040711213734.16480.kurt@symbolicsound.com>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From geoffk at geoffk dot org 2004-08-26 00:03 -------
Subject: Re: using -msdata causes internal compiler error
"amodra at bigpond dot net dot au" <gcc-bugzilla@gcc.gnu.org> writes:
> ------- Additional Comments From amodra at bigpond dot net dot au 2004-08-25 11:21 -------
> Mainline fails similarly. The failure results from this splitter
>
> (define_split
> [(set (match_operand:DI 0 "nonimmediate_operand" "")
> (match_operand:DI 1 "input_operand" ""))]
> "reload_completed && !TARGET_POWERPC64
> && gpr_or_gpr_p (operands[0], operands[1])"
> [(pc)]
> { rs6000_split_multireg_move (operands[0], operands[1]); DONE; })
>
> The "input_operand" predicate accepts any memory operand as the second operand.
> rs6000_split_multireg_move thus needs to accept anything that we accept in
> rs6000_legitimate_address. For this particular failure, that's a
> (mem (symbol_ref (...))), which happens to satisfy legitimate_small_data_p.
It's probably the code under this comment:
/* We have now address involving an base register only.
If we use one of the registers to address memory,
we have change that register last. */
I expect the right thing to do is simply do
if (GET_CODE (breg) != SYMBOL_REF)
{
if (! REG_P (breg)) abort();
if (REGNO (breg) ...)
j = ...;
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16480