From 762613be3e563106eec05795785bd08d33466d7e Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 24 Aug 2015 17:58:42 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 10 +++++++++ gcc/df-scan.c | 57 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 45 insertions(+), 22 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index db0092eb0bf..5ebafe1fbcc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2015-08-24 Richard Sandiford + + * 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 * doc/install.texi (Binaries): Remove links no longer valid. diff --git a/gcc/df-scan.c b/gcc/df-scan.c index 93c2eae3e02..259c9591307 100644 --- a/gcc/df-scan.c +++ b/gcc/df-scan.c @@ -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 -- 2.30.2