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]

Re: Internal compiler error in gcc-2.95 19990623 on PowerPC


>>>>> Franz Sirl writes:

Franz> (insn 51 46 52 (set (mem:DF (pre_inc:SI (reg/v:SI 86)) 0)
Franz> (reg:DF 100)) 440 {*movdf_hardfloat32} (nil)
Franz> (expr_list:REG_INC (reg/v:SI 86)
Franz> (nil)))

Franz> I think it's barfing on the pre_inc in insn 51.

	Yes, that instruction definitely looks strange.  This, however, is
not a valid addressing mode and should have been rejected by
GO_IF_LEGITIMATE_ADDRESS.  PRE_INC and PRE_DEC only are valid with an
offsettable-type address.  Maybe this very old GO_IF_LEGITIMATE_ADDRESS
code is not tight enough:

  if ((GET_CODE (X) == PRE_INC || GET_CODE (X) == PRE_DEC) \
      && TARGET_UPDATE                                  \
      && LEGITIMATE_INDIRECT_ADDRESS_P (XEXP (X, 0)))   \

It checks for a valid base register in XEXP (X, 0), but does not check
that XEXP (X, 1) is if it exists.  It seems to assume that XEXP (X, 1)
would not be present.

David


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