	* web.c (union_defs): Do not proces REG_EQUAL uses.
	(web_main): Drop all REG_EQUAL notes.  Add back DF_RD_PRUNE_DEAD_DEFS.

Index: web.c
===================================================================
--- web.c	(revision 192438)
+++ web.c	(working copy)
@@ -141,37 +141,22 @@ union_defs (df_ref use, struct web_entry
 {
   struct df_insn_info *insn_info = DF_REF_INSN_INFO (use);
   struct df_link *link = DF_REF_CHAIN (use);
-  df_ref *eq_use_link;
   df_ref *def_link;
   rtx set;
 
   if (insn_info)
     {
       rtx insn = insn_info->insn;
-      eq_use_link = DF_INSN_INFO_EQ_USES (insn_info);
       def_link = DF_INSN_INFO_DEFS (insn_info);
       set = single_set (insn);
     }
   else
     {
       /* An artificial use.  It links up with nothing.  */
-      eq_use_link = NULL;
       def_link = NULL;
       set = NULL;
     }
 
-  /* Union all occurrences of the same register in reg notes.  */
-
-  if (eq_use_link)
-    while (*eq_use_link)
-      {
-	if (use != *eq_use_link
-	    && DF_REF_REAL_REG (use) == DF_REF_REAL_REG (*eq_use_link))
-	  (*fun) (use_entry + DF_REF_ID (use),
-		  use_entry + DF_REF_ID (*eq_use_link));
-	eq_use_link++;
-    }
-
   /* Recognize trivial noop moves and attempt to keep them as noop.  */
 
   if (set
@@ -312,9 +297,7 @@ web_main (void)
   unsigned int uses_num = 0;
   rtx insn;
 
-  df_set_flags (DF_NO_HARD_REGS + DF_EQ_NOTES);
-  /* We can not RD_PRUNE_DEAD_DEFS, because we care about REG_EQUAL
-     notes.  */
+  df_set_flags (DF_NO_HARD_REGS + DF_RD_PRUNE_DEAD_DEFS);
   df_chain_add_problem (DF_UD_CHAIN);
   df_analyze ();
   df_set_flags (DF_DEFER_INSN_RESCAN);
@@ -333,12 +316,6 @@ web_main (void)
 	      if (DF_REF_REGNO (use) >= FIRST_PSEUDO_REGISTER)
 		DF_REF_ID (use) = uses_num++;
 	    }
-	  for (use_rec = DF_INSN_UID_EQ_USES (uid); *use_rec; use_rec++)
-	    {
-	      df_ref use = *use_rec;
-	      if (DF_REF_REGNO (use) >= FIRST_PSEUDO_REGISTER)
-		DF_REF_ID (use) = uses_num++;
-	    }
 	}
     }
 
@@ -355,6 +332,14 @@ web_main (void)
       if (NONDEBUG_INSN_P (insn))
 	{
 	  df_ref *use_rec;
+	  /* We do not update USE operands in in REG_EQUAL notes because
+	     such USEs do not make a register live and therefore they do
+	     not appear in the webs we construct.  We cannot prove whether
+	     a note remains valid after renaming, so drop them all here.
+	     USEs in REG_EQUIV notes would also not renamed, but they are,
+	     by definition, only set once so they are not candidates for
+	     renaming anyway.  */
+	  remove_note (insn, find_reg_note (insn, REG_EQUAL, NULL_RTX));
 	  union_match_dups (insn, def_entry, use_entry, unionfind_union);
 	  for (use_rec = DF_INSN_UID_USES (uid); *use_rec; use_rec++)
 	    {
@@ -362,12 +347,6 @@ web_main (void)
 	      if (DF_REF_REGNO (use) >= FIRST_PSEUDO_REGISTER)
 		union_defs (use, def_entry, used, use_entry, unionfind_union);
 	    }
-	  for (use_rec = DF_INSN_UID_EQ_USES (uid); *use_rec; use_rec++)
-	    {
-	      df_ref use = *use_rec;
-	      if (DF_REF_REGNO (use) >= FIRST_PSEUDO_REGISTER)
-		union_defs (use, def_entry, used, use_entry, unionfind_union);
-	    }
 	}
     }
 
@@ -397,12 +376,6 @@ web_main (void)
 	      if (DF_REF_REGNO (use) >= FIRST_PSEUDO_REGISTER)
 		replace_ref (use, entry_register (use_entry + DF_REF_ID (use), use, used));
 	    }
-	  for (use_rec = DF_INSN_UID_EQ_USES (uid); *use_rec; use_rec++)
-	    {
-	      df_ref use = *use_rec;
-	      if (DF_REF_REGNO (use) >= FIRST_PSEUDO_REGISTER)
-		replace_ref (use, entry_register (use_entry + DF_REF_ID (use), use, used));
-	    }
 	  for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
 	    {
 	      df_ref def = *def_rec;
