OSDN Git Service

Correct test results for avoid-bool-define fix
[pf3gnuchains/gcc-fork.git] / gcc / rtl.h
index 37acbd5..648aa13 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1,6 +1,6 @@
 /* Register Transfer Language (RTL) definitions for GNU C-Compiler
    Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000 Free Software Foundation, Inc.
+   1999, 2000, 2001 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -19,8 +19,8 @@ along with GNU CC; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
-#ifndef _RTL_H
-#define _RTL_H
+#ifndef GCC_RTL_H
+#define GCC_RTL_H
 
 struct function;
 
@@ -162,13 +162,17 @@ typedef struct rtx_def
   unsigned int used : 1;
   /* Nonzero if this rtx came from procedure integration.
      In a REG, nonzero means this reg refers to the return value
-     of the current function.  */
+     of the current function.
+     1 in a SYMBOL_REF if the symbol is weak.  */
   unsigned integrated : 1;
   /* 1 in an INSN or a SET if this rtx is related to the call frame,
      either changing how we compute the frame address or saving and
      restoring registers in the prologue and epilogue.
      1 in a MEM if the MEM refers to a scalar, rather than a member of
-     an aggregate.  */
+     an aggregate.
+     1 in a REG if the register is a pointer.
+     1 in a SYMBOL_REF if it addresses something in the per-function
+     constant string pool.  */
   unsigned frame_related : 1;
 
   /* The first element of the operands of this rtx.
@@ -181,11 +185,11 @@ typedef struct rtx_def
 
 /* Define macros to access the `code' field of the rtx.  */
 
-#define GET_CODE(RTX)          ((RTX)->code)
-#define PUT_CODE(RTX, CODE)    ((RTX)->code = (CODE))
+#define GET_CODE(RTX)      ((enum rtx_code) (RTX)->code)
+#define PUT_CODE(RTX, CODE) ((RTX)->code = (ENUM_BITFIELD(rtx_code)) (CODE))
 
-#define GET_MODE(RTX)          ((RTX)->mode)
-#define PUT_MODE(RTX, MODE)    ((RTX)->mode = (MODE))
+#define GET_MODE(RTX)      ((enum machine_mode) (RTX)->mode)
+#define PUT_MODE(RTX, MODE) ((RTX)->mode = (ENUM_BITFIELD(machine_mode)) (MODE))
 
 #define RTX_INTEGRATED_P(RTX) ((RTX)->integrated)
 #define RTX_UNCHANGING_P(RTX) ((RTX)->unchanging)
@@ -325,6 +329,7 @@ extern void rtvec_check_failed_bounds PARAMS ((rtvec, int,
 
 #define X0WINT(RTX, N)    (RTL_CHECK1(RTX, N, '0').rtwint)
 #define X0INT(RTX, N)     (RTL_CHECK1(RTX, N, '0').rtint)
+#define X0UINT(RTX, N)    (RTL_CHECK1(RTX, N, '0').rtuint)
 #define X0STR(RTX, N)     (RTL_CHECK1(RTX, N, '0').rtstr)
 #define X0EXP(RTX, N)     (RTL_CHECK1(RTX, N, '0').rtx)
 #define X0VEC(RTX, N)     (RTL_CHECK1(RTX, N, '0').rtvec)
@@ -546,7 +551,11 @@ enum reg_note
   REG_MAYBE_DEAD,
 
   /* Indicates that a call does not return.  */
-  REG_NORETURN
+  REG_NORETURN,
+
+  /* Indicates that an indirect jump is a non-local goto instead of a 
+     computed goto.  */
+  REG_NON_LOCAL_GOTO
 };
 
 /* The base value for branch probability notes.  */
@@ -694,7 +703,7 @@ enum insn_note
 
 extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS];
 #define GET_NOTE_INSN_NAME(NOTE_CODE) \
-  (note_insn_name[(NOTE_CODE) - NOTE_INSN_BIAS])
+  (note_insn_name[(NOTE_CODE) - (int) NOTE_INSN_BIAS])
 
 /* The name of a label, in case it corresponds to an explicit label
    in the input source code.  */
@@ -735,9 +744,12 @@ extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS];
 
 #define CONTAINING_INSN(RTX) XCEXP(RTX, 2, LABEL_REF)
 
