Commit 36b86f4a by Jie Zhang Committed by Jie Zhang

re PR tree-optimization/45144 (SRA optimization issue of bit-field)

	PR tree-optimization/45144
	* tree-sra.c (type_consists_of_records_p): Return false
	if the record contains bit-field.

	testsuite/
	PR tree-optimization/45144
	* gcc.dg/tree-ssa/pr45144.c: New test.

From-SVN: r162897
parent 370f330f
2010-08-05 Jie Zhang <jie@codesourcery.com>
PR tree-optimization/45144
* tree-sra.c (type_consists_of_records_p): Return false
if the record contains bit-field.
2010-08-04 Richard Henderson <rth@redhat.com> 2010-08-04 Richard Henderson <rth@redhat.com>
* config/i386/i386.c (struct ix86_frame): Remove padding and * config/i386/i386.c (struct ix86_frame): Remove padding and
......
2010-08-05 Jie Zhang <jie@codesourcery.com>
PR tree-optimization/45144
* gcc.dg/tree-ssa/pr45144.c: New test.
2010-08-04 Janus Weil <janus@gcc.gnu.org> 2010-08-04 Janus Weil <janus@gcc.gnu.org>
PR fortran/42207 PR fortran/42207
......
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
void baz (unsigned);
extern unsigned buf[];
struct A
{
unsigned a1:10;
unsigned a2:3;
unsigned:19;
};
union TMP
{
struct A a;
unsigned int b;
};
static unsigned
foo (struct A *p)
{
union TMP t;
struct A x;
x = *p;
t.a = x;
return t.b;
}
void
bar (unsigned orig, unsigned *new)
{
struct A a;
union TMP s;
s.b = orig;
a = s.a;
if (a.a1)
baz (a.a2);
*new = foo (&a);
}
/* { dg-final { scan-tree-dump "x = a;" "optimized"} } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
...@@ -811,7 +811,7 @@ create_access (tree expr, gimple stmt, bool write) ...@@ -811,7 +811,7 @@ create_access (tree expr, gimple stmt, bool write)
/* Return true iff TYPE is a RECORD_TYPE with fields that are either of gimple /* Return true iff TYPE is a RECORD_TYPE with fields that are either of gimple
register types or (recursively) records with only these two kinds of fields. register types or (recursively) records with only these two kinds of fields.
It also returns false if any of these records has a zero-size field as its It also returns false if any of these records has a zero-size field as its
last field. */ last field or has a bit-field. */
static bool static bool
type_consists_of_records_p (tree type) type_consists_of_records_p (tree type)
...@@ -827,6 +827,9 @@ type_consists_of_records_p (tree type) ...@@ -827,6 +827,9 @@ type_consists_of_records_p (tree type)
{ {
tree ft = TREE_TYPE (fld); tree ft = TREE_TYPE (fld);
if (DECL_BIT_FIELD (fld))
return false;
if (!is_gimple_reg_type (ft) if (!is_gimple_reg_type (ft)
&& !type_consists_of_records_p (ft)) && !type_consists_of_records_p (ft))
return false; return false;
......
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