re PR tree-optimization/34011 (Memory load is not eliminated from tight vectorized loop)

2009-09-16  Richard Guenther  <rguenther@suse.de>

	PR middle-end/34011
	* tree-flow-inline.h (may_be_aliased): Compute readonly variables
	as non-aliased.

	* gcc.dg/tree-ssa/ssa-lim-7.c: New testcase.

From-SVN: r151740
This commit is contained in:
Richard Guenther 2009-09-16 08:50:46 +00:00 committed by Richard Biener
parent 50cb834f7b
commit 4075e7e8dc
4 changed files with 34 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2009-09-16 Richard Guenther <rguenther@suse.de>
PR middle-end/34011
* tree-flow-inline.h (may_be_aliased): Compute readonly variables
as non-aliased.
2009-09-16 DJ Delorie <dj@redhat.com>
Kaz Kojima <kkojima@gcc.gnu.org>

View File

@ -1,3 +1,8 @@
2009-09-16 Richard Guenther <rguenther@suse.de>
PR middle-end/34011
* gcc.dg/tree-ssa/ssa-lim-7.c: New testcase.
2009-09-16 DJ Delorie <dj@redhat.com>
Kaz Kojima <kkojima@gcc.gnu.org>

View File

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-O -fdump-tree-lim1-details" } */
extern const int srcshift;
void foo (int *srcdata, int *dstdata)
{
int i;
for (i = 0; i < 256; i++)
dstdata[i] = srcdata[i] << srcshift;
}
/* { dg-final { scan-tree-dump "Moving statement" "lim1" } } */
/* { dg-final { cleanup-tree-dump "lim1" } } */

View File

@ -616,12 +616,18 @@ is_global_var (const_tree t)
/* Return true if VAR may be aliased. A variable is considered as
maybe aliased if it has its address taken by the local TU
or possibly by another TU. */
or possibly by another TU and might be modified through a pointer. */
static inline bool
may_be_aliased (const_tree var)
{
return (TREE_PUBLIC (var) || DECL_EXTERNAL (var) || TREE_ADDRESSABLE (var));
return (TREE_CODE (var) != CONST_DECL
&& !((TREE_STATIC (var) || TREE_PUBLIC (var) || DECL_EXTERNAL (var))
&& TREE_READONLY (var)
&& !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (var)))
&& (TREE_PUBLIC (var)
|| DECL_EXTERNAL (var)
|| TREE_ADDRESSABLE (var)));
}