OSDN Git Service

* ChangeLog.2, ChangeLog.3, ChangeLog.5, ChangeLog, alias.c,
[pf3gnuchains/gcc-fork.git] / gcc / rtl.h
index 1985f98..0fe43aa 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -92,7 +92,7 @@ typedef struct
 typedef struct
 {
   HOST_WIDE_INT alias;         /* Memory alias set.  */
-  tree decl;                   /* decl corresponding to MEM.  */
+  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.  */
   unsigned int align;          /* Alignment of MEM in bits.  */
@@ -130,7 +130,8 @@ struct rtx_def
   /* 1 in an INSN if it can alter flow of control
      within this function.
      MEM_KEEP_ALIAS_SET_P in a MEM.
-     LINK_COST_ZERO in an INSN_LIST.  */
+     LINK_COST_ZERO in an INSN_LIST.
+     SET_IS_RETURN_P in a SET.  */
   unsigned int jump : 1;
   /* 1 in an INSN if it can call another function.
      LINK_COST_FREE in an INSN_LIST.  */
@@ -804,15 +805,11 @@ extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS];
    For a float, the number of ints varies,
     and CONST_DOUBLE_LOW is the one that should come first *in memory*.
     So use &CONST_DOUBLE_LOW(r) as the address of an array of ints.  */
-#define CONST_DOUBLE_LOW(r) XCWINT (r, 2, CONST_DOUBLE)
-#define CONST_DOUBLE_HIGH(r) XCWINT (r, 3, CONST_DOUBLE)
+#define CONST_DOUBLE_LOW(r) XCWINT (r, 1, CONST_DOUBLE)
+#define CONST_DOUBLE_HIGH(r) XCWINT (r, 2, CONST_DOUBLE)
 
 /* Link for chain of all CONST_DOUBLEs in use in current function.  */
-#define CONST_DOUBLE_CHAIN(r) XCEXP (r, 1, CONST_DOUBLE)
-/* The MEM which represents this CONST_DOUBLE's value in memory,
-   or const0_rtx if no MEM has been made for it yet,
-   or cc0_rtx if it is not on the chain.  */
-#define CONST_DOUBLE_MEM(r) XCEXP (r, 0, CONST_DOUBLE)
+#define CONST_DOUBLE_CHAIN(r) XCEXP (r, 0, CONST_DOUBLE)
 
 /* For a SUBREG rtx, SUBREG_REG extracts the value we want a subreg of.
    SUBREG_BYTE extracts the byte-number.  */
@@ -907,10 +904,10 @@ extern unsigned int subreg_regno  PARAMS ((rtx));
 #define MEM_ALIAS_SET(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->alias)
 
 /* For a MEM rtx, the decl it is known to refer to, if it is known to
-   refer to part of a DECL.  */
-#define MEM_DECL(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->decl)
+   refer to part of a DECL.  It may also be a COMPONENT_REF.  */
+#define MEM_EXPR(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->expr)
 
-/* For a MEM rtx, the offset from the start of MEM_DECL, if known, as a
+/* For a MEM rtx, the offset from the start of MEM_EXPR, if known, as a
    RTX that is always a CONST_INT.  */
 #define MEM_OFFSET(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->offset)
 
@@ -969,6 +966,7 @@ extern unsigned int subreg_regno    PARAMS ((rtx));
    and SET_SRC is the value it is set to.  */
 #define SET_DEST(RTX) XC2EXP(RTX, 0, SET, CLOBBER)
 #define SET_SRC(RTX) XCEXP(RTX, 1, SET)
+#define SET_IS_RETURN_P(RTX) ((RTX)->jump)
 
 /* For a TRAP_IF rtx, TRAP_CONDITION is an expression.  */
 #define TRAP_CONDITION(RTX) XCEXP(RTX, 0, TRAP_IF)
@@ -1277,6 +1275,7 @@ extern rtx gen_sequence                   PARAMS ((void));
 
 /* In varasm.c  */
 extern rtx immed_double_const          PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT, enum machine_mode));
+extern rtx mem_for_const_double                PARAMS ((rtx));
 extern rtx force_const_mem             PARAMS ((enum machine_mode, rtx));
 
 /* In varasm.c  */
@@ -1292,6 +1291,8 @@ extern rtx assign_stack_local             PARAMS ((enum machine_mode,
                                               HOST_WIDE_INT, int));
 extern rtx assign_stack_temp           PARAMS ((enum machine_mode,
                                               HOST_WIDE_INT, int));
