2014-07-14 23:58 GMT+04:00 Uros Bizjak <ubiz...@gmail.com>: > 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.
That's is what my patch already does, but with '?' instead of '!'. Will try it with '!' and see if there is a big difference. Ilya > > 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.