X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Frtl.h;h=3772b37755a0f0c61d2285033c5ab53b67b86882;hb=224f24454c2501497c7fc75d731fc948f215748e;hp=2bc0ae2b43f84699ce89c494ac4e52a2e0c371da;hpb=6cf818413ee4807efba3073e69bfbf5b97fcd2b0;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/rtl.h b/gcc/rtl.h index 2bc0ae2b43f..3772b37755a 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -1,6 +1,6 @@ /* Register Transfer Language (RTL) definitions for GCC - Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GCC. @@ -26,6 +26,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include "machmode.h" #include "input.h" #include "real.h" +#include "vec.h" #undef FFS /* Some systems predefine this symbol; don't let it interfere. */ #undef FLOAT /* Likewise. */ @@ -104,7 +105,7 @@ extern const char * const rtx_format[NUM_RTX_CODE]; extern const enum rtx_class rtx_class[NUM_RTX_CODE]; #define GET_RTX_CLASS(CODE) (rtx_class[(int) (CODE)]) -extern const unsigned char rtx_size[NUM_RTX_CODE]; +extern const unsigned char rtx_code_size[NUM_RTX_CODE]; extern const unsigned char rtx_next[NUM_RTX_CODE]; /* The flags and bitfields of an ADDR_DIFF_VEC. BASE is the base label @@ -171,9 +172,63 @@ union rtunion_def struct basic_block_def *rt_bb; mem_attrs *rt_mem; reg_attrs *rt_reg; + struct constant_descriptor_rtx *rt_constant; }; typedef union rtunion_def rtunion; +/* This structure remembers the position of a SYMBOL_REF within an + object_block structure. A SYMBOL_REF only provides this information + if SYMBOL_REF_HAS_BLOCK_INFO_P is true. */ +struct block_symbol GTY(()) { + /* The usual SYMBOL_REF fields. */ + rtunion GTY ((skip)) fld[3]; + + /* The block that contains this object. */ + struct object_block *block; + + /* The offset of this object from the start of its block. It is negative + if the symbol has not yet been assigned an offset. */ + HOST_WIDE_INT offset; +}; + +DEF_VEC_P(rtx); +DEF_VEC_ALLOC_P(rtx,heap); +DEF_VEC_ALLOC_P(rtx,gc); + +/* Describes a group of objects that are to be placed together in such + a way that their relative positions are known. */ +struct object_block GTY(()) +{ + /* The section in which these objects should be placed. */ + section *sect; + + /* The alignment of the first object, measured in bits. */ + unsigned int alignment; + + /* The total size of the objects, measured in bytes. */ + HOST_WIDE_INT size; + + /* The SYMBOL_REFs for each object. The vector is sorted in + order of increasing offset and the following conditions will + hold for each element X: + + SYMBOL_REF_HAS_BLOCK_INFO_P (X) + !SYMBOL_REF_ANCHOR_P (X) + SYMBOL_REF_BLOCK (X) == [address of this structure] + SYMBOL_REF_BLOCK_OFFSET (X) >= 0. */ + VEC(rtx,gc) *objects; + + /* All the anchor SYMBOL_REFs used to address these objects, sorted + in order of increasing offset, and then increasing TLS model. + The following conditions will hold for each element X in this vector: + + SYMBOL_REF_HAS_BLOCK_INFO_P (X) + SYMBOL_REF_ANCHOR_P (X) + SYMBOL_REF_BLOCK (X) == [address of this structure] + SYMBOL_REF_BLOCK_OFFSET (X) >= 0. */ + VEC(rtx,gc) *anchors; +}; + /* RTL expression ("rtx"). */ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"), @@ -250,6 +305,7 @@ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"), union u { rtunion fld[1]; HOST_WIDE_INT hwint[1]; + struct block_symbol block_sym; struct real_value rv; } GTY ((special ("rtx_def"), desc ("GET_CODE (&%0)"))) u; }; @@ -258,7 +314,7 @@ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"), #define RTX_HDR_SIZE offsetof (struct rtx_def, u) /* The size in bytes of an rtx with code CODE. */ -#define RTX_SIZE(CODE) rtx_size[CODE] +#define RTX_CODE_SIZE(CODE) rtx_code_size[CODE] #define NULL_RTX (rtx) 0 @@ -305,6 +361,9 @@ struct rtvec_def GTY(()) { /* Predicate yielding nonzero iff X is an rtx for a memory location. */ #define MEM_P(X) (GET_CODE (X) == MEM) +/* Predicate yielding nonzero iff X is an rtx for a constant integer. */ +#define CONST_INT_P(X) (GET_CODE (X) == CONST_INT) + /* Predicate yielding nonzero iff X is a label insn. */ #define LABEL_P(X) (GET_CODE (X) == CODE_LABEL) @@ -470,6 +529,14 @@ struct rtvec_def GTY(()) { __LINE__, __FUNCTION__); \ &_rtx->u.rv; }) +#define BLOCK_SYMBOL_CHECK(RTX) __extension__ \ +({ rtx const _symbol = (RTX); \ + unsigned int flags = RTL_CHECKC1 (_symbol, 1, SYMBOL_REF).rt_int; \ + if ((flags & SYMBOL_FLAG_HAS_BLOCK_INFO) == 0) \ + rtl_check_failed_block_symbol (__FILE__, __LINE__, \ + __FUNCTION__); \ + &_symbol->u.block_sym; }) + extern void rtl_check_failed_bounds (rtx, int, const char *, int, const char *) ATTRIBUTE_NORETURN; @@ -488,6 +555,8 @@ extern void rtl_check_failed_code2 (rtx, enum rtx_code, enum rtx_code, extern void rtl_check_failed_code_mode (rtx, enum rtx_code, enum machine_mode, bool, const char *, int, const char *) ATTRIBUTE_NORETURN; +extern void rtl_check_failed_block_symbol (const char *, int, const char *) + ATTRIBUTE_NORETURN; extern void rtvec_check_failed_bounds (rtvec, int, const char *, int, const char *) ATTRIBUTE_NORETURN; @@ -504,6 +573,7 @@ extern void rtvec_check_failed_bounds (rtvec, int, const char *, int, #define XCMWINT(RTX, N, C, M) ((RTX)->u.hwint[N]) #define XCNMWINT(RTX, N, C, M) ((RTX)->u.hwint[N]) #define XCNMPRV(RTX, C, M) (&(RTX)->u.rv) +#define BLOCK_SYMBOL_CHECK(RTX) (&(RTX)->u.block_sym) #endif @@ -630,6 +700,7 @@ extern void rtl_check_failed_flag (const char *, rtx, const char *, #define X0CSELIB(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_cselib) #define X0MEMATTR(RTX, N) (RTL_CHECKC1 (RTX, N, MEM).rt_mem) #define X0REGATTR(RTX, N) (RTL_CHECKC1 (RTX, N, REG).rt_reg) +#define X0CONSTANT(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_constant) /* Access a '0' field with any type. */ #define X0ANY(RTX, N) RTL_CHECK1 (RTX, N, '0') @@ -779,7 +850,6 @@ extern const char * const reg_note_name[]; #define NOTE_BLOCK(INSN) XCTREE (INSN, 4, NOTE) #define NOTE_EH_HANDLER(INSN) XCINT (INSN, 4, NOTE) #define NOTE_BASIC_BLOCK(INSN) XCBBDEF (INSN, 4, NOTE) -#define NOTE_EXPECTED_VALUE(INSN) XCEXP (INSN, 4, NOTE) #define NOTE_VAR_LOCATION(INSN) XCEXP (INSN, 4, NOTE) /* In a NOTE that is a line number, this is the line number. @@ -893,13 +963,6 @@ enum label_kind The chain eventually winds up at the CODE_LABEL: it is circular. */ #define LABEL_REFS(LABEL) XCEXP (LABEL, 5, CODE_LABEL) -/* This is the field in the LABEL_REF through which the circular chain - of references to a particular label is linked. - FIXME: This chain is used in loop.c and in the SH backend. - Since loop.c is about to go away, it could be a win to replace - the uses of this in the SH backend with something else. */ -#define LABEL_NEXTREF(REF) XCEXP (REF, 1, LABEL_REF) - /* 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. */ @@ -932,6 +995,7 @@ enum label_kind /* For a CONST_INT rtx, INTVAL extracts the integer. */ #define INTVAL(RTX) XCWINT(RTX, 0, CONST_INT) +#define UINTVAL(RTX) ((unsigned HOST_WIDE_INT) INTVAL (RTX)) /* For a CONST_DOUBLE: For a VOIDmode, there are two integers CONST_DOUBLE_LOW is the @@ -976,8 +1040,11 @@ extern unsigned int subreg_regno_offset (unsigned int, enum machine_mode, extern bool subreg_offset_representable_p (unsigned int, enum machine_mode, unsigned int, enum machine_mode); extern unsigned int subreg_regno (rtx); +extern unsigned int subreg_nregs (rtx); extern unsigned HOST_WIDE_INT nonzero_bits (rtx, enum machine_mode); extern unsigned int num_sign_bit_copies (rtx, enum machine_mode); +extern bool constant_pool_constant_p (rtx); +extern bool truncated_to_mode (enum machine_mode, rtx); /* 1 if RTX is a subreg containing a reg that is already known to be @@ -1129,13 +1196,9 @@ do { \ MEM_NOTRAP_P (LHS) = MEM_NOTRAP_P (RHS), \ MEM_READONLY_P (LHS) = MEM_READONLY_P (RHS), \ MEM_KEEP_ALIAS_SET_P (LHS) = MEM_KEEP_ALIAS_SET_P (RHS), \ + MEM_POINTER (LHS) = MEM_POINTER (RHS), \ MEM_ATTRS (LHS) = MEM_ATTRS (RHS)) -/* 1 if RTX is a label_ref to a label outside the loop containing the - reference. */ -#define LABEL_OUTSIDE_LOOP_P(RTX) \ - (RTL_FLAG_CHECK1("LABEL_OUTSIDE_LOOP_P", (RTX), LABEL_REF)->in_struct) - /* 1 if RTX is a label_ref for a nonlocal label. */ /* Likewise in an expr_list for a reg_label note. */ #define LABEL_REF_NONLOCAL_P(RTX) \ @@ -1193,8 +1256,26 @@ do { \ #define SYMBOL_REF_WEAK(RTX) \ (RTL_FLAG_CHECK1("SYMBOL_REF_WEAK", (RTX), SYMBOL_REF)->return_val) +/* A pointer attached to the SYMBOL_REF; either SYMBOL_REF_DECL or + SYMBOL_REF_CONSTANT. */ +#define SYMBOL_REF_DATA(RTX) X0ANY ((RTX), 2) + +/* Set RTX's SYMBOL_REF_DECL to DECL. RTX must not be a constant + pool symbol. */ +#define SET_SYMBOL_REF_DECL(RTX, DECL) \ + (gcc_assert (!CONSTANT_POOL_ADDRESS_P (RTX)), X0TREE ((RTX), 2) = (DECL)) + /* The tree (decl or constant) associated with the symbol, or null. */ -#define SYMBOL_REF_DECL(RTX) X0TREE ((RTX), 2) +#define SYMBOL_REF_DECL(RTX) \ + (CONSTANT_POOL_ADDRESS_P (RTX) ? NULL : X0TREE ((RTX), 2)) + +/* Set RTX's SYMBOL_REF_CONSTANT to C. RTX must be a constant pool symbol. */ +#define SET_SYMBOL_REF_CONSTANT(RTX, C) \ + (gcc_assert (CONSTANT_POOL_ADDRESS_P (RTX)), X0CONSTANT ((RTX), 2) = (C)) + +/* The rtx constant pool entry for a symbol, or null. */ +#define SYMBOL_REF_CONSTANT(RTX) \ + (CONSTANT_POOL_ADDRESS_P (RTX) ? X0CONSTANT ((RTX), 2) : NULL) /* A set of flags on a symbol_ref that are, in some respects, redundant with information derivable from the tree decl associated with this symbol. @@ -1229,11 +1310,31 @@ do { \ #define SYMBOL_FLAG_EXTERNAL (1 << 6) #define SYMBOL_REF_EXTERNAL_P(RTX) \ ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_EXTERNAL) != 0) +/* Set if this symbol has a block_symbol structure associated with it. */ +#define SYMBOL_FLAG_HAS_BLOCK_INFO (1 << 7) +#define SYMBOL_REF_HAS_BLOCK_INFO_P(RTX) \ + ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_HAS_BLOCK_INFO) != 0) +/* Set if this symbol is a section anchor. SYMBOL_REF_ANCHOR_P implies + SYMBOL_REF_HAS_BLOCK_INFO_P. */ +#define SYMBOL_FLAG_ANCHOR (1 << 8) +#define SYMBOL_REF_ANCHOR_P(RTX) \ + ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_ANCHOR) != 0) /* Subsequent bits are available for the target to use. */ -#define SYMBOL_FLAG_MACH_DEP_SHIFT 7 +#define SYMBOL_FLAG_MACH_DEP_SHIFT 9 #define SYMBOL_FLAG_MACH_DEP (1 << SYMBOL_FLAG_MACH_DEP_SHIFT) +/* If SYMBOL_REF_HAS_BLOCK_INFO_P (RTX), this is the object_block + structure to which the symbol belongs, or NULL if it has not been + assigned a block. */ +#define SYMBOL_REF_BLOCK(RTX) (BLOCK_SYMBOL_CHECK (RTX)->block) + +/* If SYMBOL_REF_HAS_BLOCK_INFO_P (RTX), this is the offset of RTX from + the first object in SYMBOL_REF_BLOCK (RTX). The value is negative if + RTX has not yet been assigned to a block, or it has not been given an + offset within that block. */ +#define SYMBOL_REF_BLOCK_OFFSET(RTX) (BLOCK_SYMBOL_CHECK (RTX)->offset) + /* Define a macro to look for REG_INC notes, but save time on machines where they never exist. */ @@ -1333,9 +1434,6 @@ extern int currently_expanding_to_rtl; /* In expmed.c */ extern int ceil_log2 (unsigned HOST_WIDE_INT); -/* In builtins.c */ -extern rtx expand_builtin_expect_jump (tree, rtx, rtx); - /* In explow.c */ extern void set_stack_check_libfunc (rtx); extern HOST_WIDE_INT trunc_int_for_mode (HOST_WIDE_INT, enum machine_mode); @@ -1364,6 +1462,7 @@ extern void dump_rtx_statistics (void); extern rtx copy_rtx_if_shared (rtx); /* In rtl.c */ +extern unsigned int rtx_size (rtx); extern rtx shallow_copy_rtx_stat (rtx MEM_STAT_DECL); #define shallow_copy_rtx(a) shallow_copy_rtx_stat (a MEM_STAT_INFO) extern int rtx_equal_p (rtx, rtx); @@ -1417,7 +1516,6 @@ struct function; extern rtx get_pool_constant (rtx); extern rtx get_pool_constant_mark (rtx, bool *); extern enum machine_mode get_pool_mode (rtx); -extern rtx get_pool_constant_for_function (struct function *, rtx); extern rtx simplify_subtraction (rtx); /* In function.c */ @@ -1452,7 +1550,6 @@ extern rtx emit_call_insn_after_setloc (rtx, rtx, int); extern rtx emit_barrier_after (rtx); extern rtx emit_label_after (rtx, rtx); extern rtx emit_note_after (int, rtx); -extern rtx emit_note_copy_after (rtx, rtx); extern rtx emit_insn (rtx); extern rtx emit_jump_insn (rtx); extern rtx emit_call_insn (rtx); @@ -1494,7 +1591,7 @@ extern enum rtx_code swap_condition (enum rtx_code); extern enum rtx_code unsigned_condition (enum rtx_code); extern enum rtx_code signed_condition (enum rtx_code); extern void mark_jump_label (rtx, rtx, int); -extern void cleanup_barriers (void); +extern unsigned int cleanup_barriers (void); /* In jump.c */ extern bool squeeze_notes (rtx *, rtx *); @@ -1611,10 +1708,10 @@ extern int side_effects_p (rtx); extern int volatile_refs_p (rtx); extern int volatile_insn_p (rtx); extern int may_trap_p (rtx); +extern int may_trap_after_code_motion_p (rtx); extern int may_trap_or_fault_p (rtx); extern int inequality_comparisons_p (rtx); extern rtx replace_rtx (rtx, rtx, rtx); -extern rtx replace_regs (rtx, rtx *, unsigned int, int); extern int replace_label (rtx *, void *); extern int rtx_referenced_p (rtx, rtx); extern bool tablejump_p (rtx, rtx *, rtx *); @@ -1625,7 +1722,6 @@ extern rtx regno_use_in (unsigned int, rtx); extern int auto_inc_p (rtx); extern int in_expr_list_p (rtx, rtx); extern void remove_node_from_expr_list (rtx, rtx *); -extern int insns_safe_to_move_p (rtx, rtx, rtx *); extern int loc_mentioned_in_p (rtx *, rtx); extern rtx find_first_parameter_load (rtx, rtx); extern bool keep_with_call_p (rtx); @@ -1653,6 +1749,12 @@ void free_EXPR_LIST_node (rtx); void free_INSN_LIST_node (rtx); rtx alloc_INSN_LIST (rtx, rtx); rtx alloc_EXPR_LIST (int, rtx, rtx); +void free_DEPS_LIST_list (rtx *); +rtx alloc_DEPS_LIST (rtx, rtx, int); +void remove_free_DEPS_LIST_elem (rtx, rtx *); +void remove_free_INSN_LIST_elem (rtx, rtx *); +rtx remove_list_elem (rtx, rtx *); +rtx copy_DEPS_LIST_list (rtx); /* regclass.c */ @@ -1674,7 +1776,7 @@ extern enum reg_class reg_preferred_class (int); extern enum reg_class reg_alternate_class (int); extern void split_all_insns (int); -extern void split_all_insns_noflow (void); +extern unsigned int split_all_insns_noflow (void); #define MAX_SAVED_CONST_INT 64 extern GTY(()) rtx const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1]; @@ -1869,6 +1971,12 @@ extern int epilogue_completed; extern int reload_in_progress; +#ifdef STACK_REGS +/* Nonzero after end of regstack pass. + Set to 1 or 0 by reg-stack.c. */ +extern int regstack_completed; +#endif + /* If this is nonzero, we do not bother generating VOLATILE around volatile memory references, and we are willing to output indirect addresses. If cse is to follow, we reject @@ -1889,7 +1997,7 @@ extern int rtx_to_tree_code (enum rtx_code); /* In cse.c */ extern int delete_trivially_dead_insns (rtx, int); -extern int cse_main (rtx, int, FILE *); +extern int cse_main (rtx, int); extern int exp_equiv_p (rtx, rtx, int, bool); extern unsigned hash_rtx (rtx x, enum machine_mode, int *, int *, bool); @@ -1920,7 +2028,6 @@ extern enum rtx_code reversed_comparison_code_parts (enum rtx_code, rtx, rtx, rtx); extern void delete_for_peephole (rtx, rtx); extern int condjump_in_parallel_p (rtx); -extern void purge_line_number_notes (void); /* In emit-rtl.c. */ extern int max_reg_num (void); @@ -1942,7 +2049,7 @@ extern void init_emit_once (int); extern void push_topmost_sequence (void); extern void pop_topmost_sequence (void); extern void set_new_first_and_last_insn (rtx, rtx); -extern void unshare_all_rtl (void); +extern unsigned int unshare_all_rtl (void); extern void unshare_all_rtl_again (rtx); extern void unshare_all_rtl_in_chain (rtx); extern void verify_rtl_sharing (void); @@ -1953,12 +2060,11 @@ extern void add_insn (rtx); extern void add_insn_before (rtx, rtx); extern void add_insn_after (rtx, rtx); extern void remove_insn (rtx); -extern void emit_insn_after_with_line_notes (rtx, rtx, rtx); extern rtx emit (rtx); -extern void renumber_insns (FILE *); -extern void remove_unnecessary_notes (void); +extern void renumber_insns (void); extern rtx delete_insn (rtx); extern rtx entry_of_function (void); +extern void emit_insn_at_entry (rtx); extern void delete_insn_chain (rtx, rtx); extern rtx unlink_insn_chain (rtx, rtx); extern rtx delete_insn_and_edges (rtx); @@ -1976,11 +2082,16 @@ extern rtx remove_death (unsigned int, rtx); extern void dump_combine_stats (FILE *); extern void dump_combine_total_stats (FILE *); +/* In sched-vis.c. */ +extern void print_rtl_slim_with_bb (FILE *, rtx, int); +extern void dump_insn_slim (FILE *f, rtx x); +extern void debug_insn_slim (rtx x); + /* In sched-rgn.c. */ -extern void schedule_insns (FILE *); +extern void schedule_insns (void); /* In sched-ebb.c. */ -extern void schedule_ebbs (FILE *); +extern void schedule_ebbs (void); /* In haifa-sched.c. */ extern void fix_sched_param (const char *, const char *); @@ -1997,9 +2108,6 @@ extern void print_simple_rtl (FILE *, rtx); extern int print_rtl_single (FILE *, rtx); extern void print_inline_rtx (FILE *, rtx, int); -/* In loop.c */ -extern void init_loop (void); - /* In bt-load.c */ extern void branch_target_load_optimize (bool); @@ -2021,10 +2129,9 @@ extern rtx move_by_pieces (rtx, rtx, unsigned HOST_WIDE_INT, unsigned int, int); /* In flow.c */ -extern void recompute_reg_usage (void); extern void delete_dead_jumptables (void); extern void print_rtl_with_bb (FILE *, rtx); -extern void dump_flow_info (FILE *); +extern void dump_flow_info (FILE *, int); /* In expmed.c */ extern void init_expmed (void); @@ -2053,9 +2160,8 @@ extern void init_regs (void); extern void init_fake_stack_mems (void); extern void init_reg_sets (void); extern void regclass_init (void); -extern void regclass (rtx, int, FILE *); +extern void regclass (rtx, int); extern void reg_scan (rtx, unsigned int); -extern void reg_scan_update (rtx, rtx, unsigned int); extern void fix_register (const char *, int, int); extern void init_subregs_of_mode (void); extern void record_subregs_of_mode (rtx); @@ -2067,7 +2173,7 @@ extern bool invalid_mode_change_p (unsigned int, enum reg_class, enum machine_mode); /* In reorg.c */ -extern void dbr_schedule (rtx, FILE *); +extern void dbr_schedule (rtx); /* In local-alloc.c */ extern void dump_local_alloc (FILE *); @@ -2121,7 +2227,6 @@ extern int canon_true_dependence (rtx, enum machine_mode, rtx, rtx, extern int read_dependence (rtx, rtx); extern int anti_dependence (rtx, rtx); extern int output_dependence (rtx, rtx); -extern void mark_constant_function (void); extern void init_alias_once (void); extern void init_alias_analysis (void); extern void end_alias_analysis (void); @@ -2141,11 +2246,13 @@ extern GTY(()) rtx stack_limit_rtx; /* In predict.c */ extern void invert_br_probabilities (rtx); extern bool expensive_function_p (int); +/* In cfgexpand.c */ +extern void add_reg_br_prob_note (rtx last, int probability); /* In tracer.c */ extern void tracer (unsigned int); /* In var-tracking.c */ -extern void variable_tracking_main (void); +extern unsigned int variable_tracking_main (void); /* In stor-layout.c. */ extern void get_mode_bounds (enum machine_mode, int, enum machine_mode, @@ -2158,9 +2265,6 @@ extern rtx compare_and_jump_seq (rtx, rtx, enum rtx_code, rtx, int, rtx); /* In loop-iv.c */ extern rtx canon_condition (rtx); extern void simplify_using_condition (rtx, rtx *, struct bitmap_head_def *); - -/* In ra.c. */ -extern void reg_alloc (void); struct rtl_hooks { @@ -2170,8 +2274,9 @@ struct rtl_hooks unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT *); rtx (*reg_num_sign_bit_copies) (rtx, enum machine_mode, rtx, enum machine_mode, unsigned int, unsigned int *); + bool (*reg_truncated_to_mode) (enum machine_mode, rtx); - /* Whenever you add entries here, make sure you adjust hosthooks-def.h. */ + /* Whenever you add entries here, make sure you adjust rtlhooks-def.h. */ }; /* Each pass can provide its own. */