+/* Functions defined in df-core.c. */
+
+extern void df_add_problem (struct df_problem *);
+extern int df_set_flags (int);
+extern int df_clear_flags (int);
+extern void df_set_blocks (bitmap);
+extern void df_remove_problem (struct dataflow *);
+extern void df_finish_pass (bool);
+extern void df_analyze_problem (struct dataflow *, bitmap, int *, int);
+extern void df_analyze (void);
+extern int df_get_n_blocks (enum df_flow_dir);
+extern int *df_get_postorder (enum df_flow_dir);
+extern void df_simple_dataflow (enum df_flow_dir, df_init_function,
+ df_confluence_function_0, df_confluence_function_n,
+ df_transfer_function, bitmap, int *, int);
+extern void df_mark_solutions_dirty (void);
+extern bool df_get_bb_dirty (basic_block);
+extern void df_set_bb_dirty (basic_block);
+extern void df_compact_blocks (void);
+extern void df_bb_replace (int, basic_block);
+extern void df_bb_delete (int);
+extern void df_verify (void);
+#ifdef DF_DEBUG_CFG
+extern void df_check_cfg_clean (void);
+#endif
+extern df_ref df_bb_regno_first_def_find (basic_block, unsigned int);
+extern df_ref df_bb_regno_last_def_find (basic_block, unsigned int);
+extern df_ref df_find_def (rtx, rtx);
+extern bool df_reg_defined (rtx, rtx);
+extern df_ref df_find_use (rtx, rtx);
+extern bool df_reg_used (rtx, rtx);
+extern void df_worklist_dataflow (struct dataflow *,bitmap, int *, int);
+extern void df_print_regset (FILE *file, bitmap r);
+extern void df_print_byte_regset (FILE *file, bitmap r);
+extern void df_dump (FILE *);
+extern void df_dump_region (FILE *);
+extern void df_dump_start (FILE *);
+extern void df_dump_top (basic_block, FILE *);
+extern void df_dump_bottom (basic_block, FILE *);
+extern void df_refs_chain_dump (df_ref *, bool, FILE *);
+extern void df_regs_chain_dump (df_ref, FILE *);
+extern void df_insn_debug (rtx, bool, FILE *);
+extern void df_insn_debug_regno (rtx, FILE *);
+extern void df_regno_debug (unsigned int, FILE *);
+extern void df_ref_debug (df_ref, FILE *);
+extern void debug_df_insn (rtx);
+extern void debug_df_regno (unsigned int);
+extern void debug_df_reg (rtx);
+extern void debug_df_defno (unsigned int);
+extern void debug_df_useno (unsigned int);
+extern void debug_df_ref (df_ref);
+extern void debug_df_chain (struct df_link *);
+
+/* 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_byte_lr_add_problem (void);
+extern int df_byte_lr_get_regno_start (unsigned int);
+extern int df_byte_lr_get_regno_len (unsigned int);
+extern void df_byte_lr_simulate_defs (rtx, bitmap);
+extern void df_byte_lr_simulate_uses (rtx, bitmap);
+extern void df_byte_lr_simulate_artificial_refs_at_top (basic_block, bitmap);
+extern void df_byte_lr_simulate_artificial_refs_at_end (basic_block, bitmap);
+extern void df_note_add_problem (void);
+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 df_simulate_finalize_forwards (basic_block, bitmap);
+
+/* 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,
+ int, int, enum machine_mode);
+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 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);
+
+/* Functions defined in df-byte-scan.c. */
+extern bool df_compute_accessed_bytes (df_ref, enum df_mm,
+ unsigned int *, unsigned int *);
+
+
+/* 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_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_byte_lr_bb_info *
+df_byte_lr_get_bb_info (unsigned int index)
+{
+ if (index < df_byte_lr->block_info_size)
+ return (struct df_byte_lr_bb_info *) df_byte_lr->block_info[index];
+ else
+ return NULL;
+}