Commit 7cb6668a by Meador Inge Committed by Richard Sandiford

re PR rtl-optimization/53352 (Incorrect CSE optimization on RTL expressions with…

re PR rtl-optimization/53352 (Incorrect CSE optimization on RTL expressions with a paradoxical subreg)

gcc/
2012-05-15  Meador Inge  <meadori@codesourcery.com>

	PR rtl-optimization/53352
	* cse.c (equiv_constant): Ignore paradoxical subregs.

gcc/testsuite/
2012-05-15  Meador Inge  <meadori@codesourcery.com>

	PR rtl-optimization/53352
	* gcc.dg/pr53352.c: New test.

From-SVN: r187648
parent 4a3afb1a
2012-05-18 Meador Inge <meadori@codesourcery.com>
PR rtl-optimization/53352
* cse.c (equiv_constant): Ignore paradoxical subregs.
2012-05-17 Steven Bosscher <steven@gcc.gnu.org>
PR rtl-optimization/53125
......
......@@ -3786,8 +3786,12 @@ equiv_constant (rtx x)
}
}
/* Otherwise see if we already have a constant for the inner REG. */
/* Otherwise see if we already have a constant for the inner REG,
and if that is enough to calculate an equivalent constant for
the subreg. Note that the upper bits of paradoxical subregs
are undefined, so they cannot be said to equal anything. */
if (REG_P (SUBREG_REG (x))
&& GET_MODE_SIZE (mode) <= GET_MODE_SIZE (imode)
&& (new_rtx = equiv_constant (SUBREG_REG (x))) != 0)
return simplify_subreg (mode, new_rtx, imode, SUBREG_BYTE (x));
......
2012-05-18 Meador Inge <meadori@codesourcery.com>
PR rtl-optimization/53352
* gcc.dg/pr53352.c: New test.
2012-05-17 David S. Miller <davem@davemloft.net>
* gfortran.dg/bessel_7.f90: Bump allowed precision to avoid
......
/* { dg-do run } */
/* { dg-options "-O1" } */
#include <stdlib.h>
typedef union
{
struct
{
unsigned char a;
unsigned char b;
unsigned char c;
unsigned char d;
} parts;
unsigned long whole;
} T;
T *g_t;
void bar (unsigned long x)
{
if (x != 0)
abort ();
}
int main ()
{
T one;
T two;
T tmp1, tmp2;
one.whole = 0xFFE0E0E0UL;
two.whole = 0xFF000000UL;
tmp1.parts = two.parts;
tmp2.parts = one.parts;
tmp2.parts.c = tmp1.parts.c;
one.parts = tmp2.parts;
g_t = &one;
bar (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