]> git.ipfire.org Git - thirdparty/gcc.git/commit
Make option mvzeroupper independent of optimization level.
authorliuhongt <hongtao.liu@intel.com>
Mon, 26 Jun 2023 01:50:25 +0000 (09:50 +0800)
committerliuhongt <hongtao.liu@intel.com>
Wed, 28 Jun 2023 02:44:14 +0000 (10:44 +0800)
commit8cf948e6d9ab19d54ec0d27357d0c2907a244474
treee07461fdac1d24fd34c0862c6ef1edf6391beb56
parente1f02cecd0bf90190ddd769b46cd01b8f2bbd3d3
Make option mvzeroupper independent of optimization level.

pass_insert_vzeroupper is under condition

TARGET_AVX && TARGET_VZEROUPPER
&& flag_expensive_optimizations && !optimize_size

But the document of mvzeroupper doesn't mention the insertion
required -O2 and above, it may confuse users when they explicitly
use -Os -mvzeroupper.

------------
mvzeroupper
Target Mask(VZEROUPPER) Save
Generate vzeroupper instruction before a transfer of control flow out of
the function.
------------

The patch moves flag_expensive_optimizations && !optimize_size to
ix86_option_override_internal. It makes -mvzeroupper independent of
optimization level, but still keeps the behavior of architecture
tuning(emit_vzeroupper) unchanged.

gcc/ChangeLog:

* config/i386/i386-features.c (pass_insert_vzeroupper:gate):
Move flag_expensive_optimizations && !optimize_size to ..
* config/i386/i386-options.c (ix86_option_override_internal):
.. this, it makes -mvzeroupper independent of optimization
level, but still keeps the behavior of architecture
tuning(emit_vzeroupper) unchanged.
(rest_of_handle_insert_vzeroupper): Remove
flag_expensive_optimizations && !optimize_size.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx-vzeroupper-29.c: New testcase.
gcc/config/i386/i386-features.c
gcc/config/i386/i386-options.c
gcc/testsuite/gcc.target/i386/avx-vzeroupper-29.c [new file with mode: 0644]