df-scan.c (df_insn_info_init_fields): New function, split out from...
authorRichard Sandiford <richard.sandiford@arm.com>
Mon, 24 Aug 2015 17:58:42 +0000 (17:58 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 24 Aug 2015 17:58:42 +0000 (17:58 +0000)
gcc/
* df-scan.c (df_insn_info_init_fields): New function, split out
from...
(df_insn_create_insn_record): ...here.
(df_insn_info_free_fields): New function, split out from...
(df_insn_info_delete): ...here.
(df_insn_rescan): Use the new functions instead of freeing and
reallocating the df_insn_info.

From-SVN: r227139

gcc/ChangeLog
gcc/df-scan.c

index db0092eb0bfa09528cfcf4a51803e410d70fb0af..5ebafe1fbcc92510eb661d4db17412693382af50 100644 (file)
@@ -1,3 +1,13 @@
+2015-08-24  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * df-scan.c (df_insn_info_init_fields): New function, split out
+       from...
+       (df_insn_create_insn_record): ...here.
+       (df_insn_info_free_fields): New function, split out from...
+       (df_insn_info_delete): ...here.
+       (df_insn_rescan): Use the new functions instead of freeing and
+       reallocating the df_insn_info.
+
 2015-08-24  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
        * doc/install.texi (Binaries): Remove links no longer valid.
index 93c2eae3e0228518003f924d76cbd08aba86fae8..259c959130749be90b2674e4baa0968e1045c975 100644 (file)
@@ -809,6 +809,14 @@ df_reg_chain_unlink (df_ref ref)
   df_free_ref (ref);
 }
 
+/* Initialize INSN_INFO to describe INSN.  */
+
+static void
+df_insn_info_init_fields (df_insn_info *insn_info, rtx_insn *insn)
+{
+  memset (insn_info, 0, sizeof (struct df_insn_info));
+  insn_info->insn = insn;
+}
 
 /* Create the insn record for INSN.  If there was one there, zero it
    out.  */
@@ -827,8 +835,7 @@ df_insn_create_insn_record (rtx_insn *insn)
       insn_rec = problem_data->insn_pool->allocate ();
       DF_INSN_INFO_SET (insn, insn_rec);
     }
-  memset (insn_rec, 0, sizeof (struct df_insn_info));
-  insn_rec->insn = insn;
+  df_insn_info_init_fields (insn_rec, insn);
   return insn_rec;
 }
 
@@ -876,6 +883,29 @@ df_mw_hardreg_chain_delete (struct df_mw_hardreg *hardregs)
     }
 }
 
+/* Remove the contents of INSN_INFO (but don't free INSN_INFO itself).  */
+
+static void
+df_insn_info_free_fields (df_insn_info *insn_info)
+{
+  /* In general, notes do not have the insn_info fields
+     initialized.  However, combine deletes insns by changing them
+     to notes.  How clever.  So we cannot just check if it is a
+     valid insn before short circuiting this code, we need to see
+     if we actually initialized it.  */
+  df_mw_hardreg_chain_delete (insn_info->mw_hardregs);
+
+  if (df_chain)
+    {
+      df_ref_chain_delete_du_chain (insn_info->defs);
+      df_ref_chain_delete_du_chain (insn_info->uses);
+      df_ref_chain_delete_du_chain (insn_info->eq_uses);
+    }
+
+  df_ref_chain_delete (insn_info->defs);
+  df_ref_chain_delete (insn_info->uses);
+  df_ref_chain_delete (insn_info->eq_uses);
+}
 
 /* Delete all of the refs information from the insn with UID.
    Internal helper for df_insn_delete, df_insn_rescan, and other
@@ -895,24 +925,7 @@ df_insn_info_delete (unsigned int uid)
       struct df_scan_problem_data *problem_data
        = (struct df_scan_problem_data *) df_scan->problem_data;
 
-      /* In general, notes do not have the insn_info fields
-        initialized.  However, combine deletes insns by changing them
-        to notes.  How clever.  So we cannot just check if it is a
-        valid insn before short circuiting this code, we need to see
-        if we actually initialized it.  */
-      df_mw_hardreg_chain_delete (insn_info->mw_hardregs);
-
-      if (df_chain)
-       {
-         df_ref_chain_delete_du_chain (insn_info->defs);
-         df_ref_chain_delete_du_chain (insn_info->uses);
-         df_ref_chain_delete_du_chain (insn_info->eq_uses);
-       }
-
-      df_ref_chain_delete (insn_info->defs);
-      df_ref_chain_delete (insn_info->uses);
-      df_ref_chain_delete (insn_info->eq_uses);
-
+      df_insn_info_free_fields (insn_info);
       problem_data->insn_pool->remove (insn_info);
       DF_INSN_UID_SET (uid, NULL);
     }
@@ -1075,8 +1088,8 @@ df_insn_rescan (rtx_insn *insn)
       /* There's change - we need to delete the existing info.
         Since the insn isn't moved, we can salvage its LUID.  */
       luid = DF_INSN_LUID (insn);
-      df_insn_info_delete (uid);
-      df_insn_create_insn_record (insn);
+      df_insn_info_free_fields (insn_info);
+      df_insn_info_init_fields (insn_info, insn);
       DF_INSN_LUID (insn) = luid;
     }
   else