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:
parent
199855f603
commit
5da906ca43
|
@ -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>
|
2017-03-24 Vladimir Makarov <vmakarov@redhat.com>
|
||||||
|
|
||||||
PR target/80148
|
PR target/80148
|
||||||
|
|
|
@ -908,7 +908,8 @@ must_not_spill_p (unsigned spill_regno)
|
||||||
does not solve the general case where existing reloads fully
|
does not solve the general case where existing reloads fully
|
||||||
cover a limited register class. */
|
cover a limited register class. */
|
||||||
if (!bitmap_bit_p (&non_reload_pseudos, spill_regno)
|
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 true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
2017-03-24 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR sanitizer/79904
|
PR sanitizer/79904
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
Loading…
Reference in New Issue