Commit 4075e7e8 by Richard Guenther Committed by Richard Biener

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
parent 50cb834f
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> 2009-09-16 DJ Delorie <dj@redhat.com>
Kaz Kojima <kkojima@gcc.gnu.org> Kaz Kojima <kkojima@gcc.gnu.org>
......
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> 2009-09-16 DJ Delorie <dj@redhat.com>
Kaz Kojima <kkojima@gcc.gnu.org> Kaz Kojima <kkojima@gcc.gnu.org>
......
/* { 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" } } */
...@@ -616,12 +616,18 @@ is_global_var (const_tree t) ...@@ -616,12 +616,18 @@ is_global_var (const_tree t)
/* Return true if VAR may be aliased. A variable is considered as /* Return true if VAR may be aliased. A variable is considered as
maybe aliased if it has its address taken by the local TU 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 static inline bool
may_be_aliased (const_tree var) 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)));
} }
......
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