This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH 102/236] ree.c: Use rtx_insn
- From: David Malcolm <dmalcolm at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: David Malcolm <dmalcolm at redhat dot com>
- Date: Wed, 6 Aug 2014 13:21:21 -0400
- Subject: [PATCH 102/236] ree.c: Use rtx_insn
- Authentication-results: sourceware.org; auth=none
- References: <1407345815-14551-1-git-send-email-dmalcolm at redhat dot com>
gcc/
* ree.c (struct ext_cand): Strengthen field "insn" from rtx to
rtx_insn *.
(combine_set_extension): Likewise for param "curr_insn".
(transform_ifelse): Likewise for param "def_insn".
(get_defs): Likewise for param "def_insn". Strengthen param "dest"
from vec<rtx> * to vec<rtx_insn *> *.
(is_cond_copy_insn): Likewise for param "insn".
(struct ext_state): Strengthen the four vec fields from vec<rtx>
to vec<rtx_insn *>.
(make_defs_and_copies_lists): Strengthen param "extend_insn" and
local "def_insn" from rtx to rtx_insn *.
(get_sub_rtx): Likewise for param "def_insn".
(merge_def_and_ext): Likewise.
(combine_reaching_defs): Likewise.
(add_removable_extension): Likewise for param "insn".
(find_removable_extensions): Likewise for local "insn".
(find_and_remove_re): Likewise for locals "curr_insn" and
"def_insn". Strengthen locals "reinsn_del_list" and
"reinsn_del_list" from auto_vec<rtx> to auto_vec<rtx_insn *>.
---
gcc/ree.c | 45 +++++++++++++++++++++++----------------------
1 file changed, 23 insertions(+), 22 deletions(-)
diff --git a/gcc/ree.c b/gcc/ree.c
index 77f1384..6ca6345 100644
--- a/gcc/ree.c
+++ b/gcc/ree.c
@@ -255,7 +255,7 @@ typedef struct ext_cand
enum machine_mode mode;
/* The instruction where it lives. */
- rtx insn;
+ rtx_insn *insn;
} ext_cand;
@@ -279,7 +279,7 @@ static int max_insn_uid;
assign it to the register. */
static bool
-combine_set_extension (ext_cand *cand, rtx curr_insn, rtx *orig_set)
+combine_set_extension (ext_cand *cand, rtx_insn *curr_insn, rtx *orig_set)
{
rtx orig_src = SET_SRC (*orig_set);
rtx new_set;
@@ -383,7 +383,7 @@ combine_set_extension (ext_cand *cand, rtx curr_insn, rtx *orig_set)
DEF_INSN is the if_then_else insn. */
static bool
-transform_ifelse (ext_cand *cand, rtx def_insn)
+transform_ifelse (ext_cand *cand, rtx_insn *def_insn)
{
rtx set_insn = PATTERN (def_insn);
rtx srcreg, dstreg, srcreg2;
@@ -429,7 +429,7 @@ transform_ifelse (ext_cand *cand, rtx def_insn)
of the definitions onto DEST. */
static struct df_link *
-get_defs (rtx insn, rtx reg, vec<rtx> *dest)
+get_defs (rtx_insn *insn, rtx reg, vec<rtx_insn *> *dest)
{
df_ref reg_info, *uses;
struct df_link *ref_chain, *ref_link;
@@ -470,7 +470,7 @@ get_defs (rtx insn, rtx reg, vec<rtx> *dest)
and store x1 and x2 in REG_1 and REG_2. */
static bool
-is_cond_copy_insn (rtx insn, rtx *reg1, rtx *reg2)
+is_cond_copy_insn (rtx_insn *insn, rtx *reg1, rtx *reg2)
{
rtx expr = single_set (insn);
@@ -517,10 +517,10 @@ typedef struct ext_state
/* In order to avoid constant alloc/free, we keep these
4 vectors live through the entire find_and_remove_re and just
truncate them each time. */
- vec<rtx> defs_list;
- vec<rtx> copies_list;
- vec<rtx> modified_list;
- vec<rtx> work_list;
+ vec<rtx_insn *> defs_list;
+ vec<rtx_insn *> copies_list;
+ vec<rtx_insn *> modified_list;
+ vec<rtx_insn *> work_list;
/* For instructions that have been successfully modified, this is
the original mode from which the insn is extending and
@@ -541,7 +541,7 @@ typedef struct ext_state
success. */
static bool
-make_defs_and_copies_lists (rtx extend_insn, const_rtx set_pat,
+make_defs_and_copies_lists (rtx_insn *extend_insn, const_rtx set_pat,
ext_state *state)
{
rtx src_reg = XEXP (SET_SRC (set_pat), 0);
@@ -559,7 +559,7 @@ make_defs_and_copies_lists (rtx extend_insn, const_rtx set_pat,
/* Perform transitive closure for conditional copies. */
while (!state->work_list.is_empty ())
{
- rtx def_insn = state->work_list.pop ();
+ rtx_insn *def_insn = state->work_list.pop ();
rtx reg1, reg2;
gcc_assert (INSN_UID (def_insn) < max_insn_uid);
@@ -595,7 +595,7 @@ make_defs_and_copies_lists (rtx extend_insn, const_rtx set_pat,
return NULL. This is similar to single_set, except that
single_set allows multiple SETs when all but one is dead. */
static rtx *
-get_sub_rtx (rtx def_insn)
+get_sub_rtx (rtx_insn *def_insn)
{
enum rtx_code code = GET_CODE (PATTERN (def_insn));
rtx *sub_rtx = NULL;
@@ -633,7 +633,7 @@ get_sub_rtx (rtx def_insn)
on the SET pattern. */
static bool
-merge_def_and_ext (ext_cand *cand, rtx def_insn, ext_state *state)
+merge_def_and_ext (ext_cand *cand, rtx_insn *def_insn, ext_state *state)
{
enum machine_mode ext_src_mode;
rtx *sub_rtx;
@@ -694,7 +694,7 @@ get_extended_src_reg (rtx src)
static bool
combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state)
{
- rtx def_insn;
+ rtx_insn *def_insn;
bool merge_successful = true;
int i;
int defs_ix;
@@ -743,7 +743,7 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state)
return false;
/* There's only one reaching def. */
- rtx def_insn = state->defs_list[0];
+ rtx_insn *def_insn = state->defs_list[0];
/* The defining statement must not have been modified either. */
if (state->modified[INSN_UID (def_insn)].kind != EXT_MODIFIED_NONE)
@@ -876,7 +876,7 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state)
/* Add an extension pattern that could be eliminated. */
static void
-add_removable_extension (const_rtx expr, rtx insn,
+add_removable_extension (const_rtx expr, rtx_insn *insn,
vec<ext_cand> *insn_list,
unsigned *def_map)
{
@@ -949,7 +949,8 @@ find_removable_extensions (void)
{
vec<ext_cand> insn_list = vNULL;
basic_block bb;
- rtx insn, set;
+ rtx_insn *insn;
+ rtx set;
unsigned *def_map = XCNEWVEC (unsigned, max_insn_uid);
FOR_EACH_BB_FN (bb, cfun)
@@ -976,11 +977,11 @@ static void
find_and_remove_re (void)
{
ext_cand *curr_cand;
- rtx curr_insn = NULL_RTX;
+ rtx_insn *curr_insn = NULL;
int num_re_opportunities = 0, num_realized = 0, i;
vec<ext_cand> reinsn_list;
- auto_vec<rtx> reinsn_del_list;
- auto_vec<rtx> reinsn_copy_list;
+ auto_vec<rtx_insn *> reinsn_del_list;
+ auto_vec<rtx_insn *> reinsn_copy_list;
ext_state state;
/* Construct DU chain to get all reaching definitions of each
@@ -1049,8 +1050,8 @@ find_and_remove_re (void)
from the new destination to the old destination. */
for (unsigned int i = 0; i < reinsn_copy_list.length (); i += 2)
{
- rtx curr_insn = reinsn_copy_list[i];
- rtx def_insn = reinsn_copy_list[i + 1];
+ rtx_insn *curr_insn = reinsn_copy_list[i];
+ rtx_insn *def_insn = reinsn_copy_list[i + 1];
/* Use the mode of the destination of the defining insn
for the mode of the copy. This is necessary if the
--
1.8.5.3