-/* For a REG rtx, REGNO extracts the register number.  */
+/* For a REG rtx, REGNO extracts the register number.  ORIGINAL_REGNO holds
+   the number the register originally had; for a pseudo register turned into
+   a hard reg this will hold the old pseudo register number.  */
 
 #define REGNO(RTX) XCUINT(RTX, 0, REG)
+#define ORIGINAL_REGNO(RTX) X0UINT(RTX, 1)
 
 /* For a REG rtx, REG_FUNCTION_VALUE_P is nonzero if the reg
    is the current function's return value.  */
@@ -747,6 +759,9 @@ extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS];
 /* 1 in a REG rtx if it corresponds to a variable declared by the user.  */
 #define REG_USERVAR_P(RTX) ((RTX)->volatil)
 
+/* 1 in a REG rtx if the register is a pointer.  */
+#define REG_POINTER(RTX) ((RTX)->frame_related)
+
 /* 1 if the given register REG corresponds to a hard register.  */
 #define HARD_REGISTER_P(REG) (HARD_REGISTER_NUM_P (REGNO (REG)))
 
@@ -775,10 +790,17 @@ extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS];
 #define CONST_DOUBLE_MEM(r) XCEXP (r, 0, CONST_DOUBLE)
 
 /* For a SUBREG rtx, SUBREG_REG extracts the value we want a subreg of.
-   SUBREG_WORD extracts the word-number.  */
+   SUBREG_BYTE extracts the byte-number.  */
 
 #define SUBREG_REG(RTX) XCEXP(RTX, 0, SUBREG)
-#define SUBREG_WORD(RTX) XCUINT(RTX, 1, SUBREG)
+#define SUBREG_BYTE(RTX) XCUINT(RTX, 1, SUBREG)
+
+/* in rtlanal.c */
+extern unsigned int subreg_regno_offset        PARAMS ((unsigned int, 
+                                                        enum machine_mode, 
+                                                        unsigned int, 
+                                                        enum machine_mode));
+extern unsigned int subreg_regno       PARAMS ((rtx));
 
 /* 1 if the REG contained in SUBREG_REG is already known to be
    sign- or zero-extended from the mode of the SUBREG to the mode of
@@ -904,16 +926,18 @@ extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS];
 /* 1 in a SYMBOL_REF if it addresses this function's constants pool.  */
 #define CONSTANT_POOL_ADDRESS_P(RTX) ((RTX)->unchanging)
 
+/* 1 in a SYMBOL_REF if it addresses this function's string constant pool.  */
+#define STRING_POOL_ADDRESS_P(RTX) ((RTX)->frame_related)
+
 /* Flag in a SYMBOL_REF for machine-specific purposes.  */
 #define SYMBOL_REF_FLAG(RTX) ((RTX)->volatil)
 
-/* 1 in a SYMBOL_REF if it represents a symbol which might have to change
-   if its inlined or unrolled. */
-#define SYMBOL_REF_NEED_ADJUST(RTX)  ((RTX)->in_struct)
-
 /* 1 means a SYMBOL_REF has been the library function in emit_library_call.  */
 #define SYMBOL_REF_USED(RTX) ((RTX)->used)
 
+/* 1 means a SYMBOL_REF is weak.  */
+#define SYMBOL_REF_WEAK(RTX) ((RTX)->integrated)
+
 /* Define a macro to look for REG_INC notes,
    but save time on machines where they never exist.  */
 
@@ -1112,17 +1136,6 @@ extern int generating_concat_p;
 
 /* Generally useful functions.  */
 
-/* The following functions accept a wide integer argument.  Rather than
-   having to cast on every function call, we use a macro instead, that is
-   defined here and in tree.h.  */
-
-#ifndef exact_log2
-#define exact_log2(N) exact_log2_wide ((unsigned HOST_WIDE_INT) (N))
-#define floor_log2(N) floor_log2_wide ((unsigned HOST_WIDE_INT) (N))
-#endif
-extern int exact_log2_wide             PARAMS ((unsigned HOST_WIDE_INT));
-extern int floor_log2_wide             PARAMS ((unsigned HOST_WIDE_INT));
-
 /* In expmed.c */
 extern int ceil_log2                   PARAMS ((unsigned HOST_WIDE_INT));
 
@@ -1145,8 +1158,6 @@ extern rtx gen_rtx                        PARAMS ((enum rtx_code,
 extern rtvec gen_rtvec                 PARAMS ((int, ...));
 
 /* In other files */
-extern char *oballoc                   PARAMS ((int));
-extern char *permalloc                 PARAMS ((int));
 extern rtx rtx_alloc                   PARAMS ((RTX_CODE));
 extern rtvec rtvec_alloc               PARAMS ((int));
 extern rtx copy_insn_1                 PARAMS ((rtx));
@@ -1167,6 +1178,7 @@ extern int rtx_equal_p                  PARAMS ((rtx, rtx));
 extern rtvec gen_rtvec_v               PARAMS ((int, rtx *));
 extern rtx gen_reg_rtx                 PARAMS ((enum machine_mode));
 extern rtx gen_label_rtx               PARAMS ((void));
+extern int subreg_hard_regno           PARAMS ((rtx, int));
 extern rtx gen_lowpart_common          PARAMS ((enum machine_mode, rtx));
 extern rtx gen_lowpart                 PARAMS ((enum machine_mode, rtx));
 
@@ -1179,14 +1191,18 @@ extern rtx gen_realpart                 PARAMS ((enum machine_mode, rtx));
 extern rtx gen_imagpart                        PARAMS ((enum machine_mode, rtx));
 extern rtx operand_subword             PARAMS ((rtx, unsigned int, int,
                                                 enum machine_mode));
+extern rtx constant_subword            PARAMS ((rtx, int,
+                                                enum machine_mode));
 
 /* In emit-rtl.c */
 extern rtx operand_subword_force       PARAMS ((rtx, unsigned int,
                                                 enum machine_mode));
 extern int subreg_lowpart_p            PARAMS ((rtx));
+extern int subreg_lowpart_parts_p      PARAMS ((enum machine_mode,
+                                                enum machine_mode,
+                                                unsigned int));
 extern rtx make_safe_from              PARAMS ((rtx, rtx));
 extern rtx convert_memory_address      PARAMS ((enum machine_mode, rtx));
-extern rtx memory_address              PARAMS ((enum machine_mode, rtx));
 extern rtx get_insns                   PARAMS ((void));
 extern const char *get_insn_name       PARAMS ((int));
 extern rtx get_last_insn               PARAMS ((void));
@@ -1202,9 +1218,6 @@ extern rtx gen_sequence                   PARAMS ((void));
 extern rtx immed_double_const          PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT, enum machine_mode));
 extern rtx force_const_mem             PARAMS ((enum machine_mode, rtx));
 
-/* In explow.c  */
-extern rtx force_reg                   PARAMS ((enum machine_mode, rtx));
-
 /* In varasm.c  */
 extern rtx get_pool_constant           PARAMS ((rtx));
 extern enum machine_mode get_pool_mode PARAMS ((rtx));
@@ -1220,11 +1233,6 @@ extern rtx assign_stack_temp             PARAMS ((enum machine_mode,
                                               HOST_WIDE_INT, int));
 extern rtx assign_temp                 PARAMS ((union tree_node *,
                                               int, int, int));
-/* In expr.c  */
-extern rtx protect_from_queue          PARAMS ((rtx, int));
-extern void emit_queue                 PARAMS ((void));
-extern rtx emit_move_insn              PARAMS ((rtx, rtx));
-
 /* In emit-rtl.c */
 extern rtx emit_insn_before            PARAMS ((rtx, rtx));
 extern rtx emit_jump_insn_before       PARAMS ((rtx, rtx));
@@ -1271,9 +1279,7 @@ extern enum rtx_code reverse_condition_maybe_unordered PARAMS ((enum rtx_code));
 extern enum rtx_code swap_condition    PARAMS ((enum rtx_code));
 extern enum rtx_code unsigned_condition        PARAMS ((enum rtx_code));
 extern enum rtx_code signed_condition  PARAMS ((enum rtx_code));
-
-/* In reload.c */
-extern rtx find_equiv_reg              PARAMS ((rtx, rtx, enum reg_class, int, short *, int, enum machine_mode));
+extern void mark_jump_label            PARAMS ((rtx, rtx, int, int));
 
 /* In jump.c */
 extern rtx squeeze_notes               PARAMS ((rtx, rtx));
@@ -1294,32 +1300,47 @@ extern rtx try_split                    PARAMS ((rtx, rtx, int));
 extern rtx split_insns                 PARAMS ((rtx, rtx));
 
 /* In simplify-rtx.c  */
