On Tue, Jul 26, 2011 at 09:39:02AM +0200, Richard Guenther wrote: > On Mon, Jul 25, 2011 at 7:52 PM, Martin Jambor <mjam...@suse.cz> wrote:
... > > > > 2011-07-25 Martin Jambor <mjam...@suse.cz> > > > > * tree-sra.c (tree_non_mode_aligned_mem_p): Strip conversions and > > return false for invariants. > > > > Index: src/gcc/tree-sra.c > > =================================================================== > > --- src.orig/gcc/tree-sra.c > > +++ src/gcc/tree-sra.c > > @@ -1075,9 +1075,14 @@ tree_non_mode_aligned_mem_p (tree exp) > > enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp)); > > unsigned int align; > > > > + while (CONVERT_EXPR_P (exp) > > There can be no convert exprs here, and there can be at most one > VIEW_CONVERT_EXPR. > > > + || TREE_CODE (exp) == VIEW_CONVERT_EXPR) > > + exp = TREE_OPERAND (exp, 0); > > + > > if (TREE_CODE (exp) == SSA_NAME > > || TREE_CODE (exp) == MEM_REF > > || mode == BLKmode > > + || is_gimple_min_invariant (exp) > > || !STRICT_ALIGNMENT) > > return false; > > Otherwise ok. > OK, this is what I have just committed as revision 176797 after re-testing. Thanks, Martin 2011-07-26 Martin Jambor <mjam...@suse.cz> * tree-sra.c (tree_non_mode_aligned_mem_p): Strip conversions and return false for invariants. Index: src/gcc/tree-sra.c =================================================================== --- src.orig/gcc/tree-sra.c +++ src/gcc/tree-sra.c @@ -1075,9 +1075,13 @@ tree_non_mode_aligned_mem_p (tree exp) enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp)); unsigned int align; + if (TREE_CODE (exp) == VIEW_CONVERT_EXPR) + exp = TREE_OPERAND (exp, 0); + if (TREE_CODE (exp) == SSA_NAME || TREE_CODE (exp) == MEM_REF || mode == BLKmode + || is_gimple_min_invariant (exp) || !STRICT_ALIGNMENT) return false;