This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
remove dead code in df.{h,c}
- From: "Ben Elliston" <bje at au1 dot ibm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: 26 Nov 2004 12:12:57 +1100
- Subject: remove dead code in df.{h,c}
There's a lot of code code in here:
2004-11-26 Ben Elliston <bje@au.ibm.com>
* df.h (df_pattern_emit_before): Remove extern declaration.
(df_jump_pattern_emit_after, df_insn_move_before): Likewise.
(df_reg_replace, df_ref_reg_replace): Likewise.
(df_ref_remove, df_insn_mem_replace): Likewise.
(df_bb_def_use_swap, df_regno_bb): Likewise.
(df_ref_lifetime, df_reg_global_p): Likewise.
(df_insn_dominates_all_uses_p): Likewise.
(df_insn_dominates_uses_p): Likewise.
(df_bb_reg_live_start_p, df_bb_reg_live_end_p): Likewise.
(df_bb_regs_lives_compare): Likewise.
(df_bb_single_def_use_insn_find): Likewise.
(df_bb_regno_last_use_find, df_bb_regno_last_def_find): Likewise.
(df_insn_debug, iterative_dataflow): Likewise.
* df.c (df_rtx_mem_replace): Remove.
(df_rtx_reg_replace, df_refs_reg_replace): Likewise.
(df_def_dominates_all_uses_p): Likewise.
(df_bb_insn_regno_last_use_find): Likewise.
(df_bb_insn_regno_first_def_find): Likewise.
(df_ref_remove, df_insn_mem_replace): Likewise.
(df_reg_replace, df_ref_reg_replace): Likewise.
(df_bb_def_use_swap, df_pattern_emit_before): Likewise.
(df_jump_pattern_emit_after): Likewise.
(df_insn_move_before, df_insn_regno_def_p): Likewise.
(df_def_dominates_all_uses_p): Likewise.
(df_insn_dominates_all_uses_p): Likewise.
(df_def_dominates_uses_p): Likewise.
(df_insn_dominates_uses_p): Likewise.
(df_reg_global_p, df_reg_lifetime): Likewise.
(df_bb_reg_live_start_p, df_bb_reg_live_end_p): Likewise.
(df_bb_regs_lives_compare, df_bb_regno_last_use_find): Likewise.
(df_bb_regno_last_def_find): Likewise.
(df_bb_insn_regno_last_use_find): Likewise.
(df_bb_insn_regno_first_def_find): Likewise.
(df_bb_single_def_use_insn_find): Likewise.
(df_insn_debug, df_regno_bb): Make static.
(iterative_dataflow): Likewise.
Index: df.h
===================================================================
RCS file: /home/bje/gcc-cvs/gcc/gcc/df.h,v
retrieving revision 1.29
diff -u -p -r1.29 df.h
--- df.h 17 Nov 2004 22:05:59 -0000 1.29
+++ df.h 26 Nov 2004 01:11:08 -0000
@@ -252,55 +252,14 @@ extern void df_insn_modify (struct df *,
extern rtx df_insn_delete (struct df *, basic_block, rtx);
-extern rtx df_pattern_emit_before (struct df *, rtx, basic_block, rtx);
-
-extern rtx df_jump_pattern_emit_after (struct df *, rtx, basic_block, rtx);
-
extern rtx df_pattern_emit_after (struct df *, rtx, basic_block, rtx);
-extern rtx df_insn_move_before (struct df *, basic_block, rtx, basic_block,
- rtx);
-
-extern int df_reg_replace (struct df *, bitmap, rtx, rtx);
-
-extern int df_ref_reg_replace (struct df *, struct ref *, rtx, rtx);
-
-extern int df_ref_remove (struct df *, struct ref *);
-
-extern int df_insn_mem_replace (struct df *, basic_block, rtx, rtx, rtx);
-
-extern struct ref *df_bb_def_use_swap (struct df *, basic_block, rtx, rtx,
- unsigned int);
-
-
/* Functions to query dataflow information. */
-extern basic_block df_regno_bb (struct df *, unsigned int);
-
-extern int df_reg_lifetime (struct df *, rtx);
-
-extern int df_reg_global_p (struct df *, rtx);
-
extern int df_insn_regno_def_p (struct df *, basic_block, rtx, unsigned int);
-extern int df_insn_dominates_all_uses_p (struct df *, basic_block, rtx);
-
-extern int df_insn_dominates_uses_p (struct df *, basic_block, rtx, bitmap);
-
-extern int df_bb_reg_live_start_p (struct df *, basic_block, rtx);
-
-extern int df_bb_reg_live_end_p (struct df *, basic_block, rtx);
-
-extern int df_bb_regs_lives_compare (struct df *, basic_block, rtx, rtx);
-
-extern rtx df_bb_single_def_use_insn_find (struct df *, basic_block, rtx,
- rtx);
-extern struct ref *df_bb_regno_last_use_find (struct df *, basic_block, unsigned int);
-
extern struct ref *df_bb_regno_first_def_find (struct df *, basic_block, unsigned int);
-extern struct ref *df_bb_regno_last_def_find (struct df *, basic_block, unsigned int);
-
extern struct ref *df_find_def (struct df *, rtx, rtx);
extern int df_reg_used (struct df *, rtx, rtx);
@@ -321,8 +280,6 @@ extern void debug_df_ref (struct ref *);
extern void debug_df_chain (struct df_link *);
-extern void df_insn_debug (struct df *, rtx, FILE *);
-
extern void df_insn_debug_regno (struct df *, rtx, FILE *);
@@ -374,7 +331,6 @@ struct dataflow
function. */
};
-extern void iterative_dataflow (struct dataflow *);
extern bool read_modify_subreg_p (rtx);
#endif /* GCC_DF_H */
Index: df.c
===================================================================
RCS file: /home/bje/gcc-cvs/gcc/gcc/df.c,v
retrieving revision 1.79
diff -u -p -r1.79 df.c
--- df.c 25 Nov 2004 10:27:58 -0000 1.79
+++ df.c 26 Nov 2004 01:11:12 -0000
@@ -267,16 +267,6 @@ static int df_refs_update (struct df *,
static void df_analyze_1 (struct df *, bitmap, int, int);
static void df_insns_modify (struct df *, basic_block, rtx, rtx);
-static int df_rtx_mem_replace (rtx *, void *);
-static int df_rtx_reg_replace (rtx *, void *);
-void df_refs_reg_replace (struct df *, bitmap, struct df_link *, rtx, rtx);
-
-static int df_def_dominates_all_uses_p (struct df *, struct ref *def);
-static int df_def_dominates_uses_p (struct df *, struct ref *def, bitmap);
-static struct ref *df_bb_insn_regno_last_use_find (struct df *, basic_block,
- rtx, unsigned int);
-static struct ref *df_bb_insn_regno_first_def_find (struct df *, basic_block,
- rtx, unsigned int);
static void df_chain_dump (struct df_link *, FILE *file);
static void df_chain_dump_regno (struct df_link *, FILE *file);
@@ -290,6 +280,7 @@ static void df_lr_transfer_function (int
void *, void *);
static void hybrid_search (basic_block, struct dataflow *,
sbitmap, sbitmap, sbitmap);
+static void iterative_dataflow (struct dataflow *);
/* Local memory allocation/deallocation routines. */
@@ -679,24 +670,6 @@ df_ref_unlink (struct df_link **phead, s
}
-/* Unlink REF from all def-use/use-def chains, etc. */
-int
-df_ref_remove (struct df *df, struct ref *ref)
-{
- if (DF_REF_REG_DEF_P (ref))
- {
- df_def_unlink (df, ref);
- df_ref_unlink (&df->insns[DF_REF_INSN_UID (ref)].defs, ref);
- }
- else
- {
- df_use_unlink (df, ref);
- df_ref_unlink (&df->insns[DF_REF_INSN_UID (ref)].uses, ref);
- }
- return 1;
-}
-
-
/* Unlink DEF from use-def and reg-def chains. */
static void
df_def_unlink (struct df *df ATTRIBUTE_UNUSED, struct ref *def)
@@ -2683,210 +2656,6 @@ typedef struct replace_args
} replace_args;
-/* Replace mem pointed to by PX with its associated pseudo register.
- DATA is actually a pointer to a structure describing the
- instruction currently being scanned and the MEM we are currently
- replacing. */
-static int
-df_rtx_mem_replace (rtx *px, void *data)
-{
- replace_args *args = (replace_args *) data;
- rtx mem = *px;
-
- if (mem == NULL_RTX)
- return 0;
-
- switch (GET_CODE (mem))
- {
- case MEM:
- break;
-
- case CONST_DOUBLE:
- /* We're not interested in the MEM associated with a
- CONST_DOUBLE, so there's no need to traverse into one. */
- return -1;
-
- default:
- /* This is not a MEM. */
- return 0;
- }
-
- if (!rtx_equal_p (args->match, mem))
- /* This is not the MEM we are currently replacing. */
- return 0;
-
- /* Actually replace the MEM. */
- validate_change (args->insn, px, args->replacement, 1);
- args->modified++;
-
- return 0;
-}
-
-
-int
-df_insn_mem_replace (struct df *df, basic_block bb, rtx insn, rtx mem, rtx reg)
-{
- replace_args args;
-
- args.insn = insn;
- args.match = mem;
- args.replacement = reg;
- args.modified = 0;
-
- /* Search and replace all matching mems within insn. */
- for_each_rtx (&insn, df_rtx_mem_replace, &args);
-
- if (args.modified)
- df_insn_modify (df, bb, insn);
-
- /* ???? FIXME. We may have a new def or one or more new uses of REG
- in INSN. REG should be a new pseudo so it won't affect the
- dataflow information that we currently have. We should add
- the new uses and defs to INSN and then recreate the chains
- when df_analyze is called. */
- return args.modified;
-}
-
-
-/* Replace one register with another. Called through for_each_rtx; PX
- points to the rtx being scanned. DATA is actually a pointer to a
- structure of arguments. */
-static int
-df_rtx_reg_replace (rtx *px, void *data)
-{
- rtx x = *px;
- replace_args *args = (replace_args *) data;
-
- if (x == NULL_RTX)
- return 0;
-
- if (x == args->match)
- {
- validate_change (args->insn, px, args->replacement, 1);
- args->modified++;
- }
-
- return 0;
-}
-
-
-/* Replace the reg within every ref on CHAIN that is within the set
- BLOCKS of basic blocks with NEWREG. Also update the regs within
- REG_NOTES. */
-void
-df_refs_reg_replace (struct df *df, bitmap blocks, struct df_link *chain, rtx oldreg, rtx newreg)
-{
- struct df_link *link;
- replace_args args;
-
- if (! blocks)
- blocks = df->all_blocks;
-
- args.match = oldreg;
- args.replacement = newreg;
- args.modified = 0;
-
- for (link = chain; link; link = link->next)
- {
- struct ref *ref = link->ref;
- rtx insn = DF_REF_INSN (ref);
-
- if (! INSN_P (insn))
- continue;
-
- gcc_assert (bitmap_bit_p (blocks, DF_REF_BBNO (ref)));
-
- df_ref_reg_replace (df, ref, oldreg, newreg);
-
- /* Replace occurrences of the reg within the REG_NOTES. */
- if ((! link->next || DF_REF_INSN (ref)
- != DF_REF_INSN (link->next->ref))
- && REG_NOTES (insn))
- {
- args.insn = insn;
- for_each_rtx (®_NOTES (insn), df_rtx_reg_replace, &args);
- }
- }
-}
-
-
-/* Replace all occurrences of register OLDREG with register NEWREG in
- blocks defined by bitmap BLOCKS. This also replaces occurrences of
- OLDREG in the REG_NOTES but only for insns containing OLDREG. This
- routine expects the reg-use and reg-def chains to be valid. */
-int
-df_reg_replace (struct df *df, bitmap blocks, rtx oldreg, rtx newreg)
-{
- unsigned int oldregno = REGNO (oldreg);
-
- df_refs_reg_replace (df, blocks, df->regs[oldregno].defs, oldreg, newreg);
- df_refs_reg_replace (df, blocks, df->regs[oldregno].uses, oldreg, newreg);
- return 1;
-}
-
-
-/* Try replacing the reg within REF with NEWREG. Do not modify
- def-use/use-def chains. */
-int
-df_ref_reg_replace (struct df *df, struct ref *ref, rtx oldreg, rtx newreg)
-{
- /* Check that insn was deleted by being converted into a NOTE. If
- so ignore this insn. */
- if (! INSN_P (DF_REF_INSN (ref)))
- return 0;
-
- gcc_assert (!oldreg || oldreg == DF_REF_REG (ref));
-
- if (! validate_change (DF_REF_INSN (ref), DF_REF_LOC (ref), newreg, 1))
- return 0;
-
- df_insn_modify (df, DF_REF_BB (ref), DF_REF_INSN (ref));
- return 1;
-}
-
-
-struct ref*
-df_bb_def_use_swap (struct df *df, basic_block bb, rtx def_insn, rtx use_insn, unsigned int regno)
-{
- struct ref *def;
- struct ref *use;
- int def_uid;
- int use_uid;
- struct df_link *link;
-
- def = df_bb_insn_regno_first_def_find (df, bb, def_insn, regno);
- if (! def)
- return 0;
-
- use = df_bb_insn_regno_last_use_find (df, bb, use_insn, regno);
- if (! use)
- return 0;
-
- /* The USE no longer exists. */
- use_uid = INSN_UID (use_insn);
- df_use_unlink (df, use);
- df_ref_unlink (&df->insns[use_uid].uses, use);
-
- /* The DEF requires shifting so remove it from DEF_INSN
- and add it to USE_INSN by reusing LINK. */
- def_uid = INSN_UID (def_insn);
- link = df_ref_unlink (&df->insns[def_uid].defs, def);
- link->ref = def;
- link->next = df->insns[use_uid].defs;
- df->insns[use_uid].defs = link;
-
-#if 0
- link = df_ref_unlink (&df->regs[regno].defs, def);
- link->ref = def;
- link->next = df->regs[regno].defs;
- df->insns[regno].defs = link;
-#endif
-
- DF_REF_INSN (def) = use_insn;
- return def;
-}
-
-
/* Record df between FIRST_INSN and LAST_INSN inclusive. All new
insns must be processed by this routine. */
static void
@@ -2917,24 +2686,6 @@ df_insns_modify (struct df *df, basic_bl
}
-/* Emit PATTERN before INSN within BB. */
-rtx
-df_pattern_emit_before (struct df *df, rtx pattern, basic_block bb, rtx insn)
-{
- rtx ret_insn;
- rtx prev_insn = PREV_INSN (insn);
-
- /* We should not be inserting before the start of the block. */
- gcc_assert (insn != BB_HEAD (bb));
- ret_insn = emit_insn_before (pattern, insn);
- if (ret_insn == insn)
- return ret_insn;
-
- df_insns_modify (df, bb, NEXT_INSN (prev_insn), ret_insn);
- return ret_insn;
-}
-
-
/* Emit PATTERN after INSN within BB. */
rtx
df_pattern_emit_after (struct df *df, rtx pattern, basic_block bb, rtx insn)
@@ -2949,77 +2700,10 @@ df_pattern_emit_after (struct df *df, rt
return ret_insn;
}
-
-/* Emit jump PATTERN after INSN within BB. */
-rtx
-df_jump_pattern_emit_after (struct df *df, rtx pattern, basic_block bb, rtx insn)
-{
- rtx ret_insn;
-
- ret_insn = emit_jump_insn_after (pattern, insn);
- if (ret_insn == insn)
- return ret_insn;
-
- df_insns_modify (df, bb, NEXT_INSN (insn), ret_insn);
- return ret_insn;
-}
-
-
-/* Move INSN within BB before BEFORE_INSN within BEFORE_BB.
-
- This function should only be used to move loop invariant insns
- out of a loop where it has been proven that the def-use info
- will still be valid. */
-rtx
-df_insn_move_before (struct df *df, basic_block bb, rtx insn, basic_block before_bb, rtx before_insn)
-{
- struct df_link *link;
- unsigned int uid;
-
- if (! bb)
- return df_pattern_emit_before (df, insn, before_bb, before_insn);
-
- uid = INSN_UID (insn);
-
- /* Change bb for all df defined and used by this insn. */
- for (link = df->insns[uid].defs; link; link = link->next)
- DF_REF_BB (link->ref) = before_bb;
- for (link = df->insns[uid].uses; link; link = link->next)
- DF_REF_BB (link->ref) = before_bb;
-
- /* The lifetimes of the registers used in this insn will be reduced
- while the lifetimes of the registers defined in this insn
- are likely to be increased. */
-
- /* ???? Perhaps all the insns moved should be stored on a list
- which df_analyze removes when it recalculates data flow. */
-
- return emit_insn_before (insn, before_insn);
-}
/* Functions to query dataflow information. */
-int
-df_insn_regno_def_p (struct df *df, basic_block bb ATTRIBUTE_UNUSED,
- rtx insn, unsigned int regno)
-{
- unsigned int uid;
- struct df_link *link;
-
- uid = INSN_UID (insn);
-
- for (link = df->insns[uid].defs; link; link = link->next)
- {
- struct ref *def = link->ref;
-
- if (DF_REF_REGNO (def) == regno)
- return 1;
- }
-
- return 0;
-}
-
/* Finds the reference corresponding to the definition of REG in INSN.
DF is the dataflow object. */
@@ -3049,103 +2733,9 @@ df_reg_used (struct df *df, rtx insn, rt
return 0;
}
-static int
-df_def_dominates_all_uses_p (struct df *df ATTRIBUTE_UNUSED, struct ref *def)
-{
- struct df_link *du_link;
-
- /* Follow def-use chain to find all the uses of this def. */
- for (du_link = DF_REF_CHAIN (def); du_link; du_link = du_link->next)
- {
- struct ref *use = du_link->ref;
- struct df_link *ud_link;
-
- /* Follow use-def chain to check all the defs for this use. */
- for (ud_link = DF_REF_CHAIN (use); ud_link; ud_link = ud_link->next)
- if (ud_link->ref != def)
- return 0;
- }
- return 1;
-}
-
-
-int
-df_insn_dominates_all_uses_p (struct df *df, basic_block bb ATTRIBUTE_UNUSED,
- rtx insn)
-{
- unsigned int uid;
- struct df_link *link;
-
- uid = INSN_UID (insn);
-
- for (link = df->insns[uid].defs; link; link = link->next)
- {
- struct ref *def = link->ref;
-
- if (! df_def_dominates_all_uses_p (df, def))
- return 0;
- }
-
- return 1;
-}
-
-
-/* Return nonzero if all DF dominates all the uses within the bitmap
- BLOCKS. */
-static int
-df_def_dominates_uses_p (struct df *df ATTRIBUTE_UNUSED, struct ref *def,
- bitmap blocks)
-{
- struct df_link *du_link;
-
- /* Follow def-use chain to find all the uses of this def. */
- for (du_link = DF_REF_CHAIN (def); du_link; du_link = du_link->next)
- {
- struct ref *use = du_link->ref;
- struct df_link *ud_link;
-
- /* Only worry about the uses within BLOCKS. For example,
- consider a register defined within a loop that is live at the
- loop exits. */
- if (bitmap_bit_p (blocks, DF_REF_BBNO (use)))
- {
- /* Follow use-def chain to check all the defs for this use. */
- for (ud_link = DF_REF_CHAIN (use); ud_link; ud_link = ud_link->next)
- if (ud_link->ref != def)
- return 0;
- }
- }
- return 1;
-}
-
-
-/* Return nonzero if all the defs of INSN within BB dominates
- all the corresponding uses. */
-int
-df_insn_dominates_uses_p (struct df *df, basic_block bb ATTRIBUTE_UNUSED,
- rtx insn, bitmap blocks)
-{
- unsigned int uid;
- struct df_link *link;
-
- uid = INSN_UID (insn);
-
- for (link = df->insns[uid].defs; link; link = link->next)
- {
- struct ref *def = link->ref;
-
- /* Only consider the defs within BLOCKS. */
- if (bitmap_bit_p (blocks, DF_REF_BBNO (def))
- && ! df_def_dominates_uses_p (df, def, blocks))
- return 0;
- }
- return 1;
-}
-
-
/* Return the basic block that REG referenced in or NULL if referenced
in multiple basic blocks. */
-basic_block
+static basic_block
df_regno_bb (struct df *df, unsigned int regno)
{
struct df_link *defs = df->regs[regno].defs;
@@ -3161,102 +2751,6 @@ df_regno_bb (struct df *df, unsigned int
}
-/* Return nonzero if REG used in multiple basic blocks. */
-int
-df_reg_global_p (struct df *df, rtx reg)
-{
- return df_regno_bb (df, REGNO (reg)) != 0;
-}
-
-
-/* Return total lifetime (in insns) of REG. */
-int
-df_reg_lifetime (struct df *df, rtx reg)
-{
- return df->regs[REGNO (reg)].lifetime;
-}
-
-
-/* Return nonzero if REG live at start of BB. */
-int
-df_bb_reg_live_start_p (struct df *df, basic_block bb, rtx reg)
-{
- struct bb_info *bb_info = DF_BB_INFO (df, bb);
-
- gcc_assert (bb_info->lr_in);
-
- return bitmap_bit_p (bb_info->lr_in, REGNO (reg));
-}
-
-
-/* Return nonzero if REG live at end of BB. */
-int
-df_bb_reg_live_end_p (struct df *df, basic_block bb, rtx reg)
-{
- struct bb_info *bb_info = DF_BB_INFO (df, bb);
-
- gcc_assert (bb_info->lr_in);
-
- return bitmap_bit_p (bb_info->lr_out, REGNO (reg));
-}
-
-
-/* Return -1 if life of REG1 before life of REG2, 1 if life of REG1
- after life of REG2, or 0, if the lives overlap. */
-int
-df_bb_regs_lives_compare (struct df *df, basic_block bb, rtx reg1, rtx reg2)
-{
- unsigned int regno1 = REGNO (reg1);
- unsigned int regno2 = REGNO (reg2);
- struct ref *def1;
- struct ref *use1;
- struct ref *def2;
- struct ref *use2;
-
-
- /* The regs must be local to BB. */
- gcc_assert (df_regno_bb (df, regno1) == bb
- && df_regno_bb (df, regno2) == bb);
-
- def2 = df_bb_regno_first_def_find (df, bb, regno2);
- use1 = df_bb_regno_last_use_find (df, bb, regno1);
-
- if (DF_INSN_LUID (df, DF_REF_INSN (def2))
- > DF_INSN_LUID (df, DF_REF_INSN (use1)))
- return -1;
-
- def1 = df_bb_regno_first_def_find (df, bb, regno1);
- use2 = df_bb_regno_last_use_find (df, bb, regno2);
-
- if (DF_INSN_LUID (df, DF_REF_INSN (def1))
- > DF_INSN_LUID (df, DF_REF_INSN (use2)))
- return 1;
-
- return 0;
-}
-
-
-/* Return last use of REGNO within BB. */
-struct ref *
-df_bb_regno_last_use_find (struct df *df, basic_block bb, unsigned int regno)
-{
- struct df_link *link;
-
- /* This assumes that the reg-use list is ordered such that for any
- BB, the last use is found first. However, since the BBs are not
- ordered, the first use in the chain is not necessarily the last
- use in the function. */
- for (link = df->regs[regno].uses; link; link = link->next)
- {
- struct ref *use = link->ref;
-
- if (DF_REF_BB (use) == bb)
- return use;
- }
- return 0;
-}
-
-
/* Return first def of REGNO within BB. */
struct ref *
df_bb_regno_first_def_find (struct df *df, basic_block bb, unsigned int regno)
@@ -3277,108 +2771,6 @@ df_bb_regno_first_def_find (struct df *d
return 0;
}
-/* Return last def of REGNO within BB. */
-struct ref *
-df_bb_regno_last_def_find (struct df *df, basic_block bb, unsigned int regno)
-{
- struct df_link *link;
- struct ref *last_def = NULL;
- int in_bb = 0;
-
- /* This assumes that the reg-def list is ordered such that for any
- BB, the first def is found first. However, since the BBs are not
- ordered, the first def in the chain is not necessarily the first
- def in the function. */
- for (link = df->regs[regno].defs; link; link = link->next)
- {
- struct ref *def = link->ref;
- /* The first time in the desired block. */
- if (DF_REF_BB (def) == bb)
- in_bb = 1;
- /* The last def in the desired block. */
- else if (in_bb)
- return last_def;
- last_def = def;
- }
- return last_def;
-}
-
-/* Return first use of REGNO inside INSN within BB. */
-static struct ref *
-df_bb_insn_regno_last_use_find (struct df *df,
- basic_block bb ATTRIBUTE_UNUSED, rtx insn,
- unsigned int regno)
-{
- unsigned int uid;
- struct df_link *link;
-
- uid = INSN_UID (insn);
-
- for (link = df->insns[uid].uses; link; link = link->next)
- {
- struct ref *use = link->ref;
-
- if (DF_REF_REGNO (use) == regno)
- return use;
- }
-
- return 0;
-}
-
-
-/* Return first def of REGNO inside INSN within BB. */
-static struct ref *
-df_bb_insn_regno_first_def_find (struct df *df,
- basic_block bb ATTRIBUTE_UNUSED, rtx insn,
- unsigned int regno)
-{
- unsigned int uid;
- struct df_link *link;
-
- uid = INSN_UID (insn);
-
- for (link = df->insns[uid].defs; link; link = link->next)
- {
- struct ref *def = link->ref;
-
- if (DF_REF_REGNO (def) == regno)
- return def;
- }
-
- return 0;
-}
-
-
-/* Return insn using REG if the BB contains only a single
- use and def of REG. */
-rtx
-df_bb_single_def_use_insn_find (struct df *df, basic_block bb, rtx insn, rtx reg)
-{
- struct ref *def;
- struct ref *use;
- struct df_link *du_link;
-
- def = df_bb_insn_regno_first_def_find (df, bb, insn, REGNO (reg));
-
- gcc_assert (def);
-
- du_link = DF_REF_CHAIN (def);
-
- if (! du_link)
- return NULL_RTX;
-
- use = du_link->ref;
-
- /* Check if def is dead. */
- if (! use)
- return NULL_RTX;
-
- /* Check for multiple uses. */
- if (du_link->next)
- return NULL_RTX;
-
- return DF_REF_INSN (use);
-}
/* Functions for debugging/dumping dataflow information. */
@@ -3586,7 +2978,7 @@ df_dump (struct df *df, int flags, FILE
}
-void
+static void
df_insn_debug (struct df *df, rtx insn, FILE *file)
{
unsigned int uid;
@@ -3867,7 +3259,7 @@ hybrid_search (basic_block bb, struct da
For forward problems, you probably want to pass in a mapping of
block number to rc_order (like df->inverse_rc_map). */
-void
+static void
iterative_dataflow (struct dataflow *dataflow)
{
unsigned i, idx;