This is the mail archive of the gcc@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]

Re: GCC trunk SPEC2000 performance


In message <3D123660.A20EFB79@moene.indiv.nluug.nl>, Toon Moene writes:
 > Jan Hubicka wrote:
 > 
 > > Hmm, obvious fix appears to be the patch attached.  I am not at all sure
 > > whether it is the sane fix,
 > 
 > > !         if (REG_POINTER (map->x_regno_reg_rtx[regno]))
 > ===
 > > !         if (REG_P (map->x_regno_reg_rtx[regno])
 > > !             && REG_POINTER (map->x_regno_reg_rtx[regno]))
 > 
 > Well, I'd say _no_, it isn't a sane fix.  As the name implies, the
 > x_regno_reg_rtx[] member of the struct *map is a REGISTER rtx and
 > therefore *should* *not* be a MEM (as Janis' excellent rtl flag checking
 > code correctly diagnoses).
That's certainly my concern.

 > The problem is the MEM rtx in this array.  I looked into it and I
 > couldn't find where it was filled in incorrectly, but I assume someone
 > with better gdb skills than mine would be able to find the culprit.
One quick test to throw out one theory would be to see if this abort
happens before reload, during reload or after reload.

As Graham points out elsewhere, reload can modify a REG and turn it into
a MEM.  So if we can call copy_rtx_and_substitute after reload, then we
could have MEMs in the regno_reg_rtx array.

jeff


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