Commit f6937e32 by Vladimir Makarov Committed by Vladimir Makarov

re PR rtl-optimization/58759 (wrong code (segfaults) at -O2 on x86_64-linux-gnu in 32-bit mode)

2013-10-25  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/58759
	* lra-constraints.c (lra_constraints): Remove wrong condition to
	remove insn setting up an equivalent pseudo.

2013-10-25  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/58759
	* gcc.target/i386/pr58759.c: New.

From-SVN: r204080
parent 01b1efaa
2013-10-25 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/58759
* lra-constraints.c (lra_constraints): Remove wrong condition to
remove insn setting up an equivalent pseudo.
2013-10-25 Vladimir Makarov <vmakarov@redhat.com>
* config/rs6000/rs6000-protos.h
(rs6000_secondary_memory_needed_mode): New prototype.
* config/rs6000/rs6000.c: Include ira.h.
......@@ -3975,18 +3975,6 @@ lra_constraints (bool first_p)
dest_reg = SUBREG_REG (dest_reg);
if ((REG_P (dest_reg)
&& (x = get_equiv_substitution (dest_reg)) != dest_reg
/* Check that this is actually an insn setting up
the equivalence. */
&& (in_list_p (curr_insn,
ira_reg_equiv
[REGNO (dest_reg)].init_insns)
/* Init insns may contain not all insns setting
up equivalence as we have live range
splitting. So here we use another condition
to check insn setting up the equivalence
which should be removed, e.g. in case when
the equivalence is a constant. */
|| ! MEM_P (x))
/* Remove insns which set up a pseudo whose value
can not be changed. Such insns might be not in
init_insns because we don't update equiv data
......@@ -4001,6 +3989,8 @@ lra_constraints (bool first_p)
case we should remove the additional insn and
this insn is not init_insns list. */
&& (! MEM_P (x) || MEM_READONLY_P (x)
/* Check that this is actually an insn setting
up the equivalence. */
|| in_list_p (curr_insn,
ira_reg_equiv
[REGNO (dest_reg)].init_insns)))
......
2013-10-25 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/58759
* gcc.target/i386/pr58759.c: New.
2013-10-25 Tobias Burnus <burnus@net-b.de>
* g++.dg/vect/pr33426-ivdep.cc: Use dg-options.
......
/* { dg-do run } */
/* { dg-options "-O2" } */
int a, b, c, d, e, f, h, l, m, n, k, o;
long long g;
struct S
{
int f1;
int f2;
int f3;
int f4;
};
static struct S i = {0,0,0,0}, j;
void
foo ()
{
m = 1 & d;
n = b + c;
o = k >> 1;
f = 0 == e;
}
int
main ()
{
for (; h < 1; h++)
{
g = 1 | (0 > 1 - a ? 0 : a);
foo ();
for (l = 0; l < 3; l++)
j = i;
}
return 0;
}
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