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