+/* Functions defined in df-problems.c. */
+
+extern struct df_link *df_chain_create (df_ref, df_ref);
+extern void df_chain_unlink (df_ref);
+extern void df_chain_copy (df_ref, struct df_link *);
+extern bitmap df_get_live_in (basic_block);
+extern bitmap df_get_live_out (basic_block);
+extern void df_grow_bb_info (struct dataflow *);
+extern void df_chain_dump (struct df_link *, FILE *);
+extern void df_print_bb_index (basic_block bb, FILE *file);
+extern void df_rd_add_problem (void);
+extern void df_rd_simulate_artificial_defs_at_top (basic_block, bitmap);
+extern void df_rd_simulate_one_insn (basic_block, rtx, bitmap);
+extern void df_lr_add_problem (void);
+extern void df_lr_verify_transfer_functions (void);
+extern void df_live_verify_transfer_functions (void);
+extern void df_live_add_problem (void);
+extern void df_live_set_all_dirty (void);
+extern void df_chain_add_problem (unsigned int);
+extern void df_word_lr_add_problem (void);
+extern bool df_word_lr_mark_ref (df_ref, bool, bitmap);
+extern bool df_word_lr_simulate_defs (rtx, bitmap);
+extern void df_word_lr_simulate_uses (rtx, bitmap);
+extern void df_word_lr_simulate_artificial_refs_at_top (basic_block, bitmap);
+extern void df_word_lr_simulate_artificial_refs_at_end (basic_block, bitmap);
+extern void df_note_add_problem (void);
+extern void df_md_add_problem (void);
+extern void df_md_simulate_artificial_defs_at_top (basic_block, bitmap);
+extern void df_md_simulate_one_insn (basic_block, rtx, bitmap);
+extern void df_simulate_find_noclobber_defs (rtx, bitmap);
+extern void df_simulate_find_defs (rtx, bitmap);
+extern void df_simulate_defs (rtx, bitmap);
+extern void df_simulate_uses (rtx, bitmap);
+extern void df_simulate_initialize_backwards (basic_block, bitmap);
+extern void df_simulate_one_insn_backwards (basic_block, rtx, bitmap);
+extern void df_simulate_finalize_backwards (basic_block, bitmap);
+extern void df_simulate_initialize_forwards (basic_block, bitmap);
+extern void df_simulate_one_insn_forwards (basic_block, rtx, bitmap);
+extern void simulate_backwards_to_point (basic_block, regset, rtx);
+extern bool can_move_insns_across (rtx, rtx, rtx, rtx, basic_block, regset,
+ regset, rtx *);
+/* Functions defined in df-scan.c. */
+
+extern void df_scan_alloc (bitmap);
+extern void df_scan_add_problem (void);
+extern void df_grow_reg_info (void);
+extern void df_grow_insn_info (void);
+extern void df_scan_blocks (void);
+extern df_ref df_ref_create (rtx, rtx *, rtx,basic_block,
+ enum df_ref_type, int ref_flags);
+extern void df_uses_create (rtx *, rtx, int);
+extern void df_ref_remove (df_ref);
+extern struct df_insn_info * df_insn_create_insn_record (rtx);
+extern void df_insn_delete (basic_block, unsigned int);
+extern void df_bb_refs_record (int, bool);
+extern bool df_insn_rescan (rtx);
+extern bool df_insn_rescan_debug_internal (rtx);
+extern void df_insn_rescan_all (void);
+extern void df_process_deferred_rescans (void);
+extern void df_recompute_luids (basic_block);
+extern void df_insn_change_bb (rtx, basic_block);
+extern void df_maybe_reorganize_use_refs (enum df_ref_order);
+extern void df_maybe_reorganize_def_refs (enum df_ref_order);
+extern void df_ref_change_reg_with_loc (int, int, rtx);
+extern void df_notes_rescan (rtx);
+extern void df_hard_reg_init (void);
+extern void df_update_entry_block_defs (void);
+extern void df_update_exit_block_uses (void);
+extern void df_update_entry_exit_and_calls (void);
+extern bool df_hard_reg_used_p (unsigned int);
+extern unsigned int df_hard_reg_used_count (unsigned int);
+extern bool df_regs_ever_live_p (unsigned int);
+extern void df_set_regs_ever_live (unsigned int, bool);
+extern void df_compute_regs_ever_live (bool);
+extern bool df_read_modify_subreg_p (rtx);
+extern void df_scan_verify (void);
+
+/* Get basic block info. */
+
+static inline struct df_scan_bb_info *
+df_scan_get_bb_info (unsigned int index)
+{
+ if (index < df_scan->block_info_size)
+ return &((struct df_scan_bb_info *) df_scan->block_info)[index];
+ else
+ return NULL;
+}
+
+static inline struct df_rd_bb_info *
+df_rd_get_bb_info (unsigned int index)
+{
+ if (index < df_rd->block_info_size)
+ return &((struct df_rd_bb_info *) df_rd->block_info)[index];
+ else
+ return NULL;
+}
+
+static inline struct df_lr_bb_info *
+df_lr_get_bb_info (unsigned int index)
+{
+ if (index < df_lr->block_info_size)
+ return &((struct df_lr_bb_info *) df_lr->block_info)[index];
+ else
+ return NULL;
+}
+
+static inline struct df_md_bb_info *
+df_md_get_bb_info (unsigned int index)
+{
+ if (index < df_md->block_info_size)
+ return &((struct df_md_bb_info *) df_md->block_info)[index];
+ else
+ return NULL;
+}
+
+static inline struct df_live_bb_info *
+df_live_get_bb_info (unsigned int index)
+{
+ if (index < df_live->block_info_size)
+ return &((struct df_live_bb_info *) df_live->block_info)[index];
+ else
+ return NULL;
+}
+
+static inline struct df_word_lr_bb_info *
+df_word_lr_get_bb_info (unsigned int index)
+{
+ if (index < df_word_lr->block_info_size)
+ return &((struct df_word_lr_bb_info *) df_word_lr->block_info)[index];
+ else
+ return NULL;
+}