On 06/28/2018 01:16 AM, Uros Bizjak wrote: > Hello! > >>> --- i386.md (revision 259756) >>> +++ i386.md (working copy) >>> @@ -3547,7 +3547,7 @@ >>> { >>> case MODE_DF: >>> if (TARGET_AVX && REG_P (operands[0]) && REG_P (operands[1])) >>> - return "vmovsd\t{%1, %0, %0|%0, %0, %1}"; >>> + return "%vmovsd\t{%d1, %0|%0, %d1}"; >>> return "%vmovsd\t{%1, %0|%0, %1}"; >>> >>> case MODE_V4SF: >>> @@ -3748,7 +3748,7 @@ >>> { >>> case MODE_SF: >>> if (TARGET_AVX && REG_P (operands[0]) && REG_P (operands[1])) >>> - return "vmovss\t{%1, %0, %0|%0, %0, %1}"; >>> + return "%vmovss\t{%d1, %0|%0, %d1}"; >>> return "%vmovss\t{%1, %0|%0, %1}"; >> So what I'm confused about is in the original output template operand 0 >> is duplicated. In the new template operand 1 is duplicated. >> >> Presumably what you're trying to accomplish is avoiding a false read on >> operand 0 (the destination)? Can you please confirm? > >> Knowing that should also help me evaluate the changes to recp and rsqrt >> since they're being changed to the same style encoding when operating >> strictly on registers. > > Please don't change "v" -> "%v" for TARGET_AVX templates. We know that > in this case, all insn mnemonics are prefixed with "v". ACK on that Uros -- I'd convinced myself that v->%v for TARGET_AVX couldn't hurt anything since we already had the v prefix in place. I'm happy to ensure this follows your preferred convention.
I was mostly trying to make sure I understood the other aspects of the proposed change. Cheers, jeff