aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/fwprop.c6
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b2efe99..dadfa10 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2006-12-22 Paolo Bonzini <bonzini@gnu.org>
+
+ PR rtl-optimization/29840
+
+ * fwprop.c (forward_propagate_into): Reject artificial uses/defs.
+ (fwprop_init): Add DF_HARD_REGS to df_init call.
+
2006-12-21 Andrew Pinski <pinskia@gmail.com>
* tree-nested.c (create_tmp_var_for): Check for vector type
diff --git a/gcc/fwprop.c b/gcc/fwprop.c
index 887da70..46e1a55 100644
--- a/gcc/fwprop.c
+++ b/gcc/fwprop.c
@@ -846,6 +846,8 @@ forward_propagate_into (struct df_ref *use)
if (DF_REF_FLAGS (use) & DF_REF_READ_WRITE)
return;
+ if (DF_REF_FLAGS (use) & DF_REF_ARTIFICIAL)
+ return;
/* Only consider uses that have a single definition. */
defs = DF_REF_CHAIN (use);
@@ -855,6 +857,8 @@ forward_propagate_into (struct df_ref *use)
def = defs->ref;
if (DF_REF_FLAGS (def) & DF_REF_READ_WRITE)
return;
+ if (DF_REF_FLAGS (def) & DF_REF_ARTIFICIAL)
+ return;
/* Do not propagate loop invariant definitions inside the loop if
we are going to unroll. */
@@ -899,7 +903,7 @@ fwprop_init (void)
/* Now set up the dataflow problem (we only want use-def chains) and
put the dataflow solver to work. */
- df = df_init (DF_SUBREGS | DF_EQUIV_NOTES);
+ df = df_init (DF_HARD_REGS | DF_SUBREGS | DF_EQUIV_NOTES);
df_chain_add_problem (df, DF_UD_CHAIN);
df_analyze (df);
df_dump (df, dump_file);