aboutsummaryrefslogtreecommitdiff
path: root/gcc/rtl.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/rtl.h')
-rw-r--r--gcc/rtl.h69
1 files changed, 53 insertions, 16 deletions
diff --git a/gcc/rtl.h b/gcc/rtl.h
index f95adc5..16de280 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -176,14 +176,14 @@ typedef struct rtx_def
PARALLEL expressions. */
typedef struct rtvec_def{
- unsigned num_elem; /* number of elements */
+ int num_elem; /* number of elements */
rtunion elem[1];
} *rtvec;
#define NULL_RTVEC (rtvec) 0
#define GET_NUM_ELEM(RTVEC) ((RTVEC)->num_elem)
-#define PUT_NUM_ELEM(RTVEC, NUM) ((RTVEC)->num_elem = (unsigned) NUM)
+#define PUT_NUM_ELEM(RTVEC, NUM) ((RTVEC)->num_elem = (NUM))
#define RTVEC_ELT(RTVEC, I) ((RTVEC)->elem[(I)].rtx)
@@ -443,11 +443,18 @@ extern char *note_insn_name[];
to hold these things. That happens to be true. */
/* For static or external objects. */
-#define BYTECODE_LABEL(X) (XEXP ((X), 0))
+#define BYTECODE_LABEL(X) (XSTR ((X), 0))
/* For goto labels inside bytecode functions. */
#define BYTECODE_BC_LABEL(X) (*(struct bc_label **) &XEXP ((X), 1))
+/* The original regno this ADDRESSOF was built for. */
+#define ADDRESSOF_REGNO(RTX) ((RTX)->fld[1].rtint)
+
+/* The variable in the register we took the address of. */
+#define ADDRESSOF_DECL(X) ((tree) XEXP ((X), 2))
+#define SET_ADDRESSOF_DECL(X, T) (XEXP ((X), 2) = (rtx) (T))
+
/* In jump.c, each JUMP_INSN can point to a label that it can jump to,
so that if the JUMP_INSN is deleted, the label's LABEL_NUSES can
be decremented and possibly the label can be deleted. */
@@ -612,6 +619,7 @@ extern char *note_insn_name[];
#define INLINE_REGNO_REG_RTX(RTX) ((RTX)->fld[16].rtvec)
#define INLINE_REGNO_POINTER_FLAG(RTX) ((RTX)->fld[17].rtstr)
#define INLINE_REGNO_POINTER_ALIGN(RTX) ((RTX)->fld[18].rtstr)
+#define PARMREG_STACK_LOC(RTX) ((RTX)->fld[19].rtvec)
/* In FUNCTION_FLAGS we save some variables computed when emitting the code
for the function and which must be `or'ed into the current flag values when
@@ -674,7 +682,9 @@ extern rtx gen_rtx PVPROTO((enum rtx_code,
enum machine_mode, ...));
extern rtvec gen_rtvec PVPROTO((int, ...));
-extern rtx read_rtx STDIO_PROTO((FILE *));
+#ifdef BUFSIZ
+extern rtx read_rtx PROTO((FILE *));
+#endif
#if 0
/* At present, don't prototype xrealloc, since all of the callers don't
@@ -691,18 +701,9 @@ extern char *oballoc PROTO((int));
extern char *permalloc PROTO((int));
extern rtx rtx_alloc PROTO((RTX_CODE));
extern rtvec rtvec_alloc PROTO((int));
-extern rtx find_reg_note PROTO((rtx, enum reg_note, rtx));
-extern rtx find_regno_note PROTO((rtx, enum reg_note, int));
-extern int find_reg_fusage PROTO((rtx, enum rtx_code, rtx));
-extern int find_regno_fusage PROTO((rtx, enum rtx_code, int));
-extern HOST_WIDE_INT get_integer_term PROTO((rtx));
-extern rtx get_related_value PROTO((rtx));
-extern rtx single_set PROTO((rtx));
-extern rtx find_last_value PROTO((rtx, rtx *, rtx));
extern rtx copy_rtx PROTO((rtx));
extern rtx copy_rtx_if_shared PROTO((rtx));
extern rtx copy_most_rtx PROTO((rtx, rtx));
-extern rtx replace_rtx PROTO((rtx, rtx, rtx));
extern rtvec gen_rtvec_v PROTO((int, rtx *));
extern rtvec gen_rtvec_vv PROTO((int, rtunion *));
extern rtx gen_reg_rtx PROTO((enum machine_mode));
@@ -710,7 +711,7 @@ extern rtx gen_label_rtx PROTO((void));
extern rtx gen_inline_header_rtx PROTO((rtx, rtx, int, int, int, int,
int, int, rtx, rtx, int, int,
rtvec, rtx,
- rtvec, char *, char *));
+ rtvec, char *, char *, rtvec));
extern rtx gen_lowpart_common PROTO((enum machine_mode, rtx));
extern rtx gen_lowpart PROTO((enum machine_mode, rtx));
extern rtx gen_lowpart_if_possible PROTO((enum machine_mode, rtx));
@@ -779,7 +780,6 @@ extern rtx prev_label PROTO((rtx));
extern rtx next_label PROTO((rtx));
extern rtx next_cc0_user PROTO((rtx));
extern rtx prev_cc0_setter PROTO((rtx));
-extern rtx reg_set_last PROTO((rtx, rtx));
extern rtx next_nondeleted_insn PROTO((rtx));
extern enum rtx_code reverse_condition PROTO((enum rtx_code));
extern enum rtx_code swap_condition PROTO((enum rtx_code));
@@ -805,6 +805,7 @@ extern rtx gen_jump PROTO((rtx));
extern rtx gen_beq PROTO((rtx));
extern rtx gen_bge PROTO((rtx));
extern rtx gen_ble PROTO((rtx));
+extern rtx gen_mem_addressof PROTO((rtx, union tree_node *));
extern rtx eliminate_constant_term PROTO((rtx, rtx *));
extern rtx expand_complex_abs PROTO((enum machine_mode, rtx, rtx, int));
extern enum machine_mode choose_hard_reg_mode PROTO((int, int));
@@ -819,6 +820,43 @@ extern int refers_to_regno_p PROTO((int, int, rtx, rtx *));
extern int reg_overlap_mentioned_p PROTO((rtx, rtx));
extern rtx find_use_as_address PROTO((rtx, rtx, HOST_WIDE_INT));
+/* Functions in rtlanal.c */
+
+extern int rtx_unstable_p PROTO((rtx));
+extern int rtx_varies_p PROTO((rtx));
+extern int rtx_addr_varies_p PROTO((rtx));
+extern HOST_WIDE_INT get_integer_term PROTO((rtx));
+extern rtx get_related_value PROTO((rtx));
+extern int reg_mentioned_p PROTO((rtx, rtx));
+extern int reg_referenced_p PROTO((rtx, rtx));
+extern int reg_used_between_p PROTO((rtx, rtx, rtx));
+extern int reg_referenced_between_p PROTO((rtx, rtx, rtx));
+extern int reg_set_between_p PROTO((rtx, rtx, rtx));
+extern int modified_between_p PROTO((rtx, rtx, rtx));
+extern int no_labels_between_p PROTO((rtx, rtx));
+extern int modified_in_p PROTO((rtx, rtx));
+extern int reg_set_p PROTO((rtx, rtx));
+extern rtx single_set PROTO((rtx));
+extern rtx find_last_value PROTO((rtx, rtx *, rtx));
+extern int refers_to_regno_p PROTO((int, int, rtx, rtx *));
+extern int reg_overlap_mentioned_p PROTO((rtx, rtx));
+extern void note_stores PROTO((rtx, void (*)()));
+extern rtx reg_set_last PROTO((rtx, rtx));
+extern int rtx_equal_p PROTO((rtx, rtx));
+extern int dead_or_set_p PROTO((rtx, rtx));
+extern int dead_or_set_regno_p PROTO((rtx, int));
+extern rtx find_reg_note PROTO((rtx, enum reg_note, rtx));
+extern rtx find_regno_note PROTO((rtx, enum reg_note, int));
+extern int find_reg_fusage PROTO((rtx, enum rtx_code, rtx));
+extern int find_regno_fusage PROTO((rtx, enum rtx_code, int));
+extern void remove_note PROTO((rtx, rtx));
+extern int side_effects_p PROTO((rtx));
+extern int volatile_refs_p PROTO((rtx));
+extern int volatile_insn_p PROTO((rtx));
+extern int may_trap_p PROTO((rtx));
+extern int inequality_comparison_p PROTO((rtx));
+extern rtx replace_rtx PROTO((rtx, rtx, rtx));
+extern rtx replace_regs PROTO((rtx, rtx *, int, int));
/* Maximum number of parallel sets and clobbers in any insn in this fn.
Always at least 3, since the combiner could put that many togetherm
@@ -833,7 +871,6 @@ extern enum reg_class reg_preferred_class PROTO((int));
extern enum reg_class reg_alternate_class PROTO((int));
extern rtx get_first_nonparm_insn PROTO((void));
-extern rtx replace_regs PROTO((rtx, rtx *, int, int));
/* Standard pieces of rtx, to be substituted directly into things. */
extern rtx pc_rtx;