Emit vzerouppers after reload.
authorH.J. Lu <hjl@gcc.gnu.org>
Tue, 2 Nov 2010 18:08:44 +0000 (11:08 -0700)
committerH.J. Lu <hjl@gcc.gnu.org>
Tue, 2 Nov 2010 18:08:44 +0000 (11:08 -0700)
commitcfec3a7c5e9924bbc5c756f8ba94b137f180845d
tree59669319f991c638bee0da8835955fbfd3f86fde
parent12243af614b0bddb0119a4860fccc27f54e92ed7
Emit vzerouppers after reload.

gcc/

2010-11-02  Uros Bizjak  <ubizjak@gmail.com>
    H.J. Lu  <hongjiu.lu@intel.com>

* config/i386/i386-protos.h (ix86_split_call_vzeroupper): New.
(ix86_split_call_pop_vzeroupper): Likewise.

* config/i386/i386.c (move_or_delete_vzeroupper_2): Rewrite
the loop.
(ix86_expand_call): Use UNSPEC_CALL_NEEDS_VZEROUPPER.
(ix86_split_call_vzeroupper): New.
(ix86_split_call_pop_vzeroupper): Likewise.

* config/i386/i386.md (UNSPEC_CALL_NEEDS_VZEROUPPER): New.
(*call_pop_0_vzeroupper): Likewise.
(*call_pop_1_vzeroupper): Likewise.
(*sibcall_pop_1_vzeroupper): Likewise.
(*call_0_vzeroupper): Likewise.
(*call_1_vzeroupper): Likewise.
(*sibcall_1_vzeroupper): Likewise.
(*call_1_rex64_vzeroupper): Likewise.
(*call_1_rex64_ms_sysv_vzeroupper): New.
(*call_1_rex64_large_vzeroupper): Likewise.
(*sibcall_1_rex64_vzeroupper): Likewise.
(*call_value_pop_0_vzeroupper): New.
(*call_value_pop_1_vzeroupper): Likewise.
(*sibcall_value_pop_1_vzeroupper): Likewise.
(*call_value_0_vzeroupper): New.
(*call_value_0_rex64_vzeroupper): Use
(*call_value_0_rex64_ms_sysv_vzeroupper): Likewise.
(*call_value_1_vzeroupper): Likewise.
(*sibcall_value_1_vzeroupper): Likewise.
(*call_value_1_rex64_vzeroupper): Likewise.
(*call_value_1_rex64_ms_sysv_vzeroupper): Likewise.
(*call_value_1_rex64_large_vzeroupper): Likewise.
(*sibcall_value_1_rex64_vzeroupper): Likewise.

gcc/testsuite/

2010-11-02  H.J. Lu  <hongjiu.lu@intel.com>

* gcc.target/i386/avx-vzeroupper-15.c: New.
* gcc.target/i386/avx-vzeroupper-16.c: Likewise.
* gcc.target/i386/avx-vzeroupper-17.c: Likewise.
* gcc.target/i386/avx-vzeroupper-18.c: Likewise.

PR target/46253
* gcc.target/i386/pr46253.c: New.

From-SVN: r166208
gcc/ChangeLog
gcc/config/i386/i386-protos.h
gcc/config/i386/i386.c
gcc/config/i386/i386.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/avx-vzeroupper-15.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr46253.c [new file with mode: 0644]