summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr33870.x9
-rw-r--r--gcc/tree-ssa-operands.c40
4 files changed, 27 insertions, 34 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f8dd7fcb22f..9899775fb38 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2007-10-29 Richard Guenther <rguenther@suse.de>
+ PR tree-optimization/33870
+ * tree-ssa-operands.c (add_vars_for_offset): Remove mpt_vars parameter.
+ (add_virtual_operand): Do not recurse into MPTs looking for pointed-to
+ SFTs.
+
+2007-10-29 Richard Guenther <rguenther@suse.de>
+
* passes.c (init_optimization_passes): Exchange store_copy_prop
with copy_prop.
* tree-pass.h (pass_store_copy_prop): Remove.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ab84896eae2..bde12e5fd65 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-10-29 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/33870
+ * gcc.c-torture/execute/pr33870.x: XFAIL testcase for -O2 and -Os.
+
2007-10-29 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/33757
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr33870.x b/gcc/testsuite/gcc.c-torture/execute/pr33870.x
new file mode 100644
index 00000000000..fbf8aae4ab6
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr33870.x
@@ -0,0 +1,9 @@
+# The test breaks because of wrong alias info for -O2 and -Os
+
+set torture_eval_before_compile {
+ if {[string match {*-O[2s]*} "$option"]} {
+ set torture_execute_xfail "*-*-*"
+ }
+}
+
+return 0
diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c
index 1203a47faab..8772313f3ac 100644
--- a/gcc/tree-ssa-operands.c
+++ b/gcc/tree-ssa-operands.c
@@ -1391,7 +1391,7 @@ access_can_touch_variable (tree ref, tree alias, HOST_WIDE_INT offset,
static bool
add_vars_for_offset (tree var,
unsigned HOST_WIDE_INT offset, unsigned HOST_WIDE_INT size,
- bool is_def, bitmap mpt_vars)
+ bool is_def)
{
bool added = false;
tree subvar;
@@ -1412,16 +1412,10 @@ add_vars_for_offset (tree var,
if (size <= SFT_OFFSET (subvar) - offset)
break;
- /* Avoid adding a SFT that is contained in the same MPT as the
- pointed-to location as this MPT will be added as alias anyway. */
- if (!mpt_vars
- || !bitmap_bit_p (mpt_vars, DECL_UID (subvar)))
- {
- if (is_def)
- append_vdef (subvar);
- else
- append_vuse (subvar);
- }
+ if (is_def)
+ append_vdef (subvar);
+ else
+ append_vuse (subvar);
added = true;
}
@@ -1502,34 +1496,12 @@ add_virtual_operand (tree var, stmt_ann_t s_ann, int flags,
{
tree al = referenced_var (i);
- /* We have to consider SFTs inside MPTs as possible pointed-to
- location as well because even if aliases does not contain
- a single SFT, the SFTs inside the MPT may be incomplete in
- that not all aliased subvars have to be in this MPT, too.
- But only if we start with NMT aliases. */
- if (TREE_CODE (al) == MEMORY_PARTITION_TAG
- && TREE_CODE (var) == NAME_MEMORY_TAG)
- {
- bitmap_iterator bi;
- unsigned int i;
-
- EXECUTE_IF_SET_IN_BITMAP (MPT_SYMBOLS (al), 0, i, bi)
- {
- tree ptsft = referenced_var (i);
-
- if (TREE_CODE (ptsft) == STRUCT_FIELD_TAG)
- none_added &= !add_vars_for_offset (ptsft, offset, size,
- flags & opf_def,
- MPT_SYMBOLS (al));
- }
- }
-
/* For SFTs we have to consider all subvariables of the parent var
if it is a potential points-to location. */
if (TREE_CODE (al) == STRUCT_FIELD_TAG
&& TREE_CODE (var) == NAME_MEMORY_TAG)
none_added &= !add_vars_for_offset (al, offset, size,
- flags & opf_def, NULL);
+ flags & opf_def);
else
{
/* Call-clobbered tags may have non-call-clobbered