[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