[patch, i386] false dependencies fix

Uros Bizjak ubizjak@gmail.com
Thu Jun 28 07:16:00 GMT 2018


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".

Uros.



More information about the Gcc-patches mailing list