Commit 5a347f2b by Richard Guenther Committed by Richard Biener

re PR tree-optimization/33870 (miscompiles sqlite)

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.

	* gcc.c-torture/execute/pr33870.x: XFAIL testcase for -O2 and -Os.

From-SVN: r129738
parent 9c67102d
2007-10-29 Richard Guenther <rguenther@suse.de> 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 * passes.c (init_optimization_passes): Exchange store_copy_prop
with copy_prop. with copy_prop.
* tree-pass.h (pass_store_copy_prop): Remove. * tree-pass.h (pass_store_copy_prop): Remove.
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> 2007-10-29 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/33757 PR tree-optimization/33757
# 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
...@@ -1391,7 +1391,7 @@ access_can_touch_variable (tree ref, tree alias, HOST_WIDE_INT offset, ...@@ -1391,7 +1391,7 @@ access_can_touch_variable (tree ref, tree alias, HOST_WIDE_INT offset,
static bool static bool
add_vars_for_offset (tree var, add_vars_for_offset (tree var,
unsigned HOST_WIDE_INT offset, unsigned HOST_WIDE_INT size, unsigned HOST_WIDE_INT offset, unsigned HOST_WIDE_INT size,
bool is_def, bitmap mpt_vars) bool is_def)
{ {
bool added = false; bool added = false;
tree subvar; tree subvar;
...@@ -1412,16 +1412,10 @@ add_vars_for_offset (tree var, ...@@ -1412,16 +1412,10 @@ add_vars_for_offset (tree var,
if (size <= SFT_OFFSET (subvar) - offset) if (size <= SFT_OFFSET (subvar) - offset)
break; break;
/* Avoid adding a SFT that is contained in the same MPT as the if (is_def)
pointed-to location as this MPT will be added as alias anyway. */ append_vdef (subvar);
if (!mpt_vars else
|| !bitmap_bit_p (mpt_vars, DECL_UID (subvar))) append_vuse (subvar);
{
if (is_def)
append_vdef (subvar);
else
append_vuse (subvar);
}
added = true; added = true;
} }
...@@ -1502,34 +1496,12 @@ add_virtual_operand (tree var, stmt_ann_t s_ann, int flags, ...@@ -1502,34 +1496,12 @@ add_virtual_operand (tree var, stmt_ann_t s_ann, int flags,
{ {
tree al = referenced_var (i); 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 /* For SFTs we have to consider all subvariables of the parent var
if it is a potential points-to location. */ if it is a potential points-to location. */
if (TREE_CODE (al) == STRUCT_FIELD_TAG if (TREE_CODE (al) == STRUCT_FIELD_TAG
&& TREE_CODE (var) == NAME_MEMORY_TAG) && TREE_CODE (var) == NAME_MEMORY_TAG)
none_added &= !add_vars_for_offset (al, offset, size, none_added &= !add_vars_for_offset (al, offset, size,
flags & opf_def, NULL); flags & opf_def);
else else
{ {
/* Call-clobbered tags may have non-call-clobbered /* Call-clobbered tags may have non-call-clobbered
......
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