Hi there,

I'm looking into whether it's possible to require even numbered registers on
modes that need more than one hard-register to represent them. But only in
some cases.

The problem is the one mentioned explicitly here
https://gcc.gnu.org/onlinedocs/gccint/Register-Classes.html about enforcing a
requirement for a register pair to start with an even-numbered register.
I can't use TARGET_HARD_REGNO_MODE_OK as suggested in that document because I'd like to allow register pairs starting with odd-numbered registers in general,
but not in some specific cases.

From a comment in gcc/config/sparc/constraints.md above the constraint "U" it looks like there isn't a way to define such a constraint when using LRA, and I
haven't found any hook that could do so but I'm hoping there's something I'm
missing.

The best thing I can think of is to define a bunch of classes ZERO_ONE,
TWO_THREE, FOUR_FIVE, ..., define a constraint on each of those classes, then
use all the constraints as one alternative in my pattern.

Is there a better method?

Is there some small change that could enable a nicer method?

Thanks,
Matthew

Reply via email to