On Thu, Jul 3, 2014 at 3:38 PM, Ilya Enkovich <enkovich....@gmail.com> wrote: > 2014-07-03 16:07 GMT+04:00 Uros Bizjak <ubiz...@gmail.com>: >> On Thu, Jul 3, 2014 at 1:50 PM, Ilya Enkovich <enkovich....@gmail.com> wrote: >> >>> I didn't find a nice way to fix peephole2 patterns to take register >>> constraints into account. Is there any way to do it? >> >> Use REX_SSE_REGNO_P (REGNO (operands[...])) in the insn C constraint. > > Peephole doesn't know whether it works with tuned instruction or not, > right? I would need to mark all instructions I modify with some > attribute and then check for it in peephole. > >> >>> Also fully restrict xmm8-15 does not seem right. It is just costly >>> but not fully disallowed. >> >> As said earlier, you can try "Ya*x" as a constraint. > > I tried it. It does not seem to affect allocation much. I do not see > any gain on targeted tests.
Strange, because the documentation claims: '*' Says that the following character should be ignored when choosing register preferences. '*' has no effect on the meaning of the constraint as a constraint, and no effect on reloading. For LRA '*' additionally disparages slightly the alternative if the following character matches the operand. Let me rethink this a bit. Prehaps we could reconsider Jakub's proposal with "Ya,!x" (with two alternatives). IIRC this approach was needed for some MMX alternatives, where we didn't want RA to allocate a MMX register when the value could be passed in integer regs, but the value was still allowed in MMX register. As a side note, I'll investigate pushdf pattern, if it needs to be updated. The proposed approach is from reload era, and things changed substantially since then. Uros.