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".
I didn't realize you'd already acked the patch without the v->%v bits
and Sebastian committed the changes about a month ago...
Oh well, at least I know a bit more about the inner workings of the AVX
unit than I did a last week.
Sorry for the noise.
jeff