Commit 762613be by Richard Sandiford Committed by Richard Sandiford

df-scan.c (df_insn_info_init_fields): New function, split out from...

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
parent 50b43b86
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> 2015-08-24 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
* doc/install.texi (Binaries): Remove links no longer valid. * doc/install.texi (Binaries): Remove links no longer valid.
......
...@@ -809,6 +809,14 @@ df_reg_chain_unlink (df_ref ref) ...@@ -809,6 +809,14 @@ df_reg_chain_unlink (df_ref ref)
df_free_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 /* Create the insn record for INSN. If there was one there, zero it
out. */ out. */
...@@ -827,8 +835,7 @@ df_insn_create_insn_record (rtx_insn *insn) ...@@ -827,8 +835,7 @@ df_insn_create_insn_record (rtx_insn *insn)
insn_rec = problem_data->insn_pool->allocate (); insn_rec = problem_data->insn_pool->allocate ();
DF_INSN_INFO_SET (insn, insn_rec); DF_INSN_INFO_SET (insn, insn_rec);
} }
memset (insn_rec, 0, sizeof (struct df_insn_info)); df_insn_info_init_fields (insn_rec, insn);
insn_rec->insn = insn;
return insn_rec; return insn_rec;
} }
...@@ -876,6 +883,29 @@ df_mw_hardreg_chain_delete (struct df_mw_hardreg *hardregs) ...@@ -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. /* Delete all of the refs information from the insn with UID.
Internal helper for df_insn_delete, df_insn_rescan, and other Internal helper for df_insn_delete, df_insn_rescan, and other
...@@ -895,24 +925,7 @@ df_insn_info_delete (unsigned int uid) ...@@ -895,24 +925,7 @@ df_insn_info_delete (unsigned int uid)
struct df_scan_problem_data *problem_data struct df_scan_problem_data *problem_data
= (struct df_scan_problem_data *) df_scan->problem_data; = (struct df_scan_problem_data *) df_scan->problem_data;
/* In general, notes do not have the insn_info fields df_insn_info_free_fields (insn_info);
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);
problem_data->insn_pool->remove (insn_info); problem_data->insn_pool->remove (insn_info);
DF_INSN_UID_SET (uid, NULL); DF_INSN_UID_SET (uid, NULL);
} }
...@@ -1075,8 +1088,8 @@ df_insn_rescan (rtx_insn *insn) ...@@ -1075,8 +1088,8 @@ df_insn_rescan (rtx_insn *insn)
/* There's change - we need to delete the existing info. /* There's change - we need to delete the existing info.
Since the insn isn't moved, we can salvage its LUID. */ Since the insn isn't moved, we can salvage its LUID. */
luid = DF_INSN_LUID (insn); luid = DF_INSN_LUID (insn);
df_insn_info_delete (uid); df_insn_info_free_fields (insn_info);
df_insn_create_insn_record (insn); df_insn_info_init_fields (insn_info, insn);
DF_INSN_LUID (insn) = luid; DF_INSN_LUID (insn) = luid;
} }
else else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment