This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug rtl-optimization/48037] Missed optimization: unnecessary register moves


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48037

--- Comment #4 from Jeffrey A. Law <law at redhat dot com> 2011-03-14 15:39:53 UTC ---
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 03/09/11 05:01, ebotcazou at gcc dot gnu.org wrote:
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48037
> 
> Eric Botcazou <ebotcazou at gcc dot gnu.org> changed:
> 
>            What    |Removed                     |Added
> ----------------------------------------------------------------------------
>                  CC|                            |ebotcazou at gcc dot
>                    |                            |gnu.org
> 
> --- Comment #3 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2011-03-09 12:01:10 UTC ---
>> As of the register moves you are seeing, we have the long-time known problem
>> that we fail to allocate registers in a way to have the function return
>> value in-place.  Maybe we are just confusing IRA with the explicit move
>> to that register?
>>
>> (insn 13 11 18 2 (set (reg:V2DF 72)
>>         (vec_concat:V2DF (reg:DF 67)
>>             (reg:DF 69))) t.c:8 1557 {*vec_concatv2df}
>>      (expr_list:REG_DEAD (reg:DF 69)
>>         (expr_list:REG_DEAD (reg:DF 67)
>>             (nil))))
>>
>> (insn 18 13 21 2 (set (reg/i:V2DF 21 xmm0)
>>         (reg:V2DF 72)) t.c:10 1127 {*movv2df_internal}
>>      (expr_list:REG_DEAD (reg:V2DF 72)
>>         (nil)))
>>
>> why is combine not able to change this to
>>
>> (insn 13 11 18 2 (set (reg/i:V2DF 21 xmm0)
>>         (vec_concat:V2DF (reg:DF 67)
>>             (reg:DF 69))) t.c:8 1557 {*vec_concatv2df}
>>      (expr_list:REG_DEAD (reg:DF 69)
>>         (expr_list:REG_DEAD (reg:DF 67)
>>             (nil))))
>>
>> ? (it doesn't even try this combination)
> 
> Probably because of the check in cant_combine_insn_p (SSE_FIRST_REG is likely
> spilled on x86).
Right.  I recently looked into a similar problem; ISTM we ought to be
able to come up with better rules than never combine if one of the regs
is a likely spilled reg.
Jeff
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJNfja3AAoJEBRtltQi2kC7OD4H/AxEqn3YJ/BeFNLQ3wkkz7FO
5OrwKdN4HBjVHwg8jAy5NyAtc0g+iDS3fG7CEMRc2GS8ndO6F1qiecI3E/cHyvkL
4SzaoWpL+ZCs+hp9PXKCBLUf2OzIEG2lzxOB9YkpntpNtzDNobl7qG6bchusHLme
ECLTQdrMDBVVMWJJI5kTxhFxpQRvy1tF/Cx/WlnoTVWE1Yf4K+teNI+O8CEZOwa3
oemGlmxifE1dQ9ebFprMeehdVuKK+C6j7q4yJr32aGk7CTt0v4yM/hiHA6tBu7EE
4kgdHcust8LBMgSmYAYbWnbp8SVFx9t6DEGg6ICAf02/uWY4JTxpE2zhCUNCcwE=
=heUd
-----END PGP SIGNATURE-----


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]