This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/16480] using -msdata causes internal compiler error


------- 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]