This is the mail archive of the gcc-patches@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: [RS6000] push_secondary_reload ICE


On Tue, Jul 26, 2016 at 03:26:55AM -0500, Segher Boessenkool wrote:
> On Tue, Jul 26, 2016 at 04:09:12PM +0930, Alan Modra wrote:
> >   /* If this is a scalar floating point value and we want to load it into the
> >      traditional Altivec registers, do it via a move via a traditional floating
> >      point register, unless we have D-form addressing.  Also make sure that
> >      non-zero constants use a FPR.  */
> >   if (!done_p && reg_addr[mode].scalar_in_vmx_p
> >       && !mode_supports_vmx_dform (mode)
> >       && (rclass == VSX_REGS || rclass == ALTIVEC_REGS)
> >       && (memory_p || (GET_CODE (x) == CONST_DOUBLE)))
> >     {
> >       ret = FLOAT_REGS;
> >       default_p = false;
> >       done_p = true;
> >     }
> > 
> > For the pr72103 testcase this is effectively saying we shouldn't store
> > a DImode vsx reg to a stack slot directly, but instead should reload
> > into a float reg.  Which seems a little odd to me..
> 
> I added SCALAR_FLOAT_MODE_P (mode) to the condition, which also fixes
> this particular PR, and makes this do what the comment says it does.
> Mike?  What is best here?  Change the comment or change the code?

Also, the comment only mentions loads whereas the code affects both
loads and stores.

-- 
Alan Modra
Australia Development Lab, IBM


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