Mercurial > hg > CbC > CbC_gcc
comparison gcc/rtl.h @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | b7f97abdc517 |
children | 04ced10e8804 |
comparison
equal
deleted
inserted
replaced
65:65488c3d617d | 67:f6334be47118 |
---|---|
1 /* Register Transfer Language (RTL) definitions for GCC | 1 /* Register Transfer Language (RTL) definitions for GCC |
2 Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, | 2 Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, |
3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 | 3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 |
4 Free Software Foundation, Inc. | 4 Free Software Foundation, Inc. |
5 | 5 |
6 This file is part of GCC. | 6 This file is part of GCC. |
7 | 7 |
8 GCC is free software; you can redistribute it and/or modify it under | 8 GCC is free software; you can redistribute it and/or modify it under |
28 #include "real.h" | 28 #include "real.h" |
29 #include "vec.h" | 29 #include "vec.h" |
30 #include "vecir.h" | 30 #include "vecir.h" |
31 #include "fixed-value.h" | 31 #include "fixed-value.h" |
32 #include "alias.h" | 32 #include "alias.h" |
33 #include "hashtab.h" | |
33 | 34 |
34 #undef FFS /* Some systems predefine this symbol; don't let it interfere. */ | 35 #undef FFS /* Some systems predefine this symbol; don't let it interfere. */ |
35 #undef FLOAT /* Likewise. */ | 36 #undef FLOAT /* Likewise. */ |
36 #undef ABS /* Likewise. */ | 37 #undef ABS /* Likewise. */ |
37 #undef PC /* Likewise. */ | 38 #undef PC /* Likewise. */ |
231 }; | 232 }; |
232 | 233 |
233 /* RTL expression ("rtx"). */ | 234 /* RTL expression ("rtx"). */ |
234 | 235 |
235 struct GTY((chain_next ("RTX_NEXT (&%h)"), | 236 struct GTY((chain_next ("RTX_NEXT (&%h)"), |
236 chain_prev ("RTX_PREV (&%h)"))) rtx_def { | 237 chain_prev ("RTX_PREV (&%h)"), variable_size)) rtx_def { |
237 /* The kind of expression this is. */ | 238 /* The kind of expression this is. */ |
238 ENUM_BITFIELD(rtx_code) code: 16; | 239 ENUM_BITFIELD(rtx_code) code: 16; |
239 | 240 |
240 /* The kind of value the expression has. */ | 241 /* The kind of value the expression has. */ |
241 ENUM_BITFIELD(machine_mode) mode : 8; | 242 ENUM_BITFIELD(machine_mode) mode : 8; |
350 | 351 |
351 /* RTL vector. These appear inside RTX's when there is a need | 352 /* RTL vector. These appear inside RTX's when there is a need |
352 for a variable number of things. The principle use is inside | 353 for a variable number of things. The principle use is inside |
353 PARALLEL expressions. */ | 354 PARALLEL expressions. */ |
354 | 355 |
355 struct GTY(()) rtvec_def { | 356 struct GTY((variable_size)) rtvec_def { |
356 int num_elem; /* number of elements */ | 357 int num_elem; /* number of elements */ |
357 rtx GTY ((length ("%h.num_elem"))) elem[1]; | 358 rtx GTY ((length ("%h.num_elem"))) elem[1]; |
358 }; | 359 }; |
359 | 360 |
360 #define NULL_RTVEC (rtvec) 0 | 361 #define NULL_RTVEC (rtvec) 0 |
755 /* Chain insns together in sequence. */ | 756 /* Chain insns together in sequence. */ |
756 #define PREV_INSN(INSN) XEXP (INSN, 1) | 757 #define PREV_INSN(INSN) XEXP (INSN, 1) |
757 #define NEXT_INSN(INSN) XEXP (INSN, 2) | 758 #define NEXT_INSN(INSN) XEXP (INSN, 2) |
758 | 759 |
759 #define BLOCK_FOR_INSN(INSN) XBBDEF (INSN, 3) | 760 #define BLOCK_FOR_INSN(INSN) XBBDEF (INSN, 3) |
760 #define INSN_LOCATOR(INSN) XINT (INSN, 4) | 761 |
762 /* The body of an insn. */ | |
763 #define PATTERN(INSN) XEXP (INSN, 4) | |
764 | |
765 #define INSN_LOCATOR(INSN) XINT (INSN, 5) | |
761 /* LOCATION of an RTX if relevant. */ | 766 /* LOCATION of an RTX if relevant. */ |
762 #define RTL_LOCATION(X) (INSN_P (X) ? \ | 767 #define RTL_LOCATION(X) (INSN_P (X) ? \ |
763 locator_location (INSN_LOCATOR (X)) \ | 768 locator_location (INSN_LOCATOR (X)) \ |
764 : UNKNOWN_LOCATION) | 769 : UNKNOWN_LOCATION) |
765 /* LOCATION of current INSN. */ | 770 /* LOCATION of current INSN. */ |
766 #define CURR_INSN_LOCATION (locator_location (curr_insn_locator ())) | 771 #define CURR_INSN_LOCATION (locator_location (curr_insn_locator ())) |
767 /* The body of an insn. */ | |
768 #define PATTERN(INSN) XEXP (INSN, 5) | |
769 | 772 |
770 /* Code number of instruction, from when it was recognized. | 773 /* Code number of instruction, from when it was recognized. |
771 -1 means this instruction has not been recognized yet. */ | 774 -1 means this instruction has not been recognized yet. */ |
772 #define INSN_CODE(INSN) XINT (INSN, 6) | 775 #define INSN_CODE(INSN) XINT (INSN, 6) |
773 | 776 |
928 #define NOTE_DURING_CALL_P(RTX) \ | 931 #define NOTE_DURING_CALL_P(RTX) \ |
929 (RTL_FLAG_CHECK1("NOTE_VAR_LOCATION_DURING_CALL_P", (RTX), NOTE)->call) | 932 (RTL_FLAG_CHECK1("NOTE_VAR_LOCATION_DURING_CALL_P", (RTX), NOTE)->call) |
930 | 933 |
931 /* DEBUG_EXPR_DECL corresponding to a DEBUG_EXPR RTX. */ | 934 /* DEBUG_EXPR_DECL corresponding to a DEBUG_EXPR RTX. */ |
932 #define DEBUG_EXPR_TREE_DECL(RTX) XCTREE (RTX, 0, DEBUG_EXPR) | 935 #define DEBUG_EXPR_TREE_DECL(RTX) XCTREE (RTX, 0, DEBUG_EXPR) |
936 | |
937 /* VAR_DECL/PARM_DECL DEBUG_IMPLICIT_PTR takes address of. */ | |
938 #define DEBUG_IMPLICIT_PTR_DECL(RTX) XCTREE (RTX, 0, DEBUG_IMPLICIT_PTR) | |
933 | 939 |
934 /* Possible initialization status of a variable. When requested | 940 /* Possible initialization status of a variable. When requested |
935 by the user, this information is tracked and recorded in the DWARF | 941 by the user, this information is tracked and recorded in the DWARF |
936 debug information, along with the variable's location. */ | 942 debug information, along with the variable's location. */ |
937 enum var_init_status | 943 enum var_init_status |
969 in the input source code. */ | 975 in the input source code. */ |
970 #define LABEL_NAME(RTX) XCSTR (RTX, 7, CODE_LABEL) | 976 #define LABEL_NAME(RTX) XCSTR (RTX, 7, CODE_LABEL) |
971 | 977 |
972 /* In jump.c, each label contains a count of the number | 978 /* In jump.c, each label contains a count of the number |
973 of LABEL_REFs that point at it, so unused labels can be deleted. */ | 979 of LABEL_REFs that point at it, so unused labels can be deleted. */ |
974 #define LABEL_NUSES(RTX) XCINT (RTX, 4, CODE_LABEL) | 980 #define LABEL_NUSES(RTX) XCINT (RTX, 5, CODE_LABEL) |
975 | 981 |
976 /* Labels carry a two-bit field composed of the ->jump and ->call | 982 /* Labels carry a two-bit field composed of the ->jump and ->call |
977 bits. This field indicates whether the label is an alternate | 983 bits. This field indicates whether the label is an alternate |
978 entry point, and if so, what kind. */ | 984 entry point, and if so, what kind. */ |
979 enum label_kind | 985 enum label_kind |
1029 #define JUMP_LABEL(INSN) XCEXP (INSN, 8, JUMP_INSN) | 1035 #define JUMP_LABEL(INSN) XCEXP (INSN, 8, JUMP_INSN) |
1030 | 1036 |
1031 /* Once basic blocks are found, each CODE_LABEL starts a chain that | 1037 /* Once basic blocks are found, each CODE_LABEL starts a chain that |
1032 goes through all the LABEL_REFs that jump to that label. The chain | 1038 goes through all the LABEL_REFs that jump to that label. The chain |
1033 eventually winds up at the CODE_LABEL: it is circular. */ | 1039 eventually winds up at the CODE_LABEL: it is circular. */ |
1034 #define LABEL_REFS(LABEL) XCEXP (LABEL, 5, CODE_LABEL) | 1040 #define LABEL_REFS(LABEL) XCEXP (LABEL, 4, CODE_LABEL) |
1035 | 1041 |
1036 /* For a REG rtx, REGNO extracts the register number. REGNO can only | 1042 /* For a REG rtx, REGNO extracts the register number. REGNO can only |
1037 be used on RHS. Use SET_REGNO to change the value. */ | 1043 be used on RHS. Use SET_REGNO to change the value. */ |
1038 #define REGNO(RTX) (rhs_regno(RTX)) | 1044 #define REGNO(RTX) (rhs_regno(RTX)) |
1039 #define SET_REGNO(RTX,N) (df_ref_change_reg_with_loc (REGNO(RTX), N, RTX), XCUINT (RTX, 0, REG) = N) | 1045 #define SET_REGNO(RTX,N) (df_ref_change_reg_with_loc (REGNO(RTX), N, RTX), XCUINT (RTX, 0, REG) = N) |
1046 #define SET_REGNO_RAW(RTX,N) (XCUINT (RTX, 0, REG) = N) | |
1040 | 1047 |
1041 /* ORIGINAL_REGNO holds the number the register originally had; for a | 1048 /* ORIGINAL_REGNO holds the number the register originally had; for a |
1042 pseudo register turned into a hard reg this will hold the old pseudo | 1049 pseudo register turned into a hard reg this will hold the old pseudo |
1043 register number. */ | 1050 register number. */ |
1044 #define ORIGINAL_REGNO(RTX) X0UINT (RTX, 1) | 1051 #define ORIGINAL_REGNO(RTX) X0UINT (RTX, 1) |
1047 static inline unsigned int | 1054 static inline unsigned int |
1048 rhs_regno (const_rtx x) | 1055 rhs_regno (const_rtx x) |
1049 { | 1056 { |
1050 return XCUINT (x, 0, REG); | 1057 return XCUINT (x, 0, REG); |
1051 } | 1058 } |
1052 | |
1053 | 1059 |
1054 | 1060 |
1055 /* 1 if RTX is a reg or parallel that is the current function's return | 1061 /* 1 if RTX is a reg or parallel that is the current function's return |
1056 value. */ | 1062 value. */ |
1057 #define REG_FUNCTION_VALUE_P(RTX) \ | 1063 #define REG_FUNCTION_VALUE_P(RTX) \ |
1116 | 1122 |
1117 /* Maximum cost of an rtl expression. This value has the special meaning | 1123 /* Maximum cost of an rtl expression. This value has the special meaning |
1118 not to use an rtx with this cost under any circumstances. */ | 1124 not to use an rtx with this cost under any circumstances. */ |
1119 #define MAX_COST INT_MAX | 1125 #define MAX_COST INT_MAX |
1120 | 1126 |
1127 /* A structure to hold all available cost information about an rtl | |
1128 expression. */ | |
1129 struct full_rtx_costs | |
1130 { | |
1131 int speed; | |
1132 int size; | |
1133 }; | |
1134 | |
1135 /* Initialize a full_rtx_costs structure C to the maximum cost. */ | |
1136 static inline void | |
1137 init_costs_to_max (struct full_rtx_costs *c) | |
1138 { | |
1139 c->speed = MAX_COST; | |
1140 c->size = MAX_COST; | |
1141 } | |
1142 | |
1143 /* Initialize a full_rtx_costs structure C to zero cost. */ | |
1144 static inline void | |
1145 init_costs_to_zero (struct full_rtx_costs *c) | |
1146 { | |
1147 c->speed = 0; | |
1148 c->size = 0; | |
1149 } | |
1150 | |
1151 /* Compare two full_rtx_costs structures A and B, returning true | |
1152 if A < B when optimizing for speed. */ | |
1153 static inline bool | |
1154 costs_lt_p (struct full_rtx_costs *a, struct full_rtx_costs *b, | |
1155 bool speed) | |
1156 { | |
1157 if (speed) | |
1158 return (a->speed < b->speed | |
1159 || (a->speed == b->speed && a->size < b->size)); | |
1160 else | |
1161 return (a->size < b->size | |
1162 || (a->size == b->size && a->speed < b->speed)); | |
1163 } | |
1164 | |
1165 /* Increase both members of the full_rtx_costs structure C by the | |
1166 cost of N insns. */ | |
1167 static inline void | |
1168 costs_add_n_insns (struct full_rtx_costs *c, int n) | |
1169 { | |
1170 c->speed += COSTS_N_INSNS (n); | |
1171 c->size += COSTS_N_INSNS (n); | |
1172 } | |
1173 | |
1121 extern void init_rtlanal (void); | 1174 extern void init_rtlanal (void); |
1122 extern int rtx_cost (rtx, enum rtx_code, bool); | 1175 extern int rtx_cost (rtx, enum rtx_code, bool); |
1123 extern int address_cost (rtx, enum machine_mode, addr_space_t, bool); | 1176 extern int address_cost (rtx, enum machine_mode, addr_space_t, bool); |
1177 extern void get_full_rtx_cost (rtx, enum rtx_code, struct full_rtx_costs *); | |
1124 extern unsigned int subreg_lsb (const_rtx); | 1178 extern unsigned int subreg_lsb (const_rtx); |
1125 extern unsigned int subreg_lsb_1 (enum machine_mode, enum machine_mode, | 1179 extern unsigned int subreg_lsb_1 (enum machine_mode, enum machine_mode, |
1126 unsigned int); | 1180 unsigned int); |
1127 extern unsigned int subreg_regno_offset (unsigned int, enum machine_mode, | 1181 extern unsigned int subreg_regno_offset (unsigned int, enum machine_mode, |
1128 unsigned int, enum machine_mode); | 1182 unsigned int, enum machine_mode); |
1222 (RTL_FLAG_CHECK1("MEM_SCALAR_P", (RTX), MEM)->return_val) | 1276 (RTL_FLAG_CHECK1("MEM_SCALAR_P", (RTX), MEM)->return_val) |
1223 | 1277 |
1224 /* 1 if RTX is a mem that cannot trap. */ | 1278 /* 1 if RTX is a mem that cannot trap. */ |
1225 #define MEM_NOTRAP_P(RTX) \ | 1279 #define MEM_NOTRAP_P(RTX) \ |
1226 (RTL_FLAG_CHECK1("MEM_NOTRAP_P", (RTX), MEM)->call) | 1280 (RTL_FLAG_CHECK1("MEM_NOTRAP_P", (RTX), MEM)->call) |
1227 | |
1228 /* If VAL is nonzero, set MEM_IN_STRUCT_P and clear MEM_SCALAR_P in | |
1229 RTX. Otherwise, vice versa. Use this macro only when you are | |
1230 *sure* that you know that the MEM is in a structure, or is a | |
1231 scalar. VAL is evaluated only once. */ | |
1232 #define MEM_SET_IN_STRUCT_P(RTX, VAL) \ | |
1233 do { \ | |
1234 if (VAL) \ | |
1235 { \ | |
1236 MEM_IN_STRUCT_P (RTX) = 1; \ | |
1237 MEM_SCALAR_P (RTX) = 0; \ | |
1238 } \ | |
1239 else \ | |
1240 { \ | |
1241 MEM_IN_STRUCT_P (RTX) = 0; \ | |
1242 MEM_SCALAR_P (RTX) = 1; \ | |
1243 } \ | |
1244 } while (0) | |
1245 | 1281 |
1246 /* The memory attribute block. We provide access macros for each value | 1282 /* The memory attribute block. We provide access macros for each value |
1247 in the block and provide defaults if none specified. */ | 1283 in the block and provide defaults if none specified. */ |
1248 #define MEM_ATTRS(RTX) X0MEMATTR (RTX, 1) | 1284 #define MEM_ATTRS(RTX) X0MEMATTR (RTX, 1) |
1249 | 1285 |
1546 | 1582 |
1547 /* In expmed.c */ | 1583 /* In expmed.c */ |
1548 extern int ceil_log2 (unsigned HOST_WIDE_INT); | 1584 extern int ceil_log2 (unsigned HOST_WIDE_INT); |
1549 | 1585 |
1550 /* In explow.c */ | 1586 /* In explow.c */ |
1551 extern void set_stack_check_libfunc (rtx); | |
1552 extern HOST_WIDE_INT trunc_int_for_mode (HOST_WIDE_INT, enum machine_mode); | 1587 extern HOST_WIDE_INT trunc_int_for_mode (HOST_WIDE_INT, enum machine_mode); |
1553 extern rtx plus_constant (rtx, HOST_WIDE_INT); | 1588 extern rtx plus_constant (rtx, HOST_WIDE_INT); |
1554 | |
1555 /* In emit-rtl.c */ | |
1556 extern rtx gen_blockage (void); | |
1557 extern rtvec gen_rtvec (int, ...); | |
1558 extern rtx copy_insn_1 (rtx); | |
1559 extern rtx copy_insn (rtx); | |
1560 extern rtx gen_int_mode (HOST_WIDE_INT, enum machine_mode); | |
1561 extern rtx emit_copy_of_insn_after (rtx, rtx); | |
1562 extern void set_reg_attrs_from_value (rtx, rtx); | |
1563 extern void set_reg_attrs_for_parm (rtx, rtx); | |
1564 extern void set_reg_attrs_for_decl_rtl (tree t, rtx x); | |
1565 extern void adjust_reg_mode (rtx, enum machine_mode); | |
1566 extern int mem_expr_equal_p (const_tree, const_tree); | |
1567 | 1589 |
1568 /* In rtl.c */ | 1590 /* In rtl.c */ |
1569 extern rtx rtx_alloc_stat (RTX_CODE MEM_STAT_DECL); | 1591 extern rtx rtx_alloc_stat (RTX_CODE MEM_STAT_DECL); |
1570 #define rtx_alloc(c) rtx_alloc_stat (c MEM_STAT_INFO) | 1592 #define rtx_alloc(c) rtx_alloc_stat (c MEM_STAT_INFO) |
1571 | 1593 |
1581 /* In rtl.c */ | 1603 /* In rtl.c */ |
1582 extern unsigned int rtx_size (const_rtx); | 1604 extern unsigned int rtx_size (const_rtx); |
1583 extern rtx shallow_copy_rtx_stat (const_rtx MEM_STAT_DECL); | 1605 extern rtx shallow_copy_rtx_stat (const_rtx MEM_STAT_DECL); |
1584 #define shallow_copy_rtx(a) shallow_copy_rtx_stat (a MEM_STAT_INFO) | 1606 #define shallow_copy_rtx(a) shallow_copy_rtx_stat (a MEM_STAT_INFO) |
1585 extern int rtx_equal_p (const_rtx, const_rtx); | 1607 extern int rtx_equal_p (const_rtx, const_rtx); |
1608 extern hashval_t iterative_hash_rtx (const_rtx, hashval_t); | |
1586 | 1609 |
1587 /* In emit-rtl.c */ | 1610 /* In emit-rtl.c */ |
1588 extern rtvec gen_rtvec_v (int, rtx *); | 1611 extern rtvec gen_rtvec_v (int, rtx *); |
1589 extern rtx gen_reg_rtx (enum machine_mode); | 1612 extern rtx gen_reg_rtx (enum machine_mode); |
1590 extern rtx gen_rtx_REG_offset (rtx, enum machine_mode, unsigned int, int); | 1613 extern rtx gen_rtx_REG_offset (rtx, enum machine_mode, unsigned int, int); |
1612 extern rtx make_safe_from (rtx, rtx); | 1635 extern rtx make_safe_from (rtx, rtx); |
1613 extern rtx convert_memory_address_addr_space (enum machine_mode, rtx, | 1636 extern rtx convert_memory_address_addr_space (enum machine_mode, rtx, |
1614 addr_space_t); | 1637 addr_space_t); |
1615 #define convert_memory_address(to_mode,x) \ | 1638 #define convert_memory_address(to_mode,x) \ |
1616 convert_memory_address_addr_space ((to_mode), (x), ADDR_SPACE_GENERIC) | 1639 convert_memory_address_addr_space ((to_mode), (x), ADDR_SPACE_GENERIC) |
1617 extern rtx get_insns (void); | |
1618 extern const char *get_insn_name (int); | 1640 extern const char *get_insn_name (int); |
1619 extern rtx get_last_insn (void); | |
1620 extern rtx get_last_insn_anywhere (void); | 1641 extern rtx get_last_insn_anywhere (void); |
1621 extern rtx get_first_nonnote_insn (void); | 1642 extern rtx get_first_nonnote_insn (void); |
1622 extern rtx get_last_nonnote_insn (void); | 1643 extern rtx get_last_nonnote_insn (void); |
1623 extern void start_sequence (void); | 1644 extern void start_sequence (void); |
1624 extern void push_to_sequence (rtx); | 1645 extern void push_to_sequence (rtx); |
1644 extern enum machine_mode get_pool_mode (const_rtx); | 1665 extern enum machine_mode get_pool_mode (const_rtx); |
1645 extern rtx simplify_subtraction (rtx); | 1666 extern rtx simplify_subtraction (rtx); |
1646 | 1667 |
1647 /* In function.c */ | 1668 /* In function.c */ |
1648 extern rtx assign_stack_local (enum machine_mode, HOST_WIDE_INT, int); | 1669 extern rtx assign_stack_local (enum machine_mode, HOST_WIDE_INT, int); |
1649 extern rtx assign_stack_local_1 (enum machine_mode, HOST_WIDE_INT, int, bool); | 1670 #define ASLK_REDUCE_ALIGN 1 |
1671 #define ASLK_RECORD_PAD 2 | |
1672 extern rtx assign_stack_local_1 (enum machine_mode, HOST_WIDE_INT, int, int); | |
1650 extern rtx assign_stack_temp (enum machine_mode, HOST_WIDE_INT, int); | 1673 extern rtx assign_stack_temp (enum machine_mode, HOST_WIDE_INT, int); |
1651 extern rtx assign_stack_temp_for_type (enum machine_mode, | 1674 extern rtx assign_stack_temp_for_type (enum machine_mode, |
1652 HOST_WIDE_INT, int, tree); | 1675 HOST_WIDE_INT, int, tree); |
1653 extern rtx assign_temp (tree, int, int, int); | 1676 extern rtx assign_temp (tree, int, int, int); |
1654 | 1677 |
1706 extern rtx prev_nonnote_insn_bb (rtx); | 1729 extern rtx prev_nonnote_insn_bb (rtx); |
1707 extern rtx next_nonnote_insn (rtx); | 1730 extern rtx next_nonnote_insn (rtx); |
1708 extern rtx next_nonnote_insn_bb (rtx); | 1731 extern rtx next_nonnote_insn_bb (rtx); |
1709 extern rtx prev_nondebug_insn (rtx); | 1732 extern rtx prev_nondebug_insn (rtx); |
1710 extern rtx next_nondebug_insn (rtx); | 1733 extern rtx next_nondebug_insn (rtx); |
1734 extern rtx prev_nonnote_nondebug_insn (rtx); | |
1735 extern rtx next_nonnote_nondebug_insn (rtx); | |
1711 extern rtx prev_real_insn (rtx); | 1736 extern rtx prev_real_insn (rtx); |
1712 extern rtx next_real_insn (rtx); | 1737 extern rtx next_real_insn (rtx); |
1713 extern rtx prev_active_insn (rtx); | 1738 extern rtx prev_active_insn (rtx); |
1714 extern rtx next_active_insn (rtx); | 1739 extern rtx next_active_insn (rtx); |
1715 extern int active_insn_p (const_rtx); | 1740 extern int active_insn_p (const_rtx); |
1849 extern int find_regno_fusage (const_rtx, enum rtx_code, unsigned int); | 1874 extern int find_regno_fusage (const_rtx, enum rtx_code, unsigned int); |
1850 extern rtx alloc_reg_note (enum reg_note, rtx, rtx); | 1875 extern rtx alloc_reg_note (enum reg_note, rtx, rtx); |
1851 extern void add_reg_note (rtx, enum reg_note, rtx); | 1876 extern void add_reg_note (rtx, enum reg_note, rtx); |
1852 extern void remove_note (rtx, const_rtx); | 1877 extern void remove_note (rtx, const_rtx); |
1853 extern void remove_reg_equal_equiv_notes (rtx); | 1878 extern void remove_reg_equal_equiv_notes (rtx); |
1879 extern void remove_reg_equal_equiv_notes_for_regno (unsigned int); | |
1854 extern int side_effects_p (const_rtx); | 1880 extern int side_effects_p (const_rtx); |
1855 extern int volatile_refs_p (const_rtx); | 1881 extern int volatile_refs_p (const_rtx); |
1856 extern int volatile_insn_p (const_rtx); | 1882 extern int volatile_insn_p (const_rtx); |
1857 extern int may_trap_p_1 (const_rtx, unsigned); | 1883 extern int may_trap_p_1 (const_rtx, unsigned); |
1858 extern int may_trap_p (const_rtx); | 1884 extern int may_trap_p (const_rtx); |
1872 extern int computed_jump_p (const_rtx); | 1898 extern int computed_jump_p (const_rtx); |
1873 | 1899 |
1874 typedef int (*rtx_function) (rtx *, void *); | 1900 typedef int (*rtx_function) (rtx *, void *); |
1875 extern int for_each_rtx (rtx *, rtx_function, void *); | 1901 extern int for_each_rtx (rtx *, rtx_function, void *); |
1876 | 1902 |
1903 /* Callback for for_each_inc_dec, to process the autoinc operation OP | |
1904 within MEM that sets DEST to SRC + SRCOFF, or SRC if SRCOFF is | |
1905 NULL. The callback is passed the same opaque ARG passed to | |
1906 for_each_inc_dec. Return zero to continue looking for other | |
1907 autoinc operations, -1 to skip OP's operands, and any other value | |
1908 to interrupt the traversal and return that value to the caller of | |
1909 for_each_inc_dec. */ | |
1910 typedef int (*for_each_inc_dec_fn) (rtx mem, rtx op, rtx dest, rtx src, | |
1911 rtx srcoff, void *arg); | |
1912 extern int for_each_inc_dec (rtx *, for_each_inc_dec_fn, void *arg); | |
1913 | |
1877 typedef int (*rtx_equal_p_callback_function) (const_rtx *, const_rtx *, | 1914 typedef int (*rtx_equal_p_callback_function) (const_rtx *, const_rtx *, |
1878 rtx *, rtx *); | 1915 rtx *, rtx *); |
1879 extern int rtx_equal_p_cb (const_rtx, const_rtx, | 1916 extern int rtx_equal_p_cb (const_rtx, const_rtx, |
1880 rtx_equal_p_callback_function); | 1917 rtx_equal_p_callback_function); |
1881 | 1918 |
1985 that cannot be determined until after register allocation. We can assume | 2022 that cannot be determined until after register allocation. We can assume |
1986 that in this case ELIMINABLE_REGS will be defined, one action of which | 2023 that in this case ELIMINABLE_REGS will be defined, one action of which |
1987 will be to eliminate FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM. */ | 2024 will be to eliminate FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM. */ |
1988 #ifndef HARD_FRAME_POINTER_REGNUM | 2025 #ifndef HARD_FRAME_POINTER_REGNUM |
1989 #define HARD_FRAME_POINTER_REGNUM FRAME_POINTER_REGNUM | 2026 #define HARD_FRAME_POINTER_REGNUM FRAME_POINTER_REGNUM |
2027 #endif | |
2028 | |
2029 #ifndef HARD_FRAME_POINTER_IS_FRAME_POINTER | |
2030 #define HARD_FRAME_POINTER_IS_FRAME_POINTER \ | |
2031 (HARD_FRAME_POINTER_REGNUM == FRAME_POINTER_REGNUM) | |
2032 #endif | |
2033 | |
2034 #ifndef HARD_FRAME_POINTER_IS_ARG_POINTER | |
2035 #define HARD_FRAME_POINTER_IS_ARG_POINTER \ | |
2036 (HARD_FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM) | |
1990 #endif | 2037 #endif |
1991 | 2038 |
1992 /* Index labels for global_rtl. */ | 2039 /* Index labels for global_rtl. */ |
1993 enum global_rtl_index | 2040 enum global_rtl_index |
1994 { | 2041 { |
2000 frame_pointer_rtx, and arg_pointer_rtx must be the same if they refer to | 2047 frame_pointer_rtx, and arg_pointer_rtx must be the same if they refer to |
2001 the same register. */ | 2048 the same register. */ |
2002 #if FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM | 2049 #if FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM |
2003 GR_ARG_POINTER = GR_FRAME_POINTER, | 2050 GR_ARG_POINTER = GR_FRAME_POINTER, |
2004 #endif | 2051 #endif |
2005 #if HARD_FRAME_POINTER_REGNUM == FRAME_POINTER_REGNUM | 2052 #if HARD_FRAME_POINTER_IS_FRAME_POINTER |
2006 GR_HARD_FRAME_POINTER = GR_FRAME_POINTER, | 2053 GR_HARD_FRAME_POINTER = GR_FRAME_POINTER, |
2007 #else | 2054 #else |
2008 GR_HARD_FRAME_POINTER, | 2055 GR_HARD_FRAME_POINTER, |
2009 #endif | 2056 #endif |
2010 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM | 2057 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM |
2011 #if HARD_FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM | 2058 #if HARD_FRAME_POINTER_IS_ARG_POINTER |
2012 GR_ARG_POINTER = GR_HARD_FRAME_POINTER, | 2059 GR_ARG_POINTER = GR_HARD_FRAME_POINTER, |
2013 #else | 2060 #else |
2014 GR_ARG_POINTER, | 2061 GR_ARG_POINTER, |
2015 #endif | 2062 #endif |
2016 #endif | 2063 #endif |
2017 GR_VIRTUAL_INCOMING_ARGS, | 2064 GR_VIRTUAL_INCOMING_ARGS, |
2018 GR_VIRTUAL_STACK_ARGS, | 2065 GR_VIRTUAL_STACK_ARGS, |
2019 GR_VIRTUAL_STACK_DYNAMIC, | 2066 GR_VIRTUAL_STACK_DYNAMIC, |
2020 GR_VIRTUAL_OUTGOING_ARGS, | 2067 GR_VIRTUAL_OUTGOING_ARGS, |
2021 GR_VIRTUAL_CFA, | 2068 GR_VIRTUAL_CFA, |
2069 GR_VIRTUAL_PREFERRED_STACK_BOUNDARY, | |
2022 | 2070 |
2023 GR_MAX | 2071 GR_MAX |
2024 }; | 2072 }; |
2025 | 2073 |
2026 /* Pointers to standard pieces of rtx are stored here. */ | 2074 /* Target-dependent globals. */ |
2027 extern GTY(()) rtx global_rtl[GR_MAX]; | 2075 struct GTY(()) target_rtl { |
2076 /* All references to the hard registers in global_rtl_index go through | |
2077 these unique rtl objects. On machines where the frame-pointer and | |
2078 arg-pointer are the same register, they use the same unique object. | |
2079 | |
2080 After register allocation, other rtl objects which used to be pseudo-regs | |
2081 may be clobbered to refer to the frame-pointer register. | |
2082 But references that were originally to the frame-pointer can be | |
2083 distinguished from the others because they contain frame_pointer_rtx. | |
2084 | |
2085 When to use frame_pointer_rtx and hard_frame_pointer_rtx is a little | |
2086 tricky: until register elimination has taken place hard_frame_pointer_rtx | |
2087 should be used if it is being set, and frame_pointer_rtx otherwise. After | |
2088 register elimination hard_frame_pointer_rtx should always be used. | |
2089 On machines where the two registers are same (most) then these are the | |
2090 same. */ | |
2091 rtx x_global_rtl[GR_MAX]; | |
2092 | |
2093 /* A unique representation of (REG:Pmode PIC_OFFSET_TABLE_REGNUM). */ | |
2094 rtx x_pic_offset_table_rtx; | |
2095 | |
2096 /* A unique representation of (REG:Pmode RETURN_ADDRESS_POINTER_REGNUM). | |
2097 This is used to implement __builtin_return_address for some machines; | |
2098 see for instance the MIPS port. */ | |
2099 rtx x_return_address_pointer_rtx; | |
2100 | |
2101 /* Commonly used RTL for hard registers. These objects are not | |
2102 necessarily unique, so we allocate them separately from global_rtl. | |
2103 They are initialized once per compilation unit, then copied into | |
2104 regno_reg_rtx at the beginning of each function. */ | |
2105 rtx x_initial_regno_reg_rtx[FIRST_PSEUDO_REGISTER]; | |
2106 | |
2107 /* A sample (mem:M stack_pointer_rtx) rtx for each mode M. */ | |
2108 rtx x_top_of_stack[MAX_MACHINE_MODE]; | |
2109 | |
2110 /* Static hunks of RTL used by the aliasing code; these are treated | |
2111 as persistent to avoid unnecessary RTL allocations. */ | |
2112 rtx x_static_reg_base_value[FIRST_PSEUDO_REGISTER]; | |
2113 }; | |
2114 | |
2115 extern GTY(()) struct target_rtl default_target_rtl; | |
2116 #if SWITCHABLE_TARGET | |
2117 extern struct target_rtl *this_target_rtl; | |
2118 #else | |
2119 #define this_target_rtl (&default_target_rtl) | |
2120 #endif | |
2121 | |
2122 #define global_rtl \ | |
2123 (this_target_rtl->x_global_rtl) | |
2124 #define pic_offset_table_rtx \ | |
2125 (this_target_rtl->x_pic_offset_table_rtx) | |
2126 #define return_address_pointer_rtx \ | |
2127 (this_target_rtl->x_return_address_pointer_rtx) | |
2128 #define top_of_stack \ | |
2129 (this_target_rtl->x_top_of_stack) | |
2028 | 2130 |
2029 /* Standard pieces of rtx, to be substituted directly into things. */ | 2131 /* Standard pieces of rtx, to be substituted directly into things. */ |
2030 #define pc_rtx (global_rtl[GR_PC]) | 2132 #define pc_rtx (global_rtl[GR_PC]) |
2031 #define cc0_rtx (global_rtl[GR_CC0]) | 2133 #define cc0_rtx (global_rtl[GR_CC0]) |
2032 | 2134 |
2036 #define stack_pointer_rtx (global_rtl[GR_STACK_POINTER]) | 2138 #define stack_pointer_rtx (global_rtl[GR_STACK_POINTER]) |
2037 #define frame_pointer_rtx (global_rtl[GR_FRAME_POINTER]) | 2139 #define frame_pointer_rtx (global_rtl[GR_FRAME_POINTER]) |
2038 #define hard_frame_pointer_rtx (global_rtl[GR_HARD_FRAME_POINTER]) | 2140 #define hard_frame_pointer_rtx (global_rtl[GR_HARD_FRAME_POINTER]) |
2039 #define arg_pointer_rtx (global_rtl[GR_ARG_POINTER]) | 2141 #define arg_pointer_rtx (global_rtl[GR_ARG_POINTER]) |
2040 | 2142 |
2041 extern GTY(()) rtx pic_offset_table_rtx; | |
2042 extern GTY(()) rtx return_address_pointer_rtx; | |
2043 | |
2044 /* Include the RTL generation functions. */ | 2143 /* Include the RTL generation functions. */ |
2045 | 2144 |
2046 #ifndef GENERATOR_FILE | 2145 #ifndef GENERATOR_FILE |
2047 #include "genrtl.h" | 2146 #include "genrtl.h" |
2048 #undef gen_rtx_ASM_INPUT | 2147 #undef gen_rtx_ASM_INPUT |
2113 | 2212 |
2114 #define virtual_cfa_rtx (global_rtl[GR_VIRTUAL_CFA]) | 2213 #define virtual_cfa_rtx (global_rtl[GR_VIRTUAL_CFA]) |
2115 | 2214 |
2116 #define VIRTUAL_CFA_REGNUM ((FIRST_VIRTUAL_REGISTER) + 4) | 2215 #define VIRTUAL_CFA_REGNUM ((FIRST_VIRTUAL_REGISTER) + 4) |
2117 | 2216 |
2118 #define LAST_VIRTUAL_REGISTER ((FIRST_VIRTUAL_REGISTER) + 4) | 2217 #define LAST_VIRTUAL_POINTER_REGISTER ((FIRST_VIRTUAL_REGISTER) + 4) |
2218 | |
2219 /* This is replaced by crtl->preferred_stack_boundary / BITS_PER_UNIT | |
2220 when finalized. */ | |
2221 | |
2222 #define virtual_preferred_stack_boundary_rtx \ | |
2223 (global_rtl[GR_VIRTUAL_PREFERRED_STACK_BOUNDARY]) | |
2224 | |
2225 #define VIRTUAL_PREFERRED_STACK_BOUNDARY_REGNUM \ | |
2226 ((FIRST_VIRTUAL_REGISTER) + 5) | |
2227 | |
2228 #define LAST_VIRTUAL_REGISTER ((FIRST_VIRTUAL_REGISTER) + 5) | |
2119 | 2229 |
2120 /* Nonzero if REGNUM is a pointer into the stack frame. */ | 2230 /* Nonzero if REGNUM is a pointer into the stack frame. */ |
2121 #define REGNO_PTR_FRAME_P(REGNUM) \ | 2231 #define REGNO_PTR_FRAME_P(REGNUM) \ |
2122 ((REGNUM) == STACK_POINTER_REGNUM \ | 2232 ((REGNUM) == STACK_POINTER_REGNUM \ |
2123 || (REGNUM) == FRAME_POINTER_REGNUM \ | 2233 || (REGNUM) == FRAME_POINTER_REGNUM \ |
2124 || (REGNUM) == HARD_FRAME_POINTER_REGNUM \ | 2234 || (REGNUM) == HARD_FRAME_POINTER_REGNUM \ |
2125 || (REGNUM) == ARG_POINTER_REGNUM \ | 2235 || (REGNUM) == ARG_POINTER_REGNUM \ |
2126 || ((REGNUM) >= FIRST_VIRTUAL_REGISTER \ | 2236 || ((REGNUM) >= FIRST_VIRTUAL_REGISTER \ |
2127 && (REGNUM) <= LAST_VIRTUAL_REGISTER)) | 2237 && (REGNUM) <= LAST_VIRTUAL_POINTER_REGISTER)) |
2128 | 2238 |
2129 /* REGNUM never really appearing in the INSN stream. */ | 2239 /* REGNUM never really appearing in the INSN stream. */ |
2130 #define INVALID_REGNUM (~(unsigned int) 0) | 2240 #define INVALID_REGNUM (~(unsigned int) 0) |
2131 | 2241 |
2132 extern rtx output_constant_def (tree, int); | 2242 extern rtx output_constant_def (tree, int); |
2173 /* In cse.c */ | 2283 /* In cse.c */ |
2174 extern int delete_trivially_dead_insns (rtx, int); | 2284 extern int delete_trivially_dead_insns (rtx, int); |
2175 extern int cse_main (rtx, int); | 2285 extern int cse_main (rtx, int); |
2176 extern int exp_equiv_p (const_rtx, const_rtx, int, bool); | 2286 extern int exp_equiv_p (const_rtx, const_rtx, int, bool); |
2177 extern unsigned hash_rtx (const_rtx x, enum machine_mode, int *, int *, bool); | 2287 extern unsigned hash_rtx (const_rtx x, enum machine_mode, int *, int *, bool); |
2288 | |
2289 /* In dse.c */ | |
2290 extern void check_for_inc_dec (rtx insn); | |
2178 | 2291 |
2179 /* In jump.c */ | 2292 /* In jump.c */ |
2180 extern int comparison_dominates_p (enum rtx_code, enum rtx_code); | 2293 extern int comparison_dominates_p (enum rtx_code, enum rtx_code); |
2181 extern int condjump_p (const_rtx); | 2294 extern int condjump_p (const_rtx); |
2182 extern int any_condjump_p (const_rtx); | 2295 extern int any_condjump_p (const_rtx); |
2215 extern void mark_user_reg (rtx); | 2328 extern void mark_user_reg (rtx); |
2216 extern void reset_used_flags (rtx); | 2329 extern void reset_used_flags (rtx); |
2217 extern void set_used_flags (rtx); | 2330 extern void set_used_flags (rtx); |
2218 extern void reorder_insns (rtx, rtx, rtx); | 2331 extern void reorder_insns (rtx, rtx, rtx); |
2219 extern void reorder_insns_nobb (rtx, rtx, rtx); | 2332 extern void reorder_insns_nobb (rtx, rtx, rtx); |
2220 extern int get_max_uid (void); | |
2221 extern int get_max_insn_count (void); | 2333 extern int get_max_insn_count (void); |
2222 extern int in_sequence_p (void); | 2334 extern int in_sequence_p (void); |
2223 extern void force_next_line_note (void); | 2335 extern void force_next_line_note (void); |
2224 extern void init_emit (void); | 2336 extern void init_emit (void); |
2225 extern void init_emit_regs (void); | 2337 extern void init_emit_regs (void); |
2229 extern void set_new_first_and_last_insn (rtx, rtx); | 2341 extern void set_new_first_and_last_insn (rtx, rtx); |
2230 extern unsigned int unshare_all_rtl (void); | 2342 extern unsigned int unshare_all_rtl (void); |
2231 extern void unshare_all_rtl_again (rtx); | 2343 extern void unshare_all_rtl_again (rtx); |
2232 extern void unshare_all_rtl_in_chain (rtx); | 2344 extern void unshare_all_rtl_in_chain (rtx); |
2233 extern void verify_rtl_sharing (void); | 2345 extern void verify_rtl_sharing (void); |
2234 extern void set_first_insn (rtx); | |
2235 extern void set_last_insn (rtx); | |
2236 extern void link_cc0_insns (rtx); | 2346 extern void link_cc0_insns (rtx); |
2237 extern void add_insn (rtx); | 2347 extern void add_insn (rtx); |
2238 extern void add_insn_before (rtx, rtx, struct basic_block_def *); | 2348 extern void add_insn_before (rtx, rtx, struct basic_block_def *); |
2239 extern void add_insn_after (rtx, rtx, struct basic_block_def *); | 2349 extern void add_insn_after (rtx, rtx, struct basic_block_def *); |
2240 extern void remove_insn (rtx); | 2350 extern void remove_insn (rtx); |
2273 extern void schedule_insns (void); | 2383 extern void schedule_insns (void); |
2274 | 2384 |
2275 /* In sched-ebb.c. */ | 2385 /* In sched-ebb.c. */ |
2276 extern void schedule_ebbs (void); | 2386 extern void schedule_ebbs (void); |
2277 | 2387 |
2278 /* In haifa-sched.c. */ | |
2279 extern void fix_sched_param (const char *, const char *); | |
2280 | |
2281 /* In sel-sched-dump.c. */ | 2388 /* In sel-sched-dump.c. */ |
2282 extern void sel_sched_fix_param (const char *param, const char *val); | 2389 extern void sel_sched_fix_param (const char *param, const char *val); |
2283 | 2390 |
2284 /* In print-rtl.c */ | 2391 /* In print-rtl.c */ |
2285 extern const char *print_rtx_head; | 2392 extern const char *print_rtx_head; |
2297 extern void reposition_prologue_and_epilogue_notes (void); | 2404 extern void reposition_prologue_and_epilogue_notes (void); |
2298 extern int prologue_epilogue_contains (const_rtx); | 2405 extern int prologue_epilogue_contains (const_rtx); |
2299 extern int sibcall_epilogue_contains (const_rtx); | 2406 extern int sibcall_epilogue_contains (const_rtx); |
2300 extern void mark_temp_addr_taken (rtx); | 2407 extern void mark_temp_addr_taken (rtx); |
2301 extern void update_temp_slot_address (rtx, rtx); | 2408 extern void update_temp_slot_address (rtx, rtx); |
2302 extern void maybe_copy_epilogue_insn (rtx, rtx); | 2409 extern void maybe_copy_prologue_epilogue_insn (rtx, rtx); |
2303 | 2410 |
2304 /* In stmt.c */ | 2411 /* In stmt.c */ |
2305 extern void expand_null_return (void); | 2412 extern void expand_null_return (void); |
2306 extern void expand_naked_return (void); | 2413 extern void expand_naked_return (void); |
2307 extern void emit_jump (rtx); | 2414 extern void emit_jump (rtx); |
2332 extern HARD_REG_SET eliminable_regset; | 2439 extern HARD_REG_SET eliminable_regset; |
2333 #endif | 2440 #endif |
2334 extern void mark_elimination (int, int); | 2441 extern void mark_elimination (int, int); |
2335 | 2442 |
2336 /* In reginfo.c */ | 2443 /* In reginfo.c */ |
2337 extern int reg_classes_intersect_p (enum reg_class, enum reg_class); | 2444 extern int reg_classes_intersect_p (reg_class_t, reg_class_t); |
2338 extern int reg_class_subset_p (enum reg_class, enum reg_class); | 2445 extern int reg_class_subset_p (reg_class_t, reg_class_t); |
2339 extern void globalize_reg (int); | 2446 extern void globalize_reg (int); |
2340 extern void init_reg_modes_target (void); | 2447 extern void init_reg_modes_target (void); |
2341 extern void init_regs (void); | 2448 extern void init_regs (void); |
2342 extern void reinit_regs (void); | 2449 extern void reinit_regs (void); |
2343 extern void init_fake_stack_mems (void); | 2450 extern void init_fake_stack_mems (void); |
2344 extern void save_register_info (void); | 2451 extern void save_register_info (void); |
2345 extern void init_reg_sets (void); | 2452 extern void init_reg_sets (void); |
2346 extern void regclass (rtx, int); | 2453 extern void regclass (rtx, int); |
2347 extern void reg_scan (rtx, unsigned int); | 2454 extern void reg_scan (rtx, unsigned int); |
2348 extern void fix_register (const char *, int, int); | 2455 extern void fix_register (const char *, int, int); |
2349 extern bool invalid_mode_change_p (unsigned int, enum reg_class, | 2456 extern bool invalid_mode_change_p (unsigned int, enum reg_class); |
2350 enum machine_mode); | |
2351 | 2457 |
2352 /* In reorg.c */ | 2458 /* In reorg.c */ |
2353 extern void dbr_schedule (rtx); | 2459 extern void dbr_schedule (rtx); |
2354 | 2460 |
2355 /* In reload1.c */ | 2461 /* In reload1.c */ |
2371 extern rtx emit_library_call_value (rtx, rtx, enum libcall_type, | 2477 extern rtx emit_library_call_value (rtx, rtx, enum libcall_type, |
2372 enum machine_mode, int, ...); | 2478 enum machine_mode, int, ...); |
2373 | 2479 |
2374 /* In varasm.c */ | 2480 /* In varasm.c */ |
2375 extern void init_varasm_once (void); | 2481 extern void init_varasm_once (void); |
2376 extern enum tls_model decl_default_tls_model (const_tree); | |
2377 | 2482 |
2378 extern rtx make_debug_expr_from_rtl (const_rtx); | 2483 extern rtx make_debug_expr_from_rtl (const_rtx); |
2379 | 2484 |
2380 /* In rtl.c */ | |
2381 extern void traverse_md_constants (int (*) (void **, void *), void *); | |
2382 struct md_constant { char *name, *value; }; | |
2383 | |
2384 /* In read-rtl.c */ | 2485 /* In read-rtl.c */ |
2385 extern int read_skip_spaces (FILE *); | 2486 extern bool read_rtx (const char *, rtx *); |
2386 extern bool read_rtx (FILE *, rtx *, int *); | |
2387 extern void copy_rtx_ptr_loc (const void *, const void *); | |
2388 extern void print_rtx_ptr_loc (const void *); | |
2389 extern const char *join_c_conditions (const char *, const char *); | |
2390 extern void print_c_condition (const char *); | |
2391 extern const char *read_rtx_filename; | |
2392 extern int read_rtx_lineno; | |
2393 | 2487 |
2394 /* In alias.c */ | 2488 /* In alias.c */ |
2395 extern rtx canon_rtx (rtx); | 2489 extern rtx canon_rtx (rtx); |
2396 extern int true_dependence (const_rtx, enum machine_mode, const_rtx, bool (*)(const_rtx, bool)); | 2490 extern int true_dependence (const_rtx, enum machine_mode, const_rtx, bool (*)(const_rtx, bool)); |
2397 extern rtx get_addr (rtx); | 2491 extern rtx get_addr (rtx); |
2398 extern int canon_true_dependence (const_rtx, enum machine_mode, rtx, const_rtx, | 2492 extern int canon_true_dependence (const_rtx, enum machine_mode, rtx, const_rtx, |
2399 rtx, bool (*)(const_rtx, bool)); | 2493 rtx, bool (*)(const_rtx, bool)); |
2400 extern int read_dependence (const_rtx, const_rtx); | 2494 extern int read_dependence (const_rtx, const_rtx); |
2401 extern int anti_dependence (const_rtx, const_rtx); | 2495 extern int anti_dependence (const_rtx, const_rtx); |
2402 extern int output_dependence (const_rtx, const_rtx); | 2496 extern int output_dependence (const_rtx, const_rtx); |
2497 extern int may_alias_p (const_rtx, const_rtx); | |
2403 extern void init_alias_target (void); | 2498 extern void init_alias_target (void); |
2404 extern void init_alias_analysis (void); | 2499 extern void init_alias_analysis (void); |
2405 extern void end_alias_analysis (void); | 2500 extern void end_alias_analysis (void); |
2501 extern void vt_equate_reg_base_value (const_rtx, const_rtx); | |
2406 extern bool memory_modified_in_insn_p (const_rtx, const_rtx); | 2502 extern bool memory_modified_in_insn_p (const_rtx, const_rtx); |
2407 extern rtx find_base_term (rtx); | 2503 extern rtx find_base_term (rtx); |
2408 extern rtx gen_hard_reg_clobber (enum machine_mode, unsigned int); | 2504 extern rtx gen_hard_reg_clobber (enum machine_mode, unsigned int); |
2409 extern rtx get_reg_known_value (unsigned int); | 2505 extern rtx get_reg_known_value (unsigned int); |
2410 extern bool get_reg_known_equiv_p (unsigned int); | 2506 extern bool get_reg_known_equiv_p (unsigned int); |
2507 extern rtx get_reg_base_value (unsigned int); | |
2411 | 2508 |
2412 #ifdef STACK_REGS | 2509 #ifdef STACK_REGS |
2413 extern int stack_regs_mentioned (const_rtx insn); | 2510 extern int stack_regs_mentioned (const_rtx insn); |
2414 #endif | 2511 #endif |
2415 | 2512 |
2470 extern tree get_curr_insn_block (void); | 2567 extern tree get_curr_insn_block (void); |
2471 extern int curr_insn_locator (void); | 2568 extern int curr_insn_locator (void); |
2472 extern bool optimize_insn_for_size_p (void); | 2569 extern bool optimize_insn_for_size_p (void); |
2473 extern bool optimize_insn_for_speed_p (void); | 2570 extern bool optimize_insn_for_speed_p (void); |
2474 | 2571 |
2572 /* rtl-error.c */ | |
2573 extern void _fatal_insn_not_found (const_rtx, const char *, int, const char *) | |
2574 ATTRIBUTE_NORETURN; | |
2575 extern void _fatal_insn (const char *, const_rtx, const char *, int, const char *) | |
2576 ATTRIBUTE_NORETURN; | |
2577 | |
2578 #define fatal_insn(msgid, insn) \ | |
2579 _fatal_insn (msgid, insn, __FILE__, __LINE__, __FUNCTION__) | |
2580 #define fatal_insn_not_found(insn) \ | |
2581 _fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__) | |
2582 | |
2583 | |
2584 | |
2475 #endif /* ! GCC_RTL_H */ | 2585 #endif /* ! GCC_RTL_H */ |