x86: Don't generate vzeroupper if caller passes AVX/AVX512 registers
There is no need to generate vzeroupper if caller passes arguments in AVX/AVX512 registers. Tested on i686 and x86-64 with and without --with-arch=native. gcc/ PR target/88717 * config/i386/i386.c (ix86_avx_u128_mode_exit): Call ix86_avx_u128_mode_entry. gcc/testsuite/ PR target/88717 * gcc.target/i386/pr88717.c: New test. From-SVN: r267732
This commit is contained in:
parent
e01ffb47c6
commit
53ef4e3a94
@ -1,3 +1,9 @@
|
||||
2019-01-08 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR target/88717
|
||||
* config/i386/i386.c (ix86_avx_u128_mode_exit): Call
|
||||
ix86_avx_u128_mode_entry.
|
||||
|
||||
2019-01-08 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR tree-optimization/88753
|
||||
|
@ -19137,7 +19137,10 @@ ix86_avx_u128_mode_exit (void)
|
||||
if (reg && ix86_check_avx_upper_register (reg))
|
||||
return AVX_U128_DIRTY;
|
||||
|
||||
return AVX_U128_CLEAN;
|
||||
/* Exit mode is set to AVX_U128_DIRTY if there are 256bit or 512bit
|
||||
modes used in function arguments, otherwise return AVX_U128_CLEAN.
|
||||
*/
|
||||
return ix86_avx_u128_mode_entry ();
|
||||
}
|
||||
|
||||
/* Return a mode that ENTITY is assumed to be
|
||||
|
@ -1,3 +1,8 @@
|
||||
2019-01-08 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR target/88717
|
||||
* gcc.target/i386/pr88717.c: New test.
|
||||
|
||||
2019-01-08 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c++/88548 - this accepted in static member functions.
|
||||
|
24
gcc/testsuite/gcc.target/i386/pr88717.c
Normal file
24
gcc/testsuite/gcc.target/i386/pr88717.c
Normal file
@ -0,0 +1,24 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mavx512f -mvzeroupper" } */
|
||||
|
||||
#include <immintrin.h>
|
||||
|
||||
__m128
|
||||
foo1 (__m256 x)
|
||||
{
|
||||
return _mm256_castps256_ps128 (x);
|
||||
}
|
||||
|
||||
void
|
||||
foo2 (float *p, __m256 x)
|
||||
{
|
||||
*p = ((__v8sf)x)[0];
|
||||
}
|
||||
|
||||
void
|
||||
foo3 (float *p, __m512 x)
|
||||
{
|
||||
*p = ((__v16sf)x)[0];
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not "vzeroupper" } } */
|
Loading…
Reference in New Issue
Block a user