+extern rtx assign_stack_temp_for_type  PARAMS ((enum machine_mode,
+                                                HOST_WIDE_INT, int, tree));
 extern rtx assign_temp                 PARAMS ((tree, int, int, int));
 /* In emit-rtl.c */
 extern rtx emit_insn_before            PARAMS ((rtx, rtx));
@@ -1343,7 +1344,7 @@ extern void mark_jump_label               PARAMS ((rtx, rtx, int));
 extern void cleanup_barriers           PARAMS ((void));
 
 /* In jump.c */
-extern void squeeze_notes              PARAMS ((rtx *, rtx *));
+extern bool squeeze_notes              PARAMS ((rtx *, rtx *));
 extern rtx delete_related_insns                        PARAMS ((rtx));
 extern void delete_jump                        PARAMS ((rtx));
 extern void delete_barrier             PARAMS ((rtx));
@@ -1409,7 +1410,7 @@ extern enum machine_mode choose_hard_reg_mode PARAMS ((unsigned int,
                                                       unsigned int));
 
 /* In emit-rtl.c  */
-extern void set_unique_reg_note         PARAMS ((rtx, enum reg_note, rtx));
+extern rtx set_unique_reg_note         PARAMS ((rtx, enum reg_note, rtx));
 
 /* Functions in rtlanal.c */
 
@@ -1426,6 +1427,7 @@ 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 rtx get_jump_table_offset       PARAMS ((rtx, rtx *));
 extern int reg_mentioned_p             PARAMS ((rtx, rtx));
 extern int count_occurrences           PARAMS ((rtx, rtx, int));
 extern int reg_referenced_p            PARAMS ((rtx, rtx));
@@ -1619,7 +1621,7 @@ extern rtx return_address_pointer_rtx;
    add to this list, modify special_rtx in gengenrtl.c as well.  You
    should also modify gen_rtx to use the special function.  */
 
-extern rtx gen_rtx_CONST_DOUBLE PARAMS ((enum machine_mode, rtx,
+extern rtx gen_rtx_CONST_DOUBLE PARAMS ((enum machine_mode,
                                       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));
@@ -1685,6 +1687,15 @@ extern rtx gen_lowpart_SUBREG PARAMS ((enum machine_mode, rtx));
 
 #define LAST_VIRTUAL_REGISTER          ((FIRST_VIRTUAL_REGISTER) + 4)
 
+/* Nonzero if REGNUM is a pointer into the stack frame.  */
+#define REGNO_PTR_FRAME_P(REGNUM)              \
+  ((REGNUM) == STACK_POINTER_REGNUM            \
+   || (REGNUM) == FRAME_POINTER_REGNUM         \
+   || (REGNUM) == HARD_FRAME_POINTER_REGNUM    \
+   || (REGNUM) == ARG_POINTER_REGNUM           \
+   || ((REGNUM) >= FIRST_VIRTUAL_REGISTER      \
+       && (REGNUM) <= LAST_VIRTUAL_REGISTER))
+
 /* REGNUM never really appearing in the INSN stream.  */
 #define INVALID_REGNUM                 (~(unsigned int)0)
 
@@ -1855,6 +1866,7 @@ 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_mem_expr             PARAMS ((FILE *, tree));
 extern void print_rtl                  PARAMS ((FILE *, rtx));
 extern void print_simple_rtl           PARAMS ((FILE *, rtx));
 extern int print_rtl_single            PARAMS ((FILE *, rtx));
@@ -1892,10 +1904,11 @@ extern void move_by_pieces              PARAMS ((rtx, rtx,
                                                 unsigned int));
 
 /* In flow.c */
-extern void recompute_reg_usage                PARAMS ((rtx, int));
+extern void recompute_reg_usage                        PARAMS ((rtx, int));
+extern int initialize_uninitialized_subregs    PARAMS ((void));
 #ifdef BUFSIZ
-extern void print_rtl_with_bb          PARAMS ((FILE *, rtx));
-extern void dump_flow_info             PARAMS ((FILE *));
+extern void print_rtl_with_bb                  PARAMS ((FILE *, rtx));
+extern void dump_flow_info                     PARAMS ((FILE *));
 #endif
 
 /* In expmed.c */