X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Frtl.h;h=604d09678952007aa80bb97edca78d4b3129c799;hp=734cd87dffd5be746391f007071c3dd821d670d5;hb=9a5e2a74356e5a43623c64af454771774cdabad7;hpb=9f627b1adf36cc4e91bd313e69193f83ed298c20 diff --git a/gcc/rtl.h b/gcc/rtl.h index 734cd87dffd..604d0967895 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, 2006, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GCC. @@ -149,7 +149,11 @@ typedef struct mem_attrs GTY(()) } mem_attrs; /* Structure used to describe the attributes of a REG in similar way as - mem_attrs does for MEM above. */ + mem_attrs does for MEM above. Note that the OFFSET field is calculated + in the same way as for mem_attrs, rather than in the same way as a + SUBREG_BYTE. For example, if a big-endian target stores a byte + object in the low part of a 4-byte register, the OFFSET field + will be -3 rather than 0. */ typedef struct reg_attrs GTY(()) { @@ -265,7 +269,8 @@ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"), 1 in a REG expression if corresponds to a variable declared by the user, 0 for an internally generated temporary. 1 in a SUBREG with a negative value. - 1 in a LABEL_REF or in a REG_LABEL note for a non-local label. + 1 in a LABEL_REF, REG_LABEL_TARGET or REG_LABEL_OPERAND note for a + non-local label. In a SYMBOL_REF, this flag is used for machine-specific purposes. */ unsigned int volatil : 1; /* 1 in a MEM referring to a field of an aggregate. @@ -533,7 +538,7 @@ struct rtvec_def GTY(()) { &_rtx->u.rv; }) #define XCNMPFV(RTX, C, M) __extension__ \ -({ rtx const _rtx = (RTX); \ +({ __typeof (RTX) const _rtx = (RTX); \ if (GET_CODE (_rtx) != (C) || GET_MODE (_rtx) == (M)) \ rtl_check_failed_code_mode (_rtx, (C), (M), true, __FILE__, \ __LINE__, __FUNCTION__); \ @@ -1062,6 +1067,7 @@ extern bool subreg_offset_representable_p (unsigned int, enum machine_mode, unsigned int, enum machine_mode); extern unsigned int subreg_regno (const_rtx); extern unsigned int subreg_nregs (const_rtx); +extern unsigned int subreg_nregs_with_regno (unsigned int, const_rtx); extern unsigned HOST_WIDE_INT nonzero_bits (const_rtx, enum machine_mode); extern unsigned int num_sign_bit_copies (const_rtx, enum machine_mode); extern bool constant_pool_constant_p (rtx); @@ -1108,15 +1114,8 @@ do { \ XSTR (XCVECEXP (RTX, 4, N, ASM_OPERANDS), 0) #define ASM_OPERANDS_INPUT_MODE(RTX, N) \ GET_MODE (XCVECEXP (RTX, 4, N, ASM_OPERANDS)) -#ifdef USE_MAPPED_LOCATION #define ASM_OPERANDS_SOURCE_LOCATION(RTX) XCUINT (RTX, 5, ASM_OPERANDS) #define ASM_INPUT_SOURCE_LOCATION(RTX) XCUINT (RTX, 1, ASM_INPUT) -#else -#define ASM_OPERANDS_SOURCE_FILE(RTX) XCSTR (RTX, 5, ASM_OPERANDS) -#define ASM_OPERANDS_SOURCE_LINE(RTX) XCINT (RTX, 6, ASM_OPERANDS) -#define ASM_INPUT_SOURCE_FILE(RTX) XCSTR (RTX, 1, ASM_INPUT) -#define ASM_INPUT_SOURCE_LINE(RTX) XCINT (RTX, 2, ASM_INPUT) -#endif /* 1 if RTX is a mem that is statically allocated in read-only memory. */ #define MEM_READONLY_P(RTX) \ @@ -1208,8 +1207,8 @@ do { \ refer to part of a DECL. */ #define REG_EXPR(RTX) (REG_ATTRS (RTX) == 0 ? 0 : REG_ATTRS (RTX)->decl) -/* For a MEM rtx, the offset from the start of MEM_DECL, if known, as a - RTX that is always a CONST_INT. */ +/* For a REG rtx, the offset from the start of REG_EXPR, if known, as an + HOST_WIDE_INT. */ #define REG_OFFSET(RTX) (REG_ATTRS (RTX) == 0 ? 0 : REG_ATTRS (RTX)->offset) /* Copy the attributes that apply to memory locations from RHS to LHS. */ @@ -1224,10 +1223,11 @@ do { \ MEM_ATTRS (LHS) = MEM_ATTRS (RHS)) /* 1 if RTX is a label_ref for a nonlocal label. */ -/* Likewise in an expr_list for a reg_label note. */ +/* Likewise in an expr_list for a REG_LABEL_OPERAND or + REG_LABEL_TARGET note. */ #define LABEL_REF_NONLOCAL_P(RTX) \ - (RTL_FLAG_CHECK2("LABEL_REF_NONLOCAL_P", (RTX), LABEL_REF, \ - REG_LABEL)->volatil) + (RTL_FLAG_CHECK3("LABEL_REF_NONLOCAL_P", (RTX), LABEL_REF, \ + REG_LABEL_OPERAND, REG_LABEL_TARGET)->volatil) /* 1 if RTX is a code_label that should always be considered to be needed. */ #define LABEL_PRESERVE_P(RTX) \ @@ -1473,9 +1473,10 @@ extern rtx copy_insn_1 (rtx); extern rtx copy_insn (rtx); extern rtx gen_int_mode (HOST_WIDE_INT, enum machine_mode); extern rtx emit_copy_of_insn_after (rtx, rtx); -extern void set_reg_attrs_from_mem (rtx, rtx); +extern void set_reg_attrs_from_value (rtx, rtx); extern void set_mem_attrs_from_reg (rtx, rtx); extern void set_reg_attrs_for_parm (rtx, rtx); +extern void adjust_reg_mode (rtx, enum machine_mode); extern int mem_expr_equal_p (const_tree, const_tree); /* In rtl.c */ @@ -1519,6 +1520,7 @@ extern unsigned int subreg_lowpart_offset (enum machine_mode, enum machine_mode); extern unsigned int subreg_highpart_offset (enum machine_mode, enum machine_mode); +extern int byte_lowpart_offset (enum machine_mode, enum machine_mode); extern rtx make_safe_from (rtx, rtx); extern rtx convert_memory_address (enum machine_mode, rtx); extern rtx get_insns (void); @@ -1708,9 +1710,9 @@ extern int reg_used_between_p (const_rtx, const_rtx, const_rtx); extern int reg_set_between_p (const_rtx, const_rtx, const_rtx); extern int commutative_operand_precedence (rtx); extern bool swap_commutative_operands_p (rtx, rtx); -extern int modified_between_p (rtx, rtx, rtx); +extern int modified_between_p (const_rtx, const_rtx, const_rtx); extern int no_labels_between_p (const_rtx, const_rtx); -extern int modified_in_p (rtx, rtx); +extern int modified_in_p (const_rtx, const_rtx); extern int reg_set_p (const_rtx, const_rtx); extern rtx single_set_2 (const_rtx, const_rtx); extern int multiple_sets (const_rtx); @@ -1736,6 +1738,7 @@ extern void remove_reg_equal_equiv_notes (rtx); extern int side_effects_p (const_rtx); extern int volatile_refs_p (const_rtx); extern int volatile_insn_p (const_rtx); +extern int may_trap_p_1 (const_rtx, unsigned); extern int may_trap_p (const_rtx); extern int may_trap_after_code_motion_p (const_rtx); extern int may_trap_or_fault_p (const_rtx); @@ -1753,7 +1756,7 @@ extern int in_expr_list_p (const_rtx, const_rtx); extern void remove_node_from_expr_list (const_rtx, rtx *); extern int loc_mentioned_in_p (rtx *, const_rtx); extern rtx find_first_parameter_load (rtx, rtx); -extern bool keep_with_call_p (rtx); +extern bool keep_with_call_p (const_rtx); extern bool label_is_jump_target_p (const_rtx, const_rtx); extern int insn_rtx_cost (rtx); @@ -1882,20 +1885,10 @@ extern GTY(()) rtx return_address_pointer_rtx; #ifndef GENERATOR_FILE #include "genrtl.h" #undef gen_rtx_ASM_INPUT -#ifdef USE_MAPPED_LOCATION #define gen_rtx_ASM_INPUT(MODE, ARG0) \ gen_rtx_fmt_si (ASM_INPUT, (MODE), (ARG0), 0) #define gen_rtx_ASM_INPUT_loc(MODE, ARG0, LOC) \ gen_rtx_fmt_si (ASM_INPUT, (MODE), (ARG0), (LOC)) -#else -#define gen_rtx_ASM_INPUT(MODE, ARG0) \ - gen_rtx_fmt_ssi (ASM_INPUT, (MODE), (ARG0), "", 0) -#define gen_rtx_ASM_INPUT_loc(MODE, ARG0, LOC) \ - gen_rtx_fmt_ssi (ASM_INPUT, (MODE), (ARG0), (LOC).file, (LOC).line) -#undef gen_rtx_ASM_OPERANDS -#define gen_rtx_ASM_OPERANDS(MODE, ARG0, ARG1, ARG2, ARG3, ARG4, LOC) \ - gen_rtx_fmt_ssiEEsi (ASM_OPERANDS, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (LOC).file, (LOC).line) -#endif #endif /* There are some RTL codes that require special attention; the @@ -2028,7 +2021,7 @@ extern int condjump_p (const_rtx); extern int any_condjump_p (const_rtx); extern int any_uncondjump_p (const_rtx); extern rtx pc_set (const_rtx); -extern rtx condjump_label (rtx); +extern rtx condjump_label (const_rtx); extern int simplejump_p (const_rtx); extern int returnjump_p (rtx); extern int onlyjump_p (const_rtx); @@ -2043,10 +2036,10 @@ extern int redirect_jump_1 (rtx, rtx); extern void redirect_jump_2 (rtx, rtx, rtx, int, int); extern int redirect_jump (rtx, rtx, int); extern void rebuild_jump_labels (rtx); -extern rtx reversed_comparison (rtx, enum machine_mode); -extern enum rtx_code reversed_comparison_code (rtx, rtx); -extern enum rtx_code reversed_comparison_code_parts (enum rtx_code, rtx, - rtx, rtx); +extern rtx reversed_comparison (const_rtx, enum machine_mode); +extern enum rtx_code reversed_comparison_code (const_rtx, const_rtx); +extern enum rtx_code reversed_comparison_code_parts (enum rtx_code, const_rtx, + const_rtx, const_rtx); extern void delete_for_peephole (rtx, rtx); extern int condjump_in_parallel_p (const_rtx); @@ -2066,6 +2059,7 @@ extern int get_max_uid (void); extern int in_sequence_p (void); extern void force_next_line_note (void); extern void init_emit (void); +extern void init_emit_regs (void); extern void init_emit_once (int); extern void push_topmost_sequence (void); extern void pop_topmost_sequence (void); @@ -2088,6 +2082,7 @@ extern void emit_insn_at_entry (rtx); extern void delete_insn_chain (rtx, rtx, bool); extern rtx unlink_insn_chain (rtx, rtx); extern rtx delete_insn_and_edges (rtx); +extern void delete_insn_chain_and_edges (rtx, rtx); extern rtx gen_lowpart_SUBREG (enum machine_mode, rtx); extern rtx gen_const_mem (enum machine_mode, rtx); extern rtx gen_frame_mem (enum machine_mode, rtx); @@ -2105,6 +2100,7 @@ extern void dump_combine_total_stats (FILE *); extern void delete_dead_jumptables (void); /* In sched-vis.c. */ +extern void print_insn (char *, rtx, int); 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); @@ -2169,15 +2165,15 @@ extern void dump_global_regs (FILE *); /* Yes, this ifdef is silly, but HARD_REG_SET is not always defined. */ extern void retry_global_alloc (int, HARD_REG_SET); #endif -extern void build_insn_chain (rtx); /* In regclass.c */ extern int reg_classes_intersect_p (enum reg_class, enum reg_class); extern int reg_class_subset_p (enum reg_class, enum reg_class); extern void globalize_reg (int); -extern void init_reg_modes_once (void); +extern void init_reg_modes_target (void); extern void init_regs (void); extern void init_fake_stack_mems (void); +extern void save_register_info (void); extern void init_reg_sets (void); extern void regclass (rtx, int); extern void reg_scan (rtx, unsigned int); @@ -2243,17 +2239,17 @@ extern int canon_true_dependence (const_rtx, enum machine_mode, rtx, const_rtx, extern int read_dependence (const_rtx, const_rtx); extern int anti_dependence (const_rtx, const_rtx); extern int output_dependence (const_rtx, const_rtx); -extern void init_alias_once (void); +extern void init_alias_target (void); extern void init_alias_analysis (void); extern void end_alias_analysis (void); -extern bool memory_modified_in_insn_p (rtx, rtx); +extern bool memory_modified_in_insn_p (const_rtx, const_rtx); extern rtx find_base_term (rtx); extern rtx gen_hard_reg_clobber (enum machine_mode, unsigned int); extern rtx get_reg_known_value (unsigned int); extern bool get_reg_known_equiv_p (unsigned int); #ifdef STACK_REGS -extern int stack_regs_mentioned (rtx insn); +extern int stack_regs_mentioned (const_rtx insn); #endif /* In toplev.c */ @@ -2264,8 +2260,6 @@ 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 (void); /* In var-tracking.c */ extern unsigned int variable_tracking_main (void);