re PR target/80160 (operand has impossible constraints)

PR rtl-optimization/80160
	PR rtl-optimization/80159
	* lra-assigns.c (must_not_spill_p): Tighten new test to also take
	reg_alternate_class into account.

	* gcc.target/i386/pr80160.c: New test.

From-SVN: r246473
This commit is contained in:
Bernd Schmidt 2017-03-25 01:12:04 +00:00 committed by Bernd Schmidt
parent 199855f603
commit 5da906ca43
4 changed files with 61 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2017-03-25 Bernd Schmidt <bschmidt@redhat.com>
PR rtl-optimization/80160
PR rtl-optimization/80159
* lra-assigns.c (must_not_spill_p): Tighten new test to also take
reg_alternate_class into account.
2017-03-24 Vladimir Makarov <vmakarov@redhat.com>
PR target/80148

View File

@ -908,7 +908,8 @@ must_not_spill_p (unsigned spill_regno)
does not solve the general case where existing reloads fully
cover a limited register class. */
if (!bitmap_bit_p (&non_reload_pseudos, spill_regno)
&& reg_class_size [reg_preferred_class (spill_regno)] == 1)
&& reg_class_size [reg_preferred_class (spill_regno)] == 1
&& reg_alternate_class (spill_regno) == NO_REGS)
return true;
return false;
}

View File

@ -1,3 +1,10 @@
2017-03-25 Bernd Schmidt <bschmidt@redhat.com>
PR rtl-optimization/80160
PR rtl-optimization/80159
* gcc.target/i386/pr80160.c: New test.
2017-03-24 Jakub Jelinek <jakub@redhat.com>
PR sanitizer/79904

View File

@ -0,0 +1,45 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fno-omit-frame-pointer -w" } */
/* { dg-additional-options "-march=pentium-mmx" { target ia32 } } */
typedef struct { long long a; } a_t;
int *a, b;
a_t *e, c;
long long f;
void fn (int);
void fn2 (void);
int fn3 (a_t);
void fn4 (a_t);
a_t foo (long long val) { return (a_t){val}; }
static void
bar (int ka)
{
unsigned i;
for (i = 0; i < 512; i++) {
long d;
c = (a_t){d};
fn2 ();
}
fn (ka);
}
void
test (void)
{
a_t g;
a_t *h, j;
h = e;
j = *h;
if (e == (a_t *) 1) {
a_t k = {fn3 (j)};
fn4 (j);
long l;
g = foo((long long)b << 2 | l);
k = g;
if (j.a != k.a) {
a_t m = g;
int n = m.a, o = m.a >> 32;
asm ("# %0 %1 %2 %3" : "=m"(*a), "+A"(f) : "b"(n), "c"(o));
}
}
bar ((int) h);
}