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>
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.
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
# 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,
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
......
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