re PR tree-optimization/49651 (nested lambdas and -O3 produced incorrect integer variable increments)
2012-01-04 Richard Guenther <rguenther@suse.de> PR tree-optimization/49651 * tree-ssa-structalias.c (type_can_have_subvars): New function. (var_can_have_subvars): Use it. (get_constraint_for_1): Only consider subfields if there can be any. * gcc.dg/tree-ssa/pta-ptrarith-1.c: Adjust. * gcc.dg/tree-ssa/pta-ptrarith-2.c: Likewise. From-SVN: r182865
This commit is contained in:
parent
53618d0275
commit
b4cf8c9da2
5 changed files with 29 additions and 8 deletions
|
@ -1,3 +1,11 @@
|
|||
2012-01-04 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/49651
|
||||
* tree-ssa-structalias.c (type_can_have_subvars): New function.
|
||||
(var_can_have_subvars): Use it.
|
||||
(get_constraint_for_1): Only consider subfields if there
|
||||
can be any.
|
||||
|
||||
2012-01-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR bootstrap/51725
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2012-01-04 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/49651
|
||||
* gcc.dg/tree-ssa/pta-ptrarith-1.c: Adjust.
|
||||
* gcc.dg/tree-ssa/pta-ptrarith-2.c: Likewise.
|
||||
|
||||
2012-01-03 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/51738
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fno-tree-ccp -fdump-tree-ealias" } */
|
||||
/* { dg-options "-O2 -fno-tree-forwprop -fno-tree-ccp -fdump-tree-ealias" } */
|
||||
|
||||
extern void abort (void);
|
||||
struct X {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fno-tree-ccp -fdump-tree-ealias" } */
|
||||
/* { dg-options "-O2 -fno-tree-forwprop -fno-tree-ccp -fdump-tree-ealias" } */
|
||||
|
||||
extern void abort (void);
|
||||
struct X {
|
||||
|
|
|
@ -303,6 +303,7 @@ static varinfo_t first_vi_for_offset (varinfo_t, unsigned HOST_WIDE_INT);
|
|||
static varinfo_t first_or_preceding_vi_for_offset (varinfo_t,
|
||||
unsigned HOST_WIDE_INT);
|
||||
static varinfo_t lookup_vi_for_tree (tree);
|
||||
static inline bool type_can_have_subvars (const_tree);
|
||||
|
||||
/* Pool of variable info structures. */
|
||||
static alloc_pool variable_info_pool;
|
||||
|
@ -3275,7 +3276,8 @@ get_constraint_for_1 (tree t, VEC (ce_s, heap) **results, bool address_p,
|
|||
return;
|
||||
|
||||
cs = *VEC_last (ce_s, *results);
|
||||
if (cs.type == DEREF)
|
||||
if (cs.type == DEREF
|
||||
&& type_can_have_subvars (TREE_TYPE (t)))
|
||||
{
|
||||
/* For dereferences this means we have to defer it
|
||||
to solving time. */
|
||||
|
@ -5043,6 +5045,15 @@ sort_fieldstack (VEC(fieldoff_s,heap) *fieldstack)
|
|||
VEC_qsort (fieldoff_s, fieldstack, fieldoff_compare);
|
||||
}
|
||||
|
||||
/* Return true if T is a type that can have subvars. */
|
||||
|
||||
static inline bool
|
||||
type_can_have_subvars (const_tree t)
|
||||
{
|
||||
/* Aggregates without overlapping fields can have subvars. */
|
||||
return TREE_CODE (t) == RECORD_TYPE;
|
||||
}
|
||||
|
||||
/* Return true if V is a tree that we can have subvars for.
|
||||
Normally, this is any aggregate type. Also complex
|
||||
types which are not gimple registers can have subvars. */
|
||||
|
@ -5058,11 +5069,7 @@ var_can_have_subvars (const_tree v)
|
|||
if (!DECL_P (v))
|
||||
return false;
|
||||
|
||||
/* Aggregates without overlapping fields can have subvars. */
|
||||
if (TREE_CODE (TREE_TYPE (v)) == RECORD_TYPE)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return type_can_have_subvars (TREE_TYPE (v));
|
||||
}
|
||||
|
||||
/* Return true if T is a type that does contain pointers. */
|
||||
|
|
Loading…
Add table
Reference in a new issue