From 95d938ee6f8d45d9e51c05bea7cb1b7dd695bbf4 Mon Sep 17 00:00:00 2001
From: Richard Guenther <rguenther@suse.de>
Date: Wed, 7 Apr 2010 14:34:35 +0000
Subject: [PATCH] tree-ssa-forwprop.c (forward_propagate_addr_expr): Propagate
 constants everywhere.

2010-04-07  Richard Guenther  <rguenther@suse.de>

	* tree-ssa-forwprop.c (forward_propagate_addr_expr):
	Propagate constants everywhere.

From-SVN: r158063
---
 gcc/ChangeLog           | 5 +++++
 gcc/tree-ssa-forwprop.c | 7 ++++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0840425687f7..20aa611e134d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2010-04-07  Richard Guenther  <rguenther@suse.de>
+
+	* tree-ssa-forwprop.c (forward_propagate_addr_expr):
+	Propagate constants everywhere.
+
 2010-04-07  Jakub Jelinek  <jakub@redhat.com>
 
 	PR debug/43516
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c
index 215179593701..d7d378b0f929 100644
--- a/gcc/tree-ssa-forwprop.c
+++ b/gcc/tree-ssa-forwprop.c
@@ -955,9 +955,10 @@ forward_propagate_addr_expr (tree name, tree rhs)
 	}
 
       /* If the use is in a deeper loop nest, then we do not want
-	 to propagate the ADDR_EXPR into the loop as that is likely
-	 adding expression evaluations into the loop.  */
-      if (gimple_bb (use_stmt)->loop_depth > stmt_loop_depth)
+	 to propagate non-invariant ADDR_EXPRs into the loop as that
+	 is likely adding expression evaluations into the loop.  */
+      if (gimple_bb (use_stmt)->loop_depth > stmt_loop_depth
+	  && !is_gimple_min_invariant (rhs))
 	{
 	  all = false;
 	  continue;
-- 
GitLab