Commit ccf64c83 by Richard Guenther Committed by Richard Biener

re PR middle-end/33330 (Wrong alias for accessing scalar through array)

2007-09-07  Richard Guenther  <rguenther@suse.de>

	PR middle-end/33330
	* tree-ssa-operands.c (access_can_touch_variable): An access
	of the form (*p)[0] can touch a variable of same size.

From-SVN: r128240
parent 201b2ead
2007-09-07 Richard Guenther <rguenther@suse.de>
PR middle-end/33330
* tree-ssa-operands.c (access_can_touch_variable): An access
of the form (*p)[0] can touch a variable of same size.
2007-09-07 Jan Hubicka <jh@suse.cz> 2007-09-07 Jan Hubicka <jh@suse.cz>
* passes.c (init_optimization_passes): Add simple dce and addressable * passes.c (init_optimization_passes): Add simple dce and addressable
...@@ -1292,6 +1292,15 @@ access_can_touch_variable (tree ref, tree alias, HOST_WIDE_INT offset, ...@@ -1292,6 +1292,15 @@ access_can_touch_variable (tree ref, tree alias, HOST_WIDE_INT offset,
} }
To implement this, we just punt on accesses through union To implement this, we just punt on accesses through union
pointers entirely. pointers entirely.
Another case we have to allow is accessing a variable
through an array access at offset zero. This happens from
code generated by the fortran frontend like
char[1:1] & my_char_ref;
char my_char;
my_char_ref_1 = (char[1:1] &) &my_char;
D.874_2 = (*my_char_ref_1)[1]{lb: 1 sz: 1};
*/ */
else if (ref else if (ref
&& flag_strict_aliasing && flag_strict_aliasing
...@@ -1300,6 +1309,14 @@ access_can_touch_variable (tree ref, tree alias, HOST_WIDE_INT offset, ...@@ -1300,6 +1309,14 @@ access_can_touch_variable (tree ref, tree alias, HOST_WIDE_INT offset,
&& base && base
&& (TREE_CODE (base) != INDIRECT_REF && (TREE_CODE (base) != INDIRECT_REF
|| TREE_CODE (TREE_TYPE (base)) != UNION_TYPE) || TREE_CODE (TREE_TYPE (base)) != UNION_TYPE)
&& (TREE_CODE (base) != INDIRECT_REF
|| TREE_CODE (ref) != ARRAY_REF
|| offset != 0
|| (DECL_SIZE (alias)
&& TREE_CODE (DECL_SIZE (alias)) == INTEGER_CST
&& size != -1
&& (unsigned HOST_WIDE_INT)size
!= TREE_INT_CST_LOW (DECL_SIZE (alias))))
&& !AGGREGATE_TYPE_P (TREE_TYPE (alias)) && !AGGREGATE_TYPE_P (TREE_TYPE (alias))
&& TREE_CODE (TREE_TYPE (alias)) != COMPLEX_TYPE && TREE_CODE (TREE_TYPE (alias)) != COMPLEX_TYPE
&& !var_ann (alias)->is_heapvar && !var_ann (alias)->is_heapvar
......
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