Commit 438ffa2a by H.J. Lu

i386: Remove mode size check in ix86_get_ssemov

Even though ix86_hard_regno_mode_ok doesn't allow xmm16-xmm31 nor
ymm16-ymm31 in 128/256 bit modes when AVX512VL is disabled, LRA can
still generate reg to reg moves with xmm16-xmm31 and ymm16-ymm31 in
128/256 bit modes.  Remove mode size check in ix86_get_ssemov.

gcc/

	PR target/94561
	* config/i386/i386.c (ix86_get_ssemov): Remove mode size check.

gcc/testsuite/

	PR target/94561
	* gcc.target/i386/pr94561.c: New test.
parent efd5bd4d
2020-04-14 H.J. Lu <hongjiu.lu@intel.com>
PR target/94561
* config/i386/i386.c (ix86_get_ssemov): Remove mode size check.
2020-04-13 Martin Sebor <msebor@redhat.com> 2020-04-13 Martin Sebor <msebor@redhat.com>
* doc/extend.texi (-Wall): Mention -Wformat-overflow and * doc/extend.texi (-Wall): Mention -Wformat-overflow and
......
...@@ -4969,12 +4969,12 @@ ix86_get_ssemov (rtx *operands, unsigned size, ...@@ -4969,12 +4969,12 @@ ix86_get_ssemov (rtx *operands, unsigned size,
&& !TARGET_AVX512VL && !TARGET_AVX512VL
&& GET_MODE_SIZE (mode) < 64) && GET_MODE_SIZE (mode) < 64)
{ {
/* NB: Since ix86_hard_regno_mode_ok only allows xmm16-xmm31 or /* NB: Even though ix86_hard_regno_mode_ok doesn't allow
ymm16-ymm31 in 128/256 bit modes when AVX512VL is enabled, xmm16-xmm31 nor ymm16-ymm31 in 128/256 bit modes when
we get here only for xmm16-xmm31 or ymm16-ymm31 in 32/64 bit AVX512VL is disabled, LRA can still generate reg to
reg moves with xmm16-xmm31 and ymm16-ymm31 in 128/256 bit
modes. */ modes. */
if (GET_MODE_SIZE (mode) >= 16 if (memory_operand (operands[0], mode)
|| memory_operand (operands[0], mode)
|| memory_operand (operands[1], mode)) || memory_operand (operands[1], mode))
gcc_unreachable (); gcc_unreachable ();
size = 64; size = 64;
......
2020-04-14 H.J. Lu <hongjiu.lu@intel.com>
PR target/94561
* gcc.target/i386/pr94561.c: New test.
2020-04-14 Tobias Burnus <tobias@codesourcery.com> 2020-04-14 Tobias Burnus <tobias@codesourcery.com>
* gfortran.dg/use_rename_10.f90: New. * gfortran.dg/use_rename_10.f90: New.
......
/* PR target/94561 */
/* { dg-do compile } */
/* { dg-options "-march=knl -O3 -funroll-loops" } */
struct xi {
long int mg;
int lx;
};
struct xi *di;
int *eu;
void
he (void);
int
m8 (int we, int i8)
{
int wd, cj = 0;
for (wd = 0; wd < 80; ++wd)
{
if (di->mg == 0 && (eu[wd] | !!we) == 0 && di->lx == 0)
continue;
if (i8 == 0)
he ();
++cj;
}
return cj;
}
/* { dg-final { scan-assembler-not "vmov\[^\n\r]*%\[xy\]mm1\[6-9\].*" } } */
/* { dg-final { scan-assembler-not "vmov\[^\n\r]*%\[xy\]mm\[23\]\[0-9\].*" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment