Commit 941a9479 by Richard Guenther Committed by Richard Biener

re PR tree-optimization/36765 (Revision 137573 miscompiles 464.h264ref in SPEC CPU 2006)

2008-07-11  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/36765
	* tree-ssa-alias.c (compute_flow_insensitive_aliasing): Add
	aliases from HEAP vars to SMTs.

	* gcc.c-torture/execute/pr36765.c: New testcase.

From-SVN: r137715
parent d5e1c95e
2008-07-11 Richard Guenther <rguenther@suse.de>
PR tree-optimization/36765
* tree-ssa-alias.c (compute_flow_insensitive_aliasing): Add
aliases from HEAP vars to SMTs.
2008-07-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2008-07-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (LOOSE_WARN, STRICT_WARN): Update comments. * Makefile.in (LOOSE_WARN, STRICT_WARN): Update comments.
......
2008-07-11 Richard Guenther <rguenther@suse.de>
PR tree-optimization/36765
* gcc.c-torture/execute/pr36765.c: New testcase.
2008-07-10 Joseph Myers <joseph@codesourcery.com> 2008-07-10 Joseph Myers <joseph@codesourcery.com>
PR middle-end/29056 PR middle-end/29056
......
int __attribute__((noinline))
foo(int i)
{
int *p = __builtin_malloc (4 * sizeof(int));
*p = 0;
p[i] = 1;
return *p;
}
extern void abort (void);
int main()
{
if (foo(0) != 1)
abort ();
return 0;
}
...@@ -2370,6 +2370,8 @@ have_common_aliases_p (bitmap tag1aliases, bitmap tag2aliases) ...@@ -2370,6 +2370,8 @@ have_common_aliases_p (bitmap tag1aliases, bitmap tag2aliases)
static void static void
compute_flow_insensitive_aliasing (struct alias_info *ai) compute_flow_insensitive_aliasing (struct alias_info *ai)
{ {
referenced_var_iterator rvi;
tree var;
size_t i; size_t i;
timevar_push (TV_FLOW_INSENSITIVE); timevar_push (TV_FLOW_INSENSITIVE);
...@@ -2460,6 +2462,24 @@ compute_flow_insensitive_aliasing (struct alias_info *ai) ...@@ -2460,6 +2462,24 @@ compute_flow_insensitive_aliasing (struct alias_info *ai)
add_may_alias (tag1, tag2); add_may_alias (tag1, tag2);
} }
} }
/* We have to add all HEAP variables to all SMTs aliases bitmaps.
As we don't know which effective type the HEAP will have we cannot
do better here and we need the conflicts with obfuscated pointers
(a simple (*(int[n] *)ptr)[i] will do, with ptr from a VLA array
allocation). */
for (i = 0; i < ai->num_pointers; i++)
{
struct alias_map_d *p_map = ai->pointers[i];
tree tag = symbol_mem_tag (p_map->var);
FOR_EACH_REFERENCED_VAR (var, rvi)
{
if (var_ann (var)->is_heapvar)
add_may_alias (tag, var);
}
}
timevar_pop (TV_FLOW_INSENSITIVE); timevar_pop (TV_FLOW_INSENSITIVE);
} }
......
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