| Index: gcc/gcc/rtl.h
|
| diff --git a/gcc/gcc/rtl.h b/gcc/gcc/rtl.h
|
| index 838146bdecc5fd1ff404d0339cd29311fa51abe6..b8563b33d16fd6b1e735baf2802e8da956f0a740 100644
|
| --- a/gcc/gcc/rtl.h
|
| +++ b/gcc/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, 2008, 2009
|
| + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
| Free Software Foundation, Inc.
|
|
|
| This file is part of GCC.
|
| @@ -139,13 +139,14 @@ typedef struct
|
| /* ALIGN and SIZE are the alignment and size of the MEM itself,
|
| while EXPR can describe a larger underlying object, which might have a
|
| stricter alignment; OFFSET is the offset of the MEM within that object. */
|
| -typedef struct mem_attrs GTY(())
|
| +typedef struct GTY(()) mem_attrs
|
| {
|
| tree expr; /* expr corresponding to MEM. */
|
| rtx offset; /* Offset from start of DECL, as CONST_INT. */
|
| rtx size; /* Size in bytes, as a CONST_INT. */
|
| alias_set_type alias; /* Memory alias set. */
|
| unsigned int align; /* Alignment of MEM in bits. */
|
| + unsigned char addrspace; /* Address space (0 for generic). */
|
| } mem_attrs;
|
|
|
| /* Structure used to describe the attributes of a REG in similar way as
|
| @@ -155,8 +156,7 @@ typedef struct mem_attrs GTY(())
|
| object in the low part of a 4-byte register, the OFFSET field
|
| will be -3 rather than 0. */
|
|
|
| -typedef struct reg_attrs GTY(())
|
| -{
|
| +typedef struct GTY(()) reg_attrs {
|
| tree decl; /* decl corresponding to REG. */
|
| HOST_WIDE_INT offset; /* Offset from start of DECL. */
|
| } reg_attrs;
|
| @@ -185,7 +185,7 @@ 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(()) {
|
| +struct GTY(()) block_symbol {
|
| /* The usual SYMBOL_REF fields. */
|
| rtunion GTY ((skip)) fld[3];
|
|
|
| @@ -203,8 +203,7 @@ 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(())
|
| -{
|
| +struct GTY(()) object_block {
|
| /* The section in which these objects should be placed. */
|
| section *sect;
|
|
|
| @@ -237,9 +236,8 @@ struct object_block GTY(())
|
|
|
| /* RTL expression ("rtx"). */
|
|
|
| -struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"),
|
| - chain_prev ("RTX_PREV (&%h)")))
|
| -{
|
| +struct GTY((chain_next ("RTX_NEXT (&%h)"),
|
| + chain_prev ("RTX_PREV (&%h)"))) rtx_def {
|
| /* The kind of expression this is. */
|
| ENUM_BITFIELD(rtx_code) code: 16;
|
|
|
| @@ -253,16 +251,15 @@ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"),
|
| In a CODE_LABEL, part of the two-bit alternate entry field. */
|
| unsigned int jump : 1;
|
| /* In a CODE_LABEL, part of the two-bit alternate entry field.
|
| - 1 in a MEM if it cannot trap.
|
| + 1 in a MEM if it cannot trap.
|
| 1 in a CALL_INSN logically equivalent to
|
| ECF_LOOPING_CONST_OR_PURE and DECL_LOOPING_CONST_OR_PURE_P. */
|
| unsigned int call : 1;
|
| /* 1 in a REG, MEM, or CONCAT if the value is set at most once, anywhere.
|
| - 1 in a SUBREG if it references an unsigned object whose mode has been
|
| - from a promoted to a wider mode.
|
| + 1 in a SUBREG used for SUBREG_PROMOTED_UNSIGNED_P.
|
| 1 in a SYMBOL_REF if it addresses something in the per-function
|
| constants pool.
|
| - 1 in a CALL_INSN logically equivalent to ECF_CONST and TREE_READONLY.
|
| + 1 in a CALL_INSN logically equivalent to ECF_CONST and TREE_READONLY.
|
| 1 in a NOTE, or EXPR_LIST for a const call.
|
| 1 in a JUMP_INSN, CALL_INSN, or INSN of an annulling branch. */
|
| unsigned int unchanging : 1;
|
| @@ -271,10 +268,12 @@ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"),
|
| if it has been deleted.
|
| 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 SUBREG used for SUBREG_PROMOTED_UNSIGNED_P.
|
| 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. */
|
| + In a SYMBOL_REF, this flag is used for machine-specific purposes.
|
| + In a PREFETCH, this flag indicates that it should be considered a scheduling
|
| + barrier. */
|
| unsigned int volatil : 1;
|
| /* 1 in a MEM referring to a field of an aggregate.
|
| 0 if the MEM was a variable or the result of a * operator in C;
|
| @@ -306,8 +305,8 @@ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"),
|
| unsigned frame_related : 1;
|
| /* 1 in a REG or PARALLEL that is the current function's return value.
|
| 1 in a MEM if it refers to a scalar.
|
| - 1 in a SYMBOL_REF for a weak symbol.
|
| - 1 in a CALL_INSN logically equivalent to ECF_PURE and DECL_PURE_P. */
|
| + 1 in a SYMBOL_REF for a weak symbol.
|
| + 1 in a CALL_INSN logically equivalent to ECF_PURE and DECL_PURE_P. */
|
| unsigned return_val : 1;
|
|
|
| /* The first element of the operands of this rtx.
|
| @@ -357,7 +356,7 @@ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"),
|
| for a variable number of things. The principle use is inside
|
| PARALLEL expressions. */
|
|
|
| -struct rtvec_def GTY(()) {
|
| +struct GTY(()) rtvec_def {
|
| int num_elem; /* number of elements */
|
| rtx GTY ((length ("%h.num_elem"))) elem[1];
|
| };
|
| @@ -388,9 +387,18 @@ struct rtvec_def GTY(()) {
|
| /* Predicate yielding nonzero iff X is an insn that cannot jump. */
|
| #define NONJUMP_INSN_P(X) (GET_CODE (X) == INSN)
|
|
|
| +/* Predicate yielding nonzero iff X is a debug note/insn. */
|
| +#define DEBUG_INSN_P(X) (GET_CODE (X) == DEBUG_INSN)
|
| +
|
| +/* Predicate yielding nonzero iff X is an insn that is not a debug insn. */
|
| +#define NONDEBUG_INSN_P(X) (INSN_P (X) && !DEBUG_INSN_P (X))
|
| +
|
| +/* Nonzero if DEBUG_INSN_P may possibly hold. */
|
| +#define MAY_HAVE_DEBUG_INSNS MAY_HAVE_DEBUG_STMTS
|
| +
|
| /* Predicate yielding nonzero iff X is a real insn. */
|
| #define INSN_P(X) \
|
| - (NONJUMP_INSN_P (X) || JUMP_P (X) || CALL_P (X))
|
| + (NONJUMP_INSN_P (X) || DEBUG_INSN_P (X) || JUMP_P (X) || CALL_P (X))
|
|
|
| /* Predicate yielding nonzero iff X is a note insn. */
|
| #define NOTE_P(X) (GET_CODE (X) == NOTE)
|
| @@ -753,6 +761,12 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *,
|
|
|
| #define BLOCK_FOR_INSN(INSN) XBBDEF (INSN, 3)
|
| #define INSN_LOCATOR(INSN) XINT (INSN, 4)
|
| +/* LOCATION of an RTX if relevant. */
|
| +#define RTL_LOCATION(X) (INSN_P (X) ? \
|
| + locator_location (INSN_LOCATOR (X)) \
|
| + : UNKNOWN_LOCATION)
|
| +/* LOCATION of current INSN. */
|
| +#define CURR_INSN_LOCATION (locator_location (curr_insn_locator ()))
|
| /* The body of an insn. */
|
| #define PATTERN(INSN) XEXP (INSN, 5)
|
|
|
| @@ -761,12 +775,13 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *,
|
| #define INSN_CODE(INSN) XINT (INSN, 6)
|
|
|
| #define RTX_FRAME_RELATED_P(RTX) \
|
| - (RTL_FLAG_CHECK5("RTX_FRAME_RELATED_P", (RTX), INSN, CALL_INSN, \
|
| - JUMP_INSN, BARRIER, SET)->frame_related)
|
| + (RTL_FLAG_CHECK6("RTX_FRAME_RELATED_P", (RTX), DEBUG_INSN, INSN, \
|
| + CALL_INSN, JUMP_INSN, BARRIER, SET)->frame_related)
|
|
|
| /* 1 if RTX is an insn that has been deleted. */
|
| #define INSN_DELETED_P(RTX) \
|
| - (RTL_FLAG_CHECK6("INSN_DELETED_P", (RTX), INSN, CALL_INSN, JUMP_INSN, \
|
| + (RTL_FLAG_CHECK7("INSN_DELETED_P", (RTX), DEBUG_INSN, INSN, \
|
| + CALL_INSN, JUMP_INSN, \
|
| CODE_LABEL, BARRIER, NOTE)->volatil)
|
|
|
| /* 1 if RTX is a call to a const function. Built from ECF_CONST and
|
| @@ -875,16 +890,49 @@ extern const char * const reg_note_name[];
|
| && NOTE_KIND (INSN) == NOTE_INSN_BASIC_BLOCK)
|
|
|
| /* Variable declaration and the location of a variable. */
|
| -#define NOTE_VAR_LOCATION_DECL(INSN) (XCTREE (XCEXP (INSN, 4, NOTE), \
|
| - 0, VAR_LOCATION))
|
| -#define NOTE_VAR_LOCATION_LOC(INSN) (XCEXP (XCEXP (INSN, 4, NOTE), \
|
| - 1, VAR_LOCATION))
|
| +#define PAT_VAR_LOCATION_DECL(PAT) (XCTREE ((PAT), 0, VAR_LOCATION))
|
| +#define PAT_VAR_LOCATION_LOC(PAT) (XCEXP ((PAT), 1, VAR_LOCATION))
|
|
|
| /* Initialization status of the variable in the location. Status
|
| can be unknown, uninitialized or initialized. See enumeration
|
| type below. */
|
| -#define NOTE_VAR_LOCATION_STATUS(INSN) (XCINT (XCEXP (INSN, 4, NOTE), \
|
| - 2, VAR_LOCATION))
|
| +#define PAT_VAR_LOCATION_STATUS(PAT) \
|
| + ((enum var_init_status) (XCINT ((PAT), 2, VAR_LOCATION)))
|
| +
|
| +/* Accessors for a NOTE_INSN_VAR_LOCATION. */
|
| +#define NOTE_VAR_LOCATION_DECL(NOTE) \
|
| + PAT_VAR_LOCATION_DECL (NOTE_VAR_LOCATION (NOTE))
|
| +#define NOTE_VAR_LOCATION_LOC(NOTE) \
|
| + PAT_VAR_LOCATION_LOC (NOTE_VAR_LOCATION (NOTE))
|
| +#define NOTE_VAR_LOCATION_STATUS(NOTE) \
|
| + PAT_VAR_LOCATION_STATUS (NOTE_VAR_LOCATION (NOTE))
|
| +
|
| +/* The VAR_LOCATION rtx in a DEBUG_INSN. */
|
| +#define INSN_VAR_LOCATION(INSN) PATTERN (INSN)
|
| +
|
| +/* Accessors for a tree-expanded var location debug insn. */
|
| +#define INSN_VAR_LOCATION_DECL(INSN) \
|
| + PAT_VAR_LOCATION_DECL (INSN_VAR_LOCATION (INSN))
|
| +#define INSN_VAR_LOCATION_LOC(INSN) \
|
| + PAT_VAR_LOCATION_LOC (INSN_VAR_LOCATION (INSN))
|
| +#define INSN_VAR_LOCATION_STATUS(INSN) \
|
| + PAT_VAR_LOCATION_STATUS (INSN_VAR_LOCATION (INSN))
|
| +
|
| +/* Expand to the RTL that denotes an unknown variable location in a
|
| + DEBUG_INSN. */
|
| +#define gen_rtx_UNKNOWN_VAR_LOC() (gen_rtx_CLOBBER (VOIDmode, const0_rtx))
|
| +
|
| +/* Determine whether X is such an unknown location. */
|
| +#define VAR_LOC_UNKNOWN_P(X) \
|
| + (GET_CODE (X) == CLOBBER && XEXP ((X), 0) == const0_rtx)
|
| +
|
| +/* 1 if RTX is emitted after a call, but it should take effect before
|
| + the call returns. */
|
| +#define NOTE_DURING_CALL_P(RTX) \
|
| + (RTL_FLAG_CHECK1("NOTE_VAR_LOCATION_DURING_CALL_P", (RTX), NOTE)->call)
|
| +
|
| +/* DEBUG_EXPR_DECL corresponding to a DEBUG_EXPR RTX. */
|
| +#define DEBUG_EXPR_TREE_DECL(RTX) XCTREE (RTX, 0, DEBUG_EXPR)
|
|
|
| /* Possible initialization status of a variable. When requested
|
| by the user, this information is tracked and recorded in the DWARF
|
| @@ -898,7 +946,7 @@ enum var_init_status
|
|
|
| /* Codes that appear in the NOTE_KIND field for kinds of notes
|
| that are not line numbers. These codes are all negative.
|
| -
|
| +
|
| Notice that we do not try to use zero here for any of
|
| the special note codes because sometimes the source line
|
| actually can be zero! This happens (for example) when we
|
| @@ -1075,7 +1123,7 @@ rhs_regno (const_rtx x)
|
|
|
| extern void init_rtlanal (void);
|
| extern int rtx_cost (rtx, enum rtx_code, bool);
|
| -extern int address_cost (rtx, enum machine_mode, bool);
|
| +extern int address_cost (rtx, enum machine_mode, addr_space_t, bool);
|
| extern unsigned int subreg_lsb (const_rtx);
|
| extern unsigned int subreg_lsb_1 (enum machine_mode, enum machine_mode,
|
| unsigned int);
|
| @@ -1092,6 +1140,7 @@ 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);
|
| extern bool truncated_to_mode (enum machine_mode, const_rtx);
|
| +extern int low_bitmask_len (enum machine_mode, unsigned HOST_WIDE_INT);
|
|
|
|
|
| /* 1 if RTX is a subreg containing a reg that is already known to be
|
| @@ -1115,9 +1164,18 @@ do { \
|
| _rtx->unchanging = (VAL); \
|
| } \
|
| } while (0)
|
| +
|
| +/* Valid for subregs which are SUBREG_PROMOTED_VAR_P(). In that case
|
| + this gives the necessary extensions:
|
| + 0 - signed
|
| + 1 - normal unsigned
|
| + -1 - pointer unsigned, which most often can be handled like unsigned
|
| + extension, except for generating instructions where we need to
|
| + emit special code (ptr_extend insns) on some architectures. */
|
| +
|
| #define SUBREG_PROMOTED_UNSIGNED_P(RTX) \
|
| ((RTL_FLAG_CHECK1("SUBREG_PROMOTED_UNSIGNED_P", (RTX), SUBREG)->volatil) \
|
| - ? -1 : (RTX)->unchanging)
|
| + ? -1 : (int) (RTX)->unchanging)
|
|
|
| /* Access various components of an ASM_OPERANDS rtx. */
|
|
|
| @@ -1134,7 +1192,10 @@ do { \
|
| XSTR (XCVECEXP (RTX, 4, N, ASM_OPERANDS), 0)
|
| #define ASM_OPERANDS_INPUT_MODE(RTX, N) \
|
| GET_MODE (XCVECEXP (RTX, 4, N, ASM_OPERANDS))
|
| -#define ASM_OPERANDS_SOURCE_LOCATION(RTX) XCUINT (RTX, 5, ASM_OPERANDS)
|
| +#define ASM_OPERANDS_LABEL_VEC(RTX) XCVEC (RTX, 5, ASM_OPERANDS)
|
| +#define ASM_OPERANDS_LABEL_LENGTH(RTX) XCVECLEN (RTX, 5, ASM_OPERANDS)
|
| +#define ASM_OPERANDS_LABEL(RTX, N) XCVECEXP (RTX, 5, N, ASM_OPERANDS)
|
| +#define ASM_OPERANDS_SOURCE_LOCATION(RTX) XCUINT (RTX, 6, ASM_OPERANDS)
|
| #define ASM_INPUT_SOURCE_LOCATION(RTX) XCUINT (RTX, 1, ASM_INPUT)
|
|
|
| /* 1 if RTX is a mem that is statically allocated in read-only memory. */
|
| @@ -1209,6 +1270,10 @@ do { \
|
| RTX that is always a CONST_INT. */
|
| #define MEM_OFFSET(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->offset)
|
|
|
| +/* For a MEM rtx, the address space. */
|
| +#define MEM_ADDR_SPACE(RTX) (MEM_ATTRS (RTX) == 0 ? ADDR_SPACE_GENERIC \
|
| + : MEM_ATTRS (RTX)->addrspace)
|
| +
|
| /* For a MEM rtx, the size in bytes of the MEM, if known, as an RTX that
|
| is always a CONST_INT. */
|
| #define MEM_SIZE(RTX) \
|
| @@ -1255,8 +1320,9 @@ do { \
|
| /* During sched, 1 if RTX is an insn that must be scheduled together
|
| with the preceding insn. */
|
| #define SCHED_GROUP_P(RTX) \
|
| - (RTL_FLAG_CHECK3("SCHED_GROUP_P", (RTX), INSN, JUMP_INSN, CALL_INSN \
|
| - )->in_struct)
|
| + (RTL_FLAG_CHECK4("SCHED_GROUP_P", (RTX), DEBUG_INSN, INSN, \
|
| + JUMP_INSN, CALL_INSN \
|
| + )->in_struct)
|
|
|
| /* For a SET rtx, SET_DEST is the place that is set
|
| and SET_SRC is the value it is set to. */
|
| @@ -1378,6 +1444,10 @@ do { \
|
| offset within that block. */
|
| #define SYMBOL_REF_BLOCK_OFFSET(RTX) (BLOCK_SYMBOL_CHECK (RTX)->offset)
|
|
|
| +/* True if RTX is flagged to be a scheduling barrier. */
|
| +#define PREFETCH_SCHEDULE_BARRIER_P(RTX) \
|
| + (RTL_FLAG_CHECK1("PREFETCH_SCHEDULE_BARRIER_P", (RTX), PREFETCH)->volatil)
|
| +
|
| /* Indicate whether the machine has any sort of auto increment addressing.
|
| If not, we can avoid checking for REG_INC notes. */
|
|
|
| @@ -1493,8 +1563,8 @@ 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_value (rtx, rtx);
|
| -extern void set_mem_attrs_from_reg (rtx, rtx);
|
| extern void set_reg_attrs_for_parm (rtx, rtx);
|
| +extern void set_reg_attrs_for_decl_rtl (tree t, rtx x);
|
| extern void adjust_reg_mode (rtx, enum machine_mode);
|
| extern int mem_expr_equal_p (const_tree, const_tree);
|
|
|
| @@ -1503,6 +1573,7 @@ extern rtx rtx_alloc_stat (RTX_CODE MEM_STAT_DECL);
|
| #define rtx_alloc(c) rtx_alloc_stat (c MEM_STAT_INFO)
|
|
|
| extern rtvec rtvec_alloc (int);
|
| +extern rtvec shallow_copy_rtvec (rtvec);
|
| extern bool shared_const_p (const_rtx);
|
| extern rtx copy_rtx (rtx);
|
| extern void dump_rtx_statistics (void);
|
| @@ -1542,7 +1613,10 @@ 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 convert_memory_address_addr_space (enum machine_mode, rtx,
|
| + addr_space_t);
|
| +#define convert_memory_address(to_mode,x) \
|
| + convert_memory_address_addr_space ((to_mode), (x), ADDR_SPACE_GENERIC)
|
| extern rtx get_insns (void);
|
| extern const char *get_insn_name (int);
|
| extern rtx get_last_insn (void);
|
| @@ -1589,6 +1663,9 @@ extern rtx emit_jump_insn_before_setloc (rtx, rtx, int);
|
| extern rtx emit_call_insn_before (rtx, rtx);
|
| extern rtx emit_call_insn_before_noloc (rtx, rtx);
|
| extern rtx emit_call_insn_before_setloc (rtx, rtx, int);
|
| +extern rtx emit_debug_insn_before (rtx, rtx);
|
| +extern rtx emit_debug_insn_before_noloc (rtx, rtx);
|
| +extern rtx emit_debug_insn_before_setloc (rtx, rtx, int);
|
| extern rtx emit_barrier_before (rtx);
|
| extern rtx emit_label_before (rtx, rtx);
|
| extern rtx emit_note_before (enum insn_note, rtx);
|
| @@ -1601,10 +1678,14 @@ extern rtx emit_jump_insn_after_setloc (rtx, rtx, int);
|
| extern rtx emit_call_insn_after (rtx, rtx);
|
| extern rtx emit_call_insn_after_noloc (rtx, rtx);
|
| extern rtx emit_call_insn_after_setloc (rtx, rtx, int);
|
| +extern rtx emit_debug_insn_after (rtx, rtx);
|
| +extern rtx emit_debug_insn_after_noloc (rtx, rtx);
|
| +extern rtx emit_debug_insn_after_setloc (rtx, rtx, int);
|
| extern rtx emit_barrier_after (rtx);
|
| extern rtx emit_label_after (rtx, rtx);
|
| extern rtx emit_note_after (enum insn_note, rtx);
|
| extern rtx emit_insn (rtx);
|
| +extern rtx emit_debug_insn (rtx);
|
| extern rtx emit_jump_insn (rtx);
|
| extern rtx emit_call_insn (rtx);
|
| extern rtx emit_label (rtx);
|
| @@ -1616,13 +1697,18 @@ extern rtx emit_clobber (rtx);
|
| extern rtx gen_use (rtx);
|
| extern rtx emit_use (rtx);
|
| extern rtx make_insn_raw (rtx);
|
| +extern rtx make_debug_insn_raw (rtx);
|
| extern rtx make_jump_insn_raw (rtx);
|
| extern void add_function_usage_to (rtx, rtx);
|
| extern rtx last_call_insn (void);
|
| extern rtx previous_insn (rtx);
|
| extern rtx next_insn (rtx);
|
| extern rtx prev_nonnote_insn (rtx);
|
| +extern rtx prev_nonnote_insn_bb (rtx);
|
| extern rtx next_nonnote_insn (rtx);
|
| +extern rtx next_nonnote_insn_bb (rtx);
|
| +extern rtx prev_nondebug_insn (rtx);
|
| +extern rtx next_nondebug_insn (rtx);
|
| extern rtx prev_real_insn (rtx);
|
| extern rtx next_real_insn (rtx);
|
| extern rtx prev_active_insn (rtx);
|
| @@ -1691,9 +1777,12 @@ extern rtx simplify_subreg (enum machine_mode, rtx, enum machine_mode,
|
| unsigned int);
|
| extern rtx simplify_gen_subreg (enum machine_mode, rtx, enum machine_mode,
|
| unsigned int);
|
| +extern rtx simplify_replace_fn_rtx (rtx, const_rtx,
|
| + rtx (*fn) (rtx, const_rtx, void *), void *);
|
| extern rtx simplify_replace_rtx (rtx, const_rtx, rtx);
|
| extern rtx simplify_rtx (const_rtx);
|
| extern rtx avoid_constant_pool_reference (rtx);
|
| +extern rtx delegitimize_mem_from_attrs (rtx);
|
| extern bool mode_signbit_p (enum machine_mode, const_rtx);
|
|
|
| /* In reginfo.c */
|
| @@ -1759,6 +1848,7 @@ extern rtx find_reg_equal_equiv_note (const_rtx);
|
| extern rtx find_constant_src (const_rtx);
|
| extern int find_reg_fusage (const_rtx, enum rtx_code, const_rtx);
|
| extern int find_regno_fusage (const_rtx, enum rtx_code, unsigned int);
|
| +extern rtx alloc_reg_note (enum reg_note, rtx, rtx);
|
| extern void add_reg_note (rtx, enum reg_note, rtx);
|
| extern void remove_note (rtx, const_rtx);
|
| extern void remove_reg_equal_equiv_notes (rtx);
|
| @@ -1768,6 +1858,13 @@ 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_or_fault_p (const_rtx);
|
| +extern bool can_throw_internal (const_rtx);
|
| +extern bool can_throw_external (const_rtx);
|
| +extern bool insn_could_throw_p (const_rtx);
|
| +extern bool insn_nothrow_p (const_rtx);
|
| +extern bool can_nonlocal_goto (const_rtx);
|
| +extern void copy_reg_eh_region_note_forward (rtx, rtx, rtx);
|
| +extern void copy_reg_eh_region_note_backward(rtx, rtx, rtx);
|
| extern int inequality_comparisons_p (const_rtx);
|
| extern rtx replace_rtx (rtx, rtx, rtx);
|
| extern int replace_label (rtx *, void *);
|
| @@ -1806,6 +1903,22 @@ extern rtx canonicalize_condition (rtx, rtx, int, rtx *, rtx, int, int);
|
| being made. */
|
| extern rtx get_condition (rtx, rtx *, int, int);
|
|
|
| +/* Information about a subreg of a hard register. */
|
| +struct subreg_info
|
| +{
|
| + /* Offset of first hard register involved in the subreg. */
|
| + int offset;
|
| + /* Number of hard registers involved in the subreg. */
|
| + int nregs;
|
| + /* Whether this subreg can be represented as a hard reg with the new
|
| + mode. */
|
| + bool representable_p;
|
| +};
|
| +
|
| +extern void subreg_get_info (unsigned int, enum machine_mode,
|
| + unsigned int, enum machine_mode,
|
| + struct subreg_info *);
|
| +
|
| /* lists.c */
|
|
|
| extern void free_EXPR_LIST_list (rtx *);
|
| @@ -1824,21 +1937,24 @@ extern rtx remove_free_EXPR_LIST_node (rtx *);
|
|
|
| /* Initialize may_move_cost and friends for mode M. */
|
| extern void init_move_cost (enum machine_mode);
|
| -/* Allocate register info memory. */
|
| -extern void allocate_reg_info (void);
|
| /* Resize reg info. */
|
| -extern void resize_reg_info (void);
|
| +extern bool resize_reg_info (void);
|
| /* Free up register info memory. */
|
| extern void free_reg_info (void);
|
| +extern void init_subregs_of_mode (void);
|
| +extern void finish_subregs_of_mode (void);
|
|
|
| /* recog.c */
|
| +extern rtx extract_asm_operands (rtx);
|
| extern int asm_noperands (const_rtx);
|
| extern const char *decode_asm_operands (rtx, rtx *, rtx **, const char **,
|
| enum machine_mode *, location_t *);
|
|
|
| extern enum reg_class reg_preferred_class (int);
|
| extern enum reg_class reg_alternate_class (int);
|
| -extern void setup_reg_classes (int, enum reg_class, enum reg_class);
|
| +extern enum reg_class reg_cover_class (int);
|
| +extern void setup_reg_classes (int, enum reg_class, enum reg_class,
|
| + enum reg_class);
|
|
|
| extern void split_all_insns (void);
|
| extern unsigned int split_all_insns_noflow (void);
|
| @@ -1924,8 +2040,6 @@ extern GTY(()) rtx global_rtl[GR_MAX];
|
| #define arg_pointer_rtx (global_rtl[GR_ARG_POINTER])
|
|
|
| extern GTY(()) rtx pic_offset_table_rtx;
|
| -extern GTY(()) rtx static_chain_rtx;
|
| -extern GTY(()) rtx static_chain_incoming_rtx;
|
| extern GTY(()) rtx return_address_pointer_rtx;
|
|
|
| /* Include the RTL generation functions. */
|
| @@ -2072,6 +2186,7 @@ extern rtx pc_set (const_rtx);
|
| extern rtx condjump_label (const_rtx);
|
| extern int simplejump_p (const_rtx);
|
| extern int returnjump_p (rtx);
|
| +extern int eh_returnjump_p (rtx);
|
| extern int onlyjump_p (const_rtx);
|
| extern int only_sets_cc0_p (const_rtx);
|
| extern int sets_cc0_p (const_rtx);
|
| @@ -2104,11 +2219,12 @@ extern void set_used_flags (rtx);
|
| extern void reorder_insns (rtx, rtx, rtx);
|
| extern void reorder_insns_nobb (rtx, rtx, rtx);
|
| extern int get_max_uid (void);
|
| +extern int get_max_insn_count (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 init_emit_once (void);
|
| extern void push_topmost_sequence (void);
|
| extern void pop_topmost_sequence (void);
|
| extern void set_new_first_and_last_insn (rtx, rtx);
|
| @@ -2130,7 +2246,6 @@ 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);
|
| @@ -2185,6 +2300,7 @@ extern int prologue_epilogue_contains (const_rtx);
|
| extern int sibcall_epilogue_contains (const_rtx);
|
| extern void mark_temp_addr_taken (rtx);
|
| extern void update_temp_slot_address (rtx, rtx);
|
| +extern void maybe_copy_epilogue_insn (rtx, rtx);
|
|
|
| /* In stmt.c */
|
| extern void expand_null_return (void);
|
| @@ -2209,6 +2325,7 @@ extern void expand_dec (rtx, rtx);
|
|
|
| /* In gcse.c */
|
| extern bool can_copy_p (enum machine_mode);
|
| +extern bool can_assign_to_reg_without_clobbers_p (rtx);
|
| extern rtx fis_get_condition (rtx);
|
|
|
| /* In ira.c */
|
| @@ -2230,10 +2347,6 @@ extern void init_reg_sets (void);
|
| extern void regclass (rtx, int);
|
| extern void reg_scan (rtx, unsigned int);
|
| extern void fix_register (const char *, int, int);
|
| -#ifdef HARD_CONST
|
| -extern void cannot_change_mode_set_regs (HARD_REG_SET *,
|
| - enum machine_mode, unsigned int);
|
| -#endif
|
| extern bool invalid_mode_change_p (unsigned int, enum reg_class,
|
| enum machine_mode);
|
|
|
| @@ -2262,7 +2375,7 @@ extern rtx emit_library_call_value (rtx, rtx, enum libcall_type,
|
| /* In varasm.c */
|
| extern void init_varasm_once (void);
|
| extern enum tls_model decl_default_tls_model (const_tree);
|
| -
|
| +
|
| /* In rtl.c */
|
| extern void traverse_md_constants (int (*) (void **, void *), void *);
|
| struct md_constant { char *name, *value; };
|
| @@ -2305,8 +2418,6 @@ 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 var-tracking.c */
|
| extern unsigned int variable_tracking_main (void);
|
| @@ -2325,6 +2436,7 @@ extern void simplify_using_condition (rtx, rtx *, struct bitmap_head_def *);
|
|
|
| /* In final.c */
|
| extern unsigned int compute_alignments (void);
|
| +extern int asm_str_count (const char *templ);
|
|
|
| struct rtl_hooks
|
| {
|
| @@ -2352,7 +2464,9 @@ extern void insn_locators_alloc (void);
|
| extern void insn_locators_free (void);
|
| extern void insn_locators_finalize (void);
|
| extern void set_curr_insn_source_location (location_t);
|
| +extern location_t get_curr_insn_source_location (void);
|
| extern void set_curr_insn_block (tree);
|
| +extern tree get_curr_insn_block (void);
|
| extern int curr_insn_locator (void);
|
| extern bool optimize_insn_for_size_p (void);
|
| extern bool optimize_insn_for_speed_p (void);
|
|
|