-static void compute_can_copy PARAMS ((void));
-static char *gmalloc PARAMS ((unsigned int));
-static char *grealloc PARAMS ((char *, unsigned int));
-static char *gcse_alloc PARAMS ((unsigned long));
-static void alloc_gcse_mem PARAMS ((rtx));
-static void free_gcse_mem PARAMS ((void));
-static void alloc_reg_set_mem PARAMS ((int));
-static void free_reg_set_mem PARAMS ((void));
-static int get_bitmap_width PARAMS ((int, int, int));
-static void record_one_set PARAMS ((int, rtx));
-static void record_set_info PARAMS ((rtx, rtx, void *));
-static void compute_sets PARAMS ((rtx));
-static void hash_scan_insn PARAMS ((rtx, int, int));
-static void hash_scan_set PARAMS ((rtx, rtx, int));
-static void hash_scan_clobber PARAMS ((rtx, rtx));
-static void hash_scan_call PARAMS ((rtx, rtx));
-static int want_to_gcse_p PARAMS ((rtx));
-static int oprs_unchanged_p PARAMS ((rtx, rtx, int));
-static int oprs_anticipatable_p PARAMS ((rtx, rtx));
-static int oprs_available_p PARAMS ((rtx, rtx));
-static void insert_expr_in_table PARAMS ((rtx, enum machine_mode, rtx,
- int, int));
-static void insert_set_in_table PARAMS ((rtx, rtx));
-static unsigned int hash_expr PARAMS ((rtx, enum machine_mode, int *, int));
-static unsigned int hash_expr_1 PARAMS ((rtx, enum machine_mode, int *));
-static unsigned int hash_string_1 PARAMS ((const char *));
-static unsigned int hash_set PARAMS ((int, int));
-static int expr_equiv_p PARAMS ((rtx, rtx));
-static void record_last_reg_set_info PARAMS ((rtx, int));
-static void record_last_mem_set_info PARAMS ((rtx));
-static void record_last_set_info PARAMS ((rtx, rtx, void *));
-static void compute_hash_table PARAMS ((int));
-static void alloc_set_hash_table PARAMS ((int));
-static void free_set_hash_table PARAMS ((void));
-static void compute_set_hash_table PARAMS ((void));
-static void alloc_expr_hash_table PARAMS ((unsigned int));
-static void free_expr_hash_table PARAMS ((void));
-static void compute_expr_hash_table PARAMS ((void));
-static void dump_hash_table PARAMS ((FILE *, const char *, struct expr **,
- int, int));
-static struct expr *lookup_expr PARAMS ((rtx));
-static struct expr *lookup_set PARAMS ((unsigned int, rtx));
-static struct expr *next_set PARAMS ((unsigned int, struct expr *));
-static void reset_opr_set_tables PARAMS ((void));
-static int oprs_not_set_p PARAMS ((rtx, rtx));
-static void mark_call PARAMS ((rtx));
-static void mark_set PARAMS ((rtx, rtx));
-static void mark_clobber PARAMS ((rtx, rtx));
-static void mark_oprs_set PARAMS ((rtx));
-static void alloc_cprop_mem PARAMS ((int, int));
-static void free_cprop_mem PARAMS ((void));
-static void compute_transp PARAMS ((rtx, int, sbitmap *, int));
-static void compute_transpout PARAMS ((void));
-static void compute_local_properties PARAMS ((sbitmap *, sbitmap *, sbitmap *,
- int));
-static void compute_cprop_data PARAMS ((void));
-static void find_used_regs PARAMS ((rtx *, void *));
-static int try_replace_reg PARAMS ((rtx, rtx, rtx));
-static struct expr *find_avail_set PARAMS ((int, rtx));
-static int cprop_jump PARAMS ((basic_block, rtx, rtx, rtx));
-#ifdef HAVE_cc0
-static int cprop_cc0_jump PARAMS ((basic_block, rtx, struct reg_use *, rtx));
-#endif
-static void mems_conflict_for_gcse_p PARAMS ((rtx, rtx, void *));
-static int load_killed_in_block_p PARAMS ((basic_block, int, rtx, int));
-static void canon_list_insert PARAMS ((rtx, rtx, void *));
-static int cprop_insn PARAMS ((basic_block, rtx, int));
-static int cprop PARAMS ((int));
-static int one_cprop_pass PARAMS ((int, int));
-static void alloc_pre_mem PARAMS ((int, int));
-static void free_pre_mem PARAMS ((void));
-static void compute_pre_data PARAMS ((void));
-static int pre_expr_reaches_here_p PARAMS ((basic_block, struct expr *,
- basic_block));
-static void insert_insn_end_bb PARAMS ((struct expr *, basic_block, int));
-static void pre_insert_copy_insn PARAMS ((struct expr *, rtx));
-static void pre_insert_copies PARAMS ((void));
-static int pre_delete PARAMS ((void));
-static int pre_gcse PARAMS ((void));
-static int one_pre_gcse_pass PARAMS ((int));
-static void add_label_notes PARAMS ((rtx, rtx));
-static void alloc_code_hoist_mem PARAMS ((int, int));
-static void free_code_hoist_mem PARAMS ((void));
-static void compute_code_hoist_vbeinout PARAMS ((void));
-static void compute_code_hoist_data PARAMS ((void));
-static int hoist_expr_reaches_here_p PARAMS ((basic_block, int, basic_block,
- char *));
-static void hoist_code PARAMS ((void));
-static int one_code_hoisting_pass PARAMS ((void));
-static void alloc_rd_mem PARAMS ((int, int));
-static void free_rd_mem PARAMS ((void));
-static void handle_rd_kill_set PARAMS ((rtx, int, basic_block));
-static void compute_kill_rd PARAMS ((void));
-static void compute_rd PARAMS ((void));
-static void alloc_avail_expr_mem PARAMS ((int, int));
-static void free_avail_expr_mem PARAMS ((void));
-static void compute_ae_gen PARAMS ((void));
-static int expr_killed_p PARAMS ((rtx, basic_block));
-static void compute_ae_kill PARAMS ((sbitmap *, sbitmap *));
-static int expr_reaches_here_p PARAMS ((struct occr *, struct expr *,
- basic_block, int));
-static rtx computing_insn PARAMS ((struct expr *, rtx));
-static int def_reaches_here_p PARAMS ((rtx, rtx));
-static int can_disregard_other_sets PARAMS ((struct reg_set **, rtx, int));
-static int handle_avail_expr PARAMS ((rtx, struct expr *));
-static int classic_gcse PARAMS ((void));
-static int one_classic_gcse_pass PARAMS ((int));
-static void invalidate_nonnull_info PARAMS ((rtx, rtx, void *));
-static void delete_null_pointer_checks_1 PARAMS ((unsigned int *,
- sbitmap *, sbitmap *,
- struct null_pointer_info *));
-static rtx process_insert_insn PARAMS ((struct expr *));
-static int pre_edge_insert PARAMS ((struct edge_list *, struct expr **));
-static int expr_reaches_here_p_work PARAMS ((struct occr *, struct expr *,
- basic_block, int, char *));
-static int pre_expr_reaches_here_p_work PARAMS ((basic_block, struct expr *,
- basic_block, char *));
-static struct ls_expr * ldst_entry PARAMS ((rtx));
-static void free_ldst_entry PARAMS ((struct ls_expr *));
-static void free_ldst_mems PARAMS ((void));
-static void print_ldst_list PARAMS ((FILE *));
-static struct ls_expr * find_rtx_in_ldst PARAMS ((rtx));
-static int enumerate_ldsts PARAMS ((void));
-static inline struct ls_expr * first_ls_expr PARAMS ((void));
-static inline struct ls_expr * next_ls_expr PARAMS ((struct ls_expr *));
-static int simple_mem PARAMS ((rtx));
-static void invalidate_any_buried_refs PARAMS ((rtx));
-static void compute_ld_motion_mems PARAMS ((void));
-static void trim_ld_motion_mems PARAMS ((void));
-static void update_ld_motion_stores PARAMS ((struct expr *));
-static void reg_set_info PARAMS ((rtx, rtx, void *));
-static int store_ops_ok PARAMS ((rtx, basic_block));
-static void find_moveable_store PARAMS ((rtx));
-static int compute_store_table PARAMS ((void));
-static int load_kills_store PARAMS ((rtx, rtx));
-static int find_loads PARAMS ((rtx, rtx));
-static int store_killed_in_insn PARAMS ((rtx, rtx));
-static int store_killed_after PARAMS ((rtx, rtx, basic_block));
-static int store_killed_before PARAMS ((rtx, rtx, basic_block));
-static void build_store_vectors PARAMS ((void));
-static void insert_insn_start_bb PARAMS ((rtx, basic_block));
-static int insert_store PARAMS ((struct ls_expr *, edge));
-static void replace_store_insn PARAMS ((rtx, rtx, basic_block));
-static void delete_store PARAMS ((struct ls_expr *,
- basic_block));
-static void free_store_memory PARAMS ((void));
-static void store_motion PARAMS ((void));
-static void free_insn_expr_list_list PARAMS ((rtx *));
-static void clear_modify_mem_tables PARAMS ((void));
-static void free_modify_mem_tables PARAMS ((void));
+static void compute_can_copy (void);
+static void *gmalloc (size_t) ATTRIBUTE_MALLOC;
+static void *gcalloc (size_t, size_t) ATTRIBUTE_MALLOC;
+static void *grealloc (void *, size_t);
+static void *gcse_alloc (unsigned long);
+static void alloc_gcse_mem (rtx);
+static void free_gcse_mem (void);
+static void alloc_reg_set_mem (int);
+static void free_reg_set_mem (void);
+static int get_bitmap_width (int, int, int);
+static void record_one_set (int, rtx);
+static void replace_one_set (int, rtx, rtx);
+static void record_set_info (rtx, rtx, void *);
+static void compute_sets (rtx);
+static void hash_scan_insn (rtx, struct hash_table *, int);
+static void hash_scan_set (rtx, rtx, struct hash_table *);
+static void hash_scan_clobber (rtx, rtx, struct hash_table *);
+static void hash_scan_call (rtx, rtx, struct hash_table *);
+static int want_to_gcse_p (rtx);
+static bool gcse_constant_p (rtx);
+static int oprs_unchanged_p (rtx, rtx, int);
+static int oprs_anticipatable_p (rtx, rtx);
+static int oprs_available_p (rtx, rtx);
+static void insert_expr_in_table (rtx, enum machine_mode, rtx, int, int,
+ struct hash_table *);
+static void insert_set_in_table (rtx, rtx, struct hash_table *);
+static unsigned int hash_expr (rtx, enum machine_mode, int *, int);
+static unsigned int hash_expr_1 (rtx, enum machine_mode, int *);
+static unsigned int hash_string_1 (const char *);
+static unsigned int hash_set (int, int);
+static int expr_equiv_p (rtx, rtx);
+static void record_last_reg_set_info (rtx, int);
+static void record_last_mem_set_info (rtx);
+static void record_last_set_info (rtx, rtx, void *);
+static void compute_hash_table (struct hash_table *);
+static void alloc_hash_table (int, struct hash_table *, int);
+static void free_hash_table (struct hash_table *);
+static void compute_hash_table_work (struct hash_table *);
+static void dump_hash_table (FILE *, const char *, struct hash_table *);
+static struct expr *lookup_expr (rtx, struct hash_table *);
+static struct expr *lookup_set (unsigned int, struct hash_table *);
+static struct expr *next_set (unsigned int, struct expr *);
+static void reset_opr_set_tables (void);
+static int oprs_not_set_p (rtx, rtx);
+static void mark_call (rtx);
+static void mark_set (rtx, rtx);
+static void mark_clobber (rtx, rtx);
+static void mark_oprs_set (rtx);
+static void alloc_cprop_mem (int, int);
+static void free_cprop_mem (void);
+static void compute_transp (rtx, int, sbitmap *, int);
+static void compute_transpout (void);
+static void compute_local_properties (sbitmap *, sbitmap *, sbitmap *,
+ struct hash_table *);
+static void compute_cprop_data (void);
+static void find_used_regs (rtx *, void *);
+static int try_replace_reg (rtx, rtx, rtx);
+static struct expr *find_avail_set (int, rtx);
+static int cprop_jump (basic_block, rtx, rtx, rtx, rtx);
+static void mems_conflict_for_gcse_p (rtx, rtx, void *);
+static int load_killed_in_block_p (basic_block, int, rtx, int);
+static void canon_list_insert (rtx, rtx, void *);
+static int cprop_insn (rtx, int);
+static int cprop (int);
+static void find_implicit_sets (void);
+static int one_cprop_pass (int, int, int);
+static bool constprop_register (rtx, rtx, rtx, int);
+static struct expr *find_bypass_set (int, int);
+static bool reg_killed_on_edge (rtx, edge);
+static int bypass_block (basic_block, rtx, rtx);
+static int bypass_conditional_jumps (void);
+static void alloc_pre_mem (int, int);
+static void free_pre_mem (void);
+static void compute_pre_data (void);
+static int pre_expr_reaches_here_p (basic_block, struct expr *,
+ basic_block);
+static void insert_insn_end_bb (struct expr *, basic_block, int);
+static void pre_insert_copy_insn (struct expr *, rtx);
+static void pre_insert_copies (void);
+static int pre_delete (void);
+static int pre_gcse (void);
+static int one_pre_gcse_pass (int);
+static void add_label_notes (rtx, rtx);
+static void alloc_code_hoist_mem (int, int);
+static void free_code_hoist_mem (void);
+static void compute_code_hoist_vbeinout (void);
+static void compute_code_hoist_data (void);
+static int hoist_expr_reaches_here_p (basic_block, int, basic_block, char *);
+static void hoist_code (void);
+static int one_code_hoisting_pass (void);
+static void alloc_rd_mem (int, int);
+static void free_rd_mem (void);
+static void handle_rd_kill_set (rtx, int, basic_block);
+static void compute_kill_rd (void);
+static void compute_rd (void);
+static void alloc_avail_expr_mem (int, int);
+static void free_avail_expr_mem (void);
+static void compute_ae_gen (struct hash_table *);
+static int expr_killed_p (rtx, basic_block);
+static void compute_ae_kill (sbitmap *, sbitmap *, struct hash_table *);
+static int expr_reaches_here_p (struct occr *, struct expr *, basic_block,
+ int);
+static rtx computing_insn (struct expr *, rtx);
+static int def_reaches_here_p (rtx, rtx);
+static int can_disregard_other_sets (struct reg_set **, rtx, int);
+static int handle_avail_expr (rtx, struct expr *);
+static int classic_gcse (void);
+static int one_classic_gcse_pass (int);
+static void invalidate_nonnull_info (rtx, rtx, void *);
+static int delete_null_pointer_checks_1 (unsigned int *, sbitmap *, sbitmap *,
+ struct null_pointer_info *);
+static rtx process_insert_insn (struct expr *);
+static int pre_edge_insert (struct edge_list *, struct expr **);
+static int expr_reaches_here_p_work (struct occr *, struct expr *,
+ basic_block, int, char *);
+static int pre_expr_reaches_here_p_work (basic_block, struct expr *,
+ basic_block, char *);
+static struct ls_expr * ldst_entry (rtx);
+static void free_ldst_entry (struct ls_expr *);
+static void free_ldst_mems (void);
+static void print_ldst_list (FILE *);
+static struct ls_expr * find_rtx_in_ldst (rtx);
+static int enumerate_ldsts (void);
+static inline struct ls_expr * first_ls_expr (void);
+static inline struct ls_expr * next_ls_expr (struct ls_expr *);
+static int simple_mem (rtx);
+static void invalidate_any_buried_refs (rtx);
+static void compute_ld_motion_mems (void);
+static void trim_ld_motion_mems (void);
+static void update_ld_motion_stores (struct expr *);
+static void reg_set_info (rtx, rtx, void *);
+static bool store_ops_ok (rtx, int *);
+static rtx extract_mentioned_regs (rtx);
+static rtx extract_mentioned_regs_helper (rtx, rtx);
+static void find_moveable_store (rtx, int *, int *);
+static int compute_store_table (void);
+static bool load_kills_store (rtx, rtx, int);
+static bool find_loads (rtx, rtx, int);
+static bool store_killed_in_insn (rtx, rtx, rtx, int);
+static bool store_killed_after (rtx, rtx, rtx, basic_block, int *, rtx *);
+static bool store_killed_before (rtx, rtx, rtx, basic_block, int *);
+static void build_store_vectors (void);
+static void insert_insn_start_bb (rtx, basic_block);
+static int insert_store (struct ls_expr *, edge);
+static void remove_reachable_equiv_notes (basic_block, struct ls_expr *);
+static void replace_store_insn (rtx, rtx, basic_block, struct ls_expr *);
+static void delete_store (struct ls_expr *, basic_block);
+static void free_store_memory (void);
+static void store_motion (void);
+static void free_insn_expr_list_list (rtx *);
+static void clear_modify_mem_tables (void);
+static void free_modify_mem_tables (void);
+static rtx gcse_emit_move_after (rtx, rtx, rtx);
+static void local_cprop_find_used_regs (rtx *, void *);
+static bool do_local_cprop (rtx, rtx, int, rtx*);
+static bool adjust_libcall_notes (rtx, rtx, rtx, rtx*);
+static void local_cprop_pass (int);
+static bool is_too_expensive (const char *);