------- Comment #11 from bergner at vnet dot ibm dot com 2010-02-24 22:08 ------- Subject: Re: [4.5 Regression] wrong code for 200.sixtrack with vectorization and -fdata-sections
On Wed, 2010-02-24 at 21:01 +0000, meissner at linux dot vnet dot ibm dot com wrote: > > ------- Comment #10 from meissner at linux dot vnet dot ibm dot com > 2010-02-24 21:01 ------- [snip] > I suspect this may have been the culprit for the bandaid that I put in > rs6000_emit_move (around line 6339 of rs6000.c) to handle const addresses that > were overwritten with a register. Here is the comment that starts the block: > > /* Fix up invalid (const (plus (symbol_ref) (reg))) that seems to be created > in the secondary_reload phase, which evidently overwrites the CONST_INT > with a register. */ It sounds like the same problem. Once this is fixed, we probably can back that change out after verifying we don't need it anymore. > > Index: reload1.c > > =================================================================== > > --- reload1.c (revision 156816) > > +++ reload1.c (working copy) > > @@ -5221,6 +5221,10 @@ > > r1 = r2; > > r2 = n; > > } > > + > > + if (GET_CODE (rld[r1].in) == CONST) > > + return true; > > + > > gcc_assert (reg_mentioned_p (rld[r2].in, rld[r1].in)); > > regno = rld[r1].regno >= 0 ? rld[r1].regno : rld[r2].regno; > > gcc_assert (regno >= 0); > > > > > > I dunno, would it be better if we cloned copy_rtx to have a varient that > doesn't call shared_const_p in rtl.c and made a full copy? I would think this > would be better than returning true if it is a constant. I asked that same question in my post to gcc-patches, except I _think_ we need to copy the other sharable rtx objects too, not just const's. Peter -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42431