On Fri, Aug 13, 2021 at 04:33:26PM -0400, David Edelsohn wrote:
> There is a song from Sesame Street: "Which of these is not like the
> others?"  altivec.md seems like an outlier.  crypto.md and vsx.md also
> seem unusual.
> 
> We have
> 
> register_operand
> gpc_reg_operand
> altivec_register_operand
> vsx_register_operand
> 
> among various relevant options.  It seems like this deserves to be
> cleaned up sometime, but a patch for xxeval is not the time.

As the person who added altivec_register_operand, vsx_register_opernd, and
various others, the original reason for adding these were to eliminate some
issues we were seeing with register allocation, where the pre-LRA register
allocator would often do wonky things, and not allowing GPRs helped eliminate
some of the reloads.  There were some passes, particularly after register
allocation that didn't look at the constraints.  Now that we've had LRA for
awhile, maybe it is time to rethink these.

However, before somebody goes whole hog changing things, there are some
specific places where these are needed (mostly in the define_splits and the
split portion of define_insn_and_split because constraints aren't allowed).

I did actually think whether to use gpc_reg_operand or vsx_register_operand.  I
opted to use register_operand just because most of the surrounding code used
it.

-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meiss...@linux.ibm.com, phone: +1 (978) 899-4797

Reply via email to