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
This commit is contained in:
Richard Guenther 2007-10-29 21:47:05 +00:00 committed by Richard Biener
parent 9c67102d11
commit 5a347f2b40
4 changed files with 27 additions and 34 deletions

View File

@ -1,3 +1,10 @@
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

View File

@ -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

View File

@ -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

View File

@ -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