This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
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