-extern rtx simplify_unary_operation    PARAMS ((enum rtx_code, enum machine_mode, rtx, enum machine_mode));
-extern rtx simplify_binary_operation   PARAMS ((enum rtx_code, enum machine_mode, rtx, rtx));
-extern rtx simplify_ternary_operation  PARAMS ((enum rtx_code, enum machine_mode, enum machine_mode, rtx, rtx, rtx));
-extern rtx simplify_relational_operation PARAMS ((enum rtx_code, enum machine_mode, rtx, rtx));
-extern rtx simplify_gen_binary         PARAMS ((enum rtx_code, enum machine_mode,
-                                              rtx, rtx));
+extern rtx simplify_unary_operation    PARAMS ((enum rtx_code,
+                                                enum machine_mode, rtx,
+                                                enum machine_mode));
+extern rtx simplify_binary_operation   PARAMS ((enum rtx_code,
+                                                enum machine_mode, rtx,
+                                                rtx));
+extern rtx simplify_ternary_operation  PARAMS ((enum rtx_code,
+                                                enum machine_mode,
+                                                enum machine_mode, rtx, rtx,
+                                                rtx));
+extern rtx simplify_relational_operation PARAMS ((enum rtx_code,
+                                                 enum machine_mode, rtx,
+                                                 rtx));
+extern rtx simplify_gen_binary         PARAMS ((enum rtx_code,
+                                                enum machine_mode,
+                                                rtx, rtx));
+extern rtx simplify_gen_unary          PARAMS ((enum rtx_code,
+                                                enum machine_mode, rtx,
+                                                enum machine_mode));
+extern rtx simplify_gen_ternary                PARAMS ((enum rtx_code,
+                                                enum machine_mode,
+                                                enum machine_mode,
+                                                rtx, rtx, rtx));
+extern rtx simplify_gen_relational     PARAMS ((enum rtx_code,
+                                                enum machine_mode,
+                                                enum machine_mode,
+                                                rtx, rtx));
+extern rtx simplify_subreg             PARAMS ((enum machine_mode,
+                                                rtx,
+                                                enum machine_mode,
+                                                unsigned int));
+extern rtx simplify_gen_subreg         PARAMS ((enum machine_mode,
+                                                rtx,
+                                                enum machine_mode,
+                                                unsigned int));
+extern rtx simplify_replace_rtx                PARAMS ((rtx, rtx, rtx));
 extern rtx simplify_rtx                        PARAMS ((rtx));
 
-/* In optabs.c  */
-extern rtx gen_move_insn               PARAMS ((rtx, rtx));
-
-extern rtx gen_jump                    PARAMS ((rtx));
-extern rtx gen_beq                     PARAMS ((rtx));
-extern rtx gen_bge                     PARAMS ((rtx));
-extern rtx gen_ble                     PARAMS ((rtx));
-
 /* In function.c  */
 extern rtx gen_mem_addressof           PARAMS ((rtx, union tree_node *));
 
-/* In explow.c  */
-extern rtx eliminate_constant_term     PARAMS ((rtx, rtx *));
-
-/* In optabs.c */
-extern rtx expand_complex_abs          PARAMS ((enum machine_mode, rtx, rtx,
-                                                int));
-
 /* In regclass.c  */
 extern enum machine_mode choose_hard_reg_mode PARAMS ((unsigned int,
                                                       unsigned int));
@@ -1329,9 +1350,17 @@ extern void set_unique_reg_note         PARAMS ((rtx, enum reg_note, rtx));
 
 /* Functions in rtlanal.c */
 
+/* Single set is implemented as macro for performance reasons.  */
+#define single_set(I) (INSN_P (I) \
+                      ? (GET_CODE (PATTERN (I)) == SET \
+                         ? PATTERN (I) : single_set_1 (I)) \
+                      : NULL_RTX)
+#define single_set_1(I) single_set_2 (I, PATTERN (I))
+
+extern int rtx_addr_can_trap_p         PARAMS ((rtx));
 extern int rtx_unstable_p              PARAMS ((rtx));
-extern int rtx_varies_p                        PARAMS ((rtx));
-extern int rtx_addr_varies_p           PARAMS ((rtx));
+extern int rtx_varies_p                        PARAMS ((rtx, int));
+extern int rtx_addr_varies_p           PARAMS ((rtx, int));
 extern HOST_WIDE_INT get_integer_term  PARAMS ((rtx));
 extern rtx get_related_value           PARAMS ((rtx));
 extern int reg_mentioned_p             PARAMS ((rtx, rtx));
@@ -1341,27 +1370,34 @@ extern int reg_used_between_p           PARAMS ((rtx, rtx, rtx));
 extern int reg_referenced_between_p    PARAMS ((rtx, rtx, rtx));
 extern int reg_set_between_p           PARAMS ((rtx, rtx, rtx));
 extern int regs_set_between_p          PARAMS ((rtx, rtx, rtx));
+extern int swap_commutative_operands_p PARAMS ((rtx, rtx));
 extern int modified_between_p          PARAMS ((rtx, rtx, rtx));
 extern int no_labels_between_p         PARAMS ((rtx, rtx));
 extern int no_jumps_between_p          PARAMS ((rtx, rtx));
 extern int modified_in_p               PARAMS ((rtx, rtx));
 extern int insn_dependent_p            PARAMS ((rtx, rtx));
 extern int reg_set_p                   PARAMS ((rtx, rtx));
-extern rtx single_set                  PARAMS ((rtx));
+extern rtx single_set_2                        PARAMS ((rtx, rtx));
 extern int multiple_sets               PARAMS ((rtx));
+extern int set_noop_p                  PARAMS ((rtx));
 extern rtx find_last_value             PARAMS ((rtx, rtx *, rtx, int));
 extern int refers_to_regno_p           PARAMS ((unsigned int, unsigned int,
                                                 rtx, rtx *));
 extern int reg_overlap_mentioned_p     PARAMS ((rtx, rtx));
+extern rtx set_of                      PARAMS ((rtx, rtx));
 extern void note_stores                        PARAMS ((rtx,
                                                 void (*) (rtx, rtx, void *),
                                                 void *));
+extern void note_uses                  PARAMS ((rtx *,
+                                                void (*) (rtx *, void *),
+                                                void *));
 extern rtx reg_set_last                        PARAMS ((rtx, rtx));
 extern int dead_or_set_p               PARAMS ((rtx, rtx));
 extern int dead_or_set_regno_p         PARAMS ((rtx, unsigned int));
 extern rtx find_reg_note               PARAMS ((rtx, enum reg_note, rtx));
 extern rtx find_regno_note             PARAMS ((rtx, enum reg_note,
                                                 unsigned int));
+extern rtx find_reg_equal_equiv_note   PARAMS ((rtx));
 extern int find_reg_fusage             PARAMS ((rtx, enum rtx_code, rtx));
 extern int find_regno_fusage           PARAMS ((rtx, enum rtx_code,
                                                 unsigned int));
@@ -1520,9 +1556,13 @@ extern rtx return_address_pointer_rtx;
 extern rtx gen_rtx_CONST_DOUBLE PARAMS ((enum machine_mode, rtx,
                                       HOST_WIDE_INT, HOST_WIDE_INT));
 extern rtx gen_rtx_CONST_INT PARAMS ((enum machine_mode, HOST_WIDE_INT));
+extern rtx gen_raw_REG PARAMS ((enum machine_mode, int));
 extern rtx gen_rtx_REG PARAMS ((enum machine_mode, int));
+extern rtx gen_rtx_SUBREG PARAMS ((enum machine_mode, rtx, int));
 extern rtx gen_rtx_MEM PARAMS ((enum machine_mode, rtx));
 
+extern rtx gen_lowpart_SUBREG PARAMS ((enum machine_mode, rtx));
+
 /* We need the cast here to ensure that we get the same result both with
    and without prototypes.  */
 #define GEN_INT(N)  gen_rtx_CONST_INT (VOIDmode, (HOST_WIDE_INT) (N))
@@ -1579,12 +1619,13 @@ extern rtx gen_rtx_MEM PARAMS ((enum machine_mode, rtx));
 
 #define LAST_VIRTUAL_REGISTER          ((FIRST_VIRTUAL_REGISTER) + 4)
 
+/* REGNUM never really appearing in the INSN stream.  */
+#define INVALID_REGNUM                 (~(unsigned int)0)
+
 extern rtx find_next_ref               PARAMS ((rtx, rtx));
-extern rtx *find_single_use            PARAMS ((rtx, rtx, rtx *));
 
-extern rtx output_constant_def         PARAMS ((union tree_node *));
+extern rtx output_constant_def         PARAMS ((union tree_node *, int));
 extern rtx immed_real_const            PARAMS ((union tree_node *));
-extern union tree_node *make_tree      PARAMS ((union tree_node *, rtx));
 
 /* Define a default value for STORE_FLAG_VALUE.  */
 
@@ -1625,12 +1666,9 @@ extern int no_new_pseudos;
 extern int rtx_to_tree_code    PARAMS ((enum rtx_code));
 
 /* In tree.c */
-extern void obfree                     PARAMS ((char *));
 struct obstack;
 extern void gcc_obstack_init           PARAMS ((struct obstack *));
-extern void pop_obstacks               PARAMS ((void));
-extern void push_obstacks              PARAMS ((struct obstack *,
-                                               struct obstack *));
+
 /* In cse.c */
 struct cse_basic_block_data;
 
@@ -1677,6 +1715,9 @@ extern void rebuild_jump_labels           PARAMS ((rtx));
 extern void thread_jumps               PARAMS ((rtx, int, int));
 extern int rtx_equal_for_thread_p      PARAMS ((rtx, rtx, rtx));
 extern int can_reverse_comparison_p    PARAMS ((rtx, rtx));
+extern enum rtx_code reversed_comparison_code PARAMS ((rtx, rtx));
+extern enum rtx_code reversed_comparison_code_parts PARAMS ((enum rtx_code,
+                                                            rtx, rtx, rtx));
 extern void delete_for_peephole                PARAMS ((rtx, rtx));
 extern int condjump_in_parallel_p      PARAMS ((rtx));
 extern void never_reached_warning      PARAMS ((rtx));
@@ -1728,9 +1769,6 @@ void restore_line_number_status PARAMS ((int old_value));
 extern void renumber_insns                      PARAMS ((FILE *));
 extern void remove_unnecessary_notes             PARAMS ((void));
 
-/* In insn-emit.c */
-extern void add_clobbers               PARAMS ((rtx, int));
-
 /* In combine.c */
 extern int combine_instructions                PARAMS ((rtx, unsigned int));
 extern unsigned int extended_count     PARAMS ((rtx, enum machine_mode, int));
@@ -1743,16 +1781,19 @@ extern void dump_combine_total_stats    PARAMS ((FILE *));
 /* In sched.c. */
 #ifdef BUFSIZ
 extern void schedule_insns             PARAMS ((FILE *));
+extern void schedule_ebbs              PARAMS ((FILE *));
 #endif
 extern void fix_sched_param            PARAMS ((const char *, const char *));
 
 /* In print-rtl.c */
+extern const char *print_rtx_head;
 extern void debug_rtx                  PARAMS ((rtx));
 extern void debug_rtx_list             PARAMS ((rtx, int));
 extern void debug_rtx_range            PARAMS ((rtx, rtx));
 extern rtx debug_rtx_find              PARAMS ((rtx, int));
 #ifdef BUFSIZ
 extern void print_rtl                  PARAMS ((FILE *, rtx));
+extern void print_simple_rtl           PARAMS ((FILE *, rtx));
 extern int print_rtl_single            PARAMS ((FILE *, rtx));
 extern void print_inline_rtx           PARAMS ((FILE *, rtx, int));
 #endif
@@ -1770,15 +1811,11 @@ extern void reposition_prologue_and_epilogue_notes      PARAMS ((rtx));
 extern void thread_prologue_and_epilogue_insns         PARAMS ((rtx));
 extern int prologue_epilogue_contains                  PARAMS ((rtx));
 extern int sibcall_epilogue_contains                   PARAMS ((rtx));
-extern HOST_WIDE_INT get_frame_size                    PARAMS ((void));
 extern void preserve_rtl_expr_result                   PARAMS ((rtx));
 extern void mark_temp_addr_taken                       PARAMS ((rtx));
 extern void update_temp_slot_address                   PARAMS ((rtx, rtx));
 extern void purge_addressof                            PARAMS ((rtx));
-
-/* In reload.c */
-extern int operands_match_p            PARAMS ((rtx, rtx));
-extern int safe_from_earlyclobber      PARAMS ((rtx, rtx));
+extern void purge_hard_subreg_sets                     PARAMS ((rtx));
 
 /* In stmt.c */
 extern void set_file_and_line_for_stmt PARAMS ((const char *, int));
@@ -1787,14 +1824,11 @@ extern void emit_jump                   PARAMS ((rtx));
 extern int preserve_subexpressions_p   PARAMS ((void));
 
 /* In expr.c */
-extern void init_expr_once             PARAMS ((void));
 extern void move_by_pieces             PARAMS ((rtx, rtx,
                                                 unsigned HOST_WIDE_INT,
                                                 unsigned int));
 
 /* In flow.c */
-extern void allocate_bb_life_data      PARAMS ((void));
-extern void allocate_reg_life_data     PARAMS ((void));
 extern void recompute_reg_usage                PARAMS ((rtx, int));
 #ifdef BUFSIZ
 extern void print_rtl_with_bb          PARAMS ((FILE *, rtx));
@@ -1851,9 +1885,6 @@ extern void combine_stack_adjustments     PARAMS ((void));
 extern void dbr_schedule               PARAMS ((rtx, FILE *));
 #endif
 
-/* In optabs.c */
-extern void init_optabs                        PARAMS ((void));
-
 /* In local-alloc.c */
 #ifdef BUFSIZ
 extern void dump_local_alloc           PARAMS ((FILE *));
@@ -1861,15 +1892,6 @@ extern void dump_local_alloc             PARAMS ((FILE *));
 extern int local_alloc                 PARAMS ((void));
 extern int function_invariant_p                PARAMS ((rtx));
 
-/* In reload1.c */
-extern void reload_cse_regs            PARAMS ((rtx));
-extern void init_reload                        PARAMS ((void));
-extern void mark_home_live             PARAMS ((int));
-extern int reload                      PARAMS ((rtx, int));
-
-/* In caller-save.c */
-extern void init_caller_save           PARAMS ((void));
-
 /* In profile.c */
 extern void init_branch_prob           PARAMS ((const char *));
 extern void branch_prob                        PARAMS ((void));
@@ -1912,24 +1934,36 @@ extern void rrotate_double      PARAMS ((unsigned HOST_WIDE_INT, HOST_WIDE_INT,
                                         HOST_WIDE_INT *));
 
 /* In calls.c */
-extern void emit_library_call          PARAMS ((rtx, int, enum machine_mode,
-                                                 int, ...));
-extern rtx emit_library_call_value     PARAMS ((rtx, rtx, int,
-                                                enum machine_mode,
-                                                int, ...));
+enum libcall_type
+{
+  LCT_NORMAL = 0,
+  LCT_CONST = 1,
+  LCT_PURE = 2,
+  LCT_CONST_MAKE_BLOCK = 3,
+  LCT_PURE_MAKE_BLOCK = 4,
+  LCT_NORETURN = 5,
+  LCT_THROW = 6
+};
+
+extern void emit_library_call          PARAMS ((rtx, enum libcall_type,
+                                                enum machine_mode, int,
+                                                ...));
+extern rtx emit_library_call_value     PARAMS ((rtx, rtx, enum libcall_type,
+                                                enum machine_mode, int,
+                                                ...));
 
 /* In unroll.c */
 extern int set_dominates_use           PARAMS ((int, int, int, rtx, rtx));
 
 /* In varasm.c */
-extern void bss_section                        PARAMS ((void));
 extern int in_data_section             PARAMS ((void));
-extern int supports_one_only           PARAMS ((void));
 extern void init_varasm_once           PARAMS ((void));
 
 /* In rtl.c */
 extern void init_rtl                   PARAMS ((void));
-extern void rtx_free                   PARAMS ((rtx));
+extern void traverse_md_constants      PARAMS ((int (*) (void **, void *),
+                                                void *));
+struct md_constant { char *name, *value; };
 
 #ifdef BUFSIZ
 extern int read_skip_spaces            PARAMS ((FILE *));
@@ -1952,7 +1986,10 @@ extern void fancy_abort PARAMS ((const char *, int, const char *))
 /* In alias.c */
 extern rtx canon_rtx                    PARAMS ((rtx));
 extern int true_dependence             PARAMS ((rtx, enum machine_mode, rtx,
-                                               int (*)(rtx)));
+                                               int (*)(rtx, int)));
+extern rtx get_addr                     PARAMS ((rtx));
+extern int canon_true_dependence        PARAMS ((rtx, enum machine_mode, rtx,
+                                                rtx, int (*)(rtx, int)));
 extern int read_dependence             PARAMS ((rtx, rtx));
 extern int anti_dependence             PARAMS ((rtx, rtx));
 extern int output_dependence           PARAMS ((rtx, rtx));
@@ -1985,4 +2022,4 @@ extern void regrename_optimize            PARAMS ((void));
 /* In condexec.c */
 extern void if_convert                 PARAMS ((int));
 
-#endif /* _RTL_H */
+#endif /* ! GCC_RTL_H */