aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2014-05-13 10:39:16 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2014-05-13 10:39:16 +0000
commitda3cd1136113a13ae25b7deaf4bc02e250af054c (patch)
treebc60a87a8aa3c9a5fb0a854d48dfb065714a3899
parentfcc74520d0d99921af1d22971465d07225b488f9 (diff)
downloadgcc-da3cd1136113a13ae25b7deaf4bc02e250af054c.zip
gcc-da3cd1136113a13ae25b7deaf4bc02e250af054c.tar.gz
gcc-da3cd1136113a13ae25b7deaf4bc02e250af054c.tar.bz2
rtl.def (SYMBOL_REF): Remove middle "0" field.
gcc/ * rtl.def (SYMBOL_REF): Remove middle "0" field. * rtl.h (block_symbol): Reduce number of fields to 2. (rtx_def): Add u2.symbol_ref_flags. (SYMBOL_REF_FLAGS): Use it. (SYMBOL_REF_DATA, SET_SYMBOL_REF_DECL, SYMBOL_REF_DECL) (SET_SYMBOL_REF_CONSTANT, SYMBOL_REF_CONSTANT): Lower index. * gengtype.c (adjust_field_rtx_def): Remove SYMBOL_REF_FLAGS handling. Lower index of SYMBOL_REF_DATA. * print-rtl.c (print_rtx): Lower index for SYMBOL_REF_DATA. Print SYMBOL_REF_FLAGS at the same time. * genattrtab.c (attr_rtx_1): Only initialize 1 "0" SYMBOL_REF field. From-SVN: r210363
-rw-r--r--gcc/ChangeLog14
-rw-r--r--gcc/genattrtab.c5
-rw-r--r--gcc/gengtype.c2
-rw-r--r--gcc/print-rtl.c3
-rw-r--r--gcc/rtl.def5
-rw-r--r--gcc/rtl.h19
6 files changed, 29 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 52daf01..210eeb4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,19 @@
2014-05-13 Richard Sandiford <rdsandiford@googlemail.com>
+ * rtl.def (SYMBOL_REF): Remove middle "0" field.
+ * rtl.h (block_symbol): Reduce number of fields to 2.
+ (rtx_def): Add u2.symbol_ref_flags.
+ (SYMBOL_REF_FLAGS): Use it.
+ (SYMBOL_REF_DATA, SET_SYMBOL_REF_DECL, SYMBOL_REF_DECL)
+ (SET_SYMBOL_REF_CONSTANT, SYMBOL_REF_CONSTANT): Lower index.
+ * gengtype.c (adjust_field_rtx_def): Remove SYMBOL_REF_FLAGS handling.
+ Lower index of SYMBOL_REF_DATA.
+ * print-rtl.c (print_rtx): Lower index for SYMBOL_REF_DATA.
+ Print SYMBOL_REF_FLAGS at the same time.
+ * genattrtab.c (attr_rtx_1): Only initialize 1 "0" SYMBOL_REF field.
+
+2014-05-13 Richard Sandiford <rdsandiford@googlemail.com>
+
* rtl.def (VAR_LOCATION): Remove "i" field.
* rtl.h (rtx_def): Add u2.var_location_status.
(PAT_VAR_LOCATION_STATUS): Use it.
diff --git a/gcc/genattrtab.c b/gcc/genattrtab.c
index 0f14b4d..c5ce51c 100644
--- a/gcc/genattrtab.c
+++ b/gcc/genattrtab.c
@@ -473,10 +473,7 @@ attr_rtx_1 (enum rtx_code code, va_list p)
rt_val = rtx_alloc (code);
XSTR (rt_val, 0) = arg0;
if (code == SYMBOL_REF)
- {
- X0EXP (rt_val, 1) = NULL_RTX;
- X0EXP (rt_val, 2) = NULL_RTX;
- }
+ X0EXP (rt_val, 1) = NULL_RTX;
}
}
else if (GET_RTX_LENGTH (code) == 2
diff --git a/gcc/gengtype.c b/gcc/gengtype.c
index 26e0c58..b6e1718 100644
--- a/gcc/gengtype.c
+++ b/gcc/gengtype.c
@@ -1250,8 +1250,6 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt))
else if (i == REG && aindex == 1)
t = reg_attrs_tp, subname = "rt_reg";
else if (i == SYMBOL_REF && aindex == 1)
- t = scalar_tp, subname = "rt_int";
- else if (i == SYMBOL_REF && aindex == 2)
t = symbol_union_tp, subname = "";
else if (i == JUMP_TABLE_DATA && aindex >= 4)
t = scalar_tp, subname = "rt_int";
diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c
index 9d90325..66d98b1 100644
--- a/gcc/print-rtl.c
+++ b/gcc/print-rtl.c
@@ -224,9 +224,6 @@ print_rtx (const_rtx in_rtx)
int flags = SYMBOL_REF_FLAGS (in_rtx);
if (flags)
fprintf (outfile, " [flags %#x]", flags);
- }
- else if (i == 2 && GET_CODE (in_rtx) == SYMBOL_REF)
- {
tree decl = SYMBOL_REF_DECL (in_rtx);
if (decl)
print_node_brief (outfile, "", decl, dump_flags);
diff --git a/gcc/rtl.def b/gcc/rtl.def
index 18acc6b..d157b17 100644
--- a/gcc/rtl.def
+++ b/gcc/rtl.def
@@ -429,10 +429,9 @@ DEF_RTL_EXPR(LABEL_REF, "label_ref", "u", RTX_CONST_OBJ)
/* Reference to a named label:
Operand 0: label name
- Operand 1: flags (see SYMBOL_FLAG_* in rtl.h)
- Operand 2: tree from which this symbol is derived, or null.
+ Operand 1: tree from which this symbol is derived, or null.
This is either a DECL node, or some kind of constant. */
-DEF_RTL_EXPR(SYMBOL_REF, "symbol_ref", "s00", RTX_CONST_OBJ)
+DEF_RTL_EXPR(SYMBOL_REF, "symbol_ref", "s0", RTX_CONST_OBJ)
/* The condition code register is represented, in our imagination,
as a register holding a value that can be compared to zero.
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 6e97dcd..aad1853 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -211,7 +211,7 @@ union rtunion
if SYMBOL_REF_HAS_BLOCK_INFO_P is true. */
struct GTY(()) block_symbol {
/* The usual SYMBOL_REF fields. */
- rtunion GTY ((skip)) fld[3];
+ rtunion GTY ((skip)) fld[2];
/* The block that contains this object. */
struct object_block *block;
@@ -362,6 +362,9 @@ struct GTY((chain_next ("RTX_NEXT (&%h)"),
/* The INSN_UID of an RTX_INSN-class code. */
int insn_uid;
+ /* The SYMBOL_REF_FLAGS of a SYMBOL_REF. */
+ unsigned int symbol_ref_flags;
+
/* The PAT_VAR_LOCATION_STATUS of a VAR_LOCATION. */
enum var_init_status var_location_status;
@@ -1765,24 +1768,24 @@ do { \
/* A pointer attached to the SYMBOL_REF; either SYMBOL_REF_DECL or
SYMBOL_REF_CONSTANT. */
-#define SYMBOL_REF_DATA(RTX) X0ANY ((RTX), 2)
+#define SYMBOL_REF_DATA(RTX) X0ANY ((RTX), 1)
/* Set RTX's SYMBOL_REF_DECL to DECL. RTX must not be a constant
pool symbol. */
#define SET_SYMBOL_REF_DECL(RTX, DECL) \
- (gcc_assert (!CONSTANT_POOL_ADDRESS_P (RTX)), X0TREE ((RTX), 2) = (DECL))
+ (gcc_assert (!CONSTANT_POOL_ADDRESS_P (RTX)), X0TREE ((RTX), 1) = (DECL))
/* The tree (decl or constant) associated with the symbol, or null. */
#define SYMBOL_REF_DECL(RTX) \
- (CONSTANT_POOL_ADDRESS_P (RTX) ? NULL : X0TREE ((RTX), 2))
+ (CONSTANT_POOL_ADDRESS_P (RTX) ? NULL : X0TREE ((RTX), 1))
/* Set RTX's SYMBOL_REF_CONSTANT to C. RTX must be a constant pool symbol. */
#define SET_SYMBOL_REF_CONSTANT(RTX, C) \
- (gcc_assert (CONSTANT_POOL_ADDRESS_P (RTX)), X0CONSTANT ((RTX), 2) = (C))
+ (gcc_assert (CONSTANT_POOL_ADDRESS_P (RTX)), X0CONSTANT ((RTX), 1) = (C))
/* The rtx constant pool entry for a symbol, or null. */
#define SYMBOL_REF_CONSTANT(RTX) \
- (CONSTANT_POOL_ADDRESS_P (RTX) ? X0CONSTANT ((RTX), 2) : NULL)
+ (CONSTANT_POOL_ADDRESS_P (RTX) ? X0CONSTANT ((RTX), 1) : NULL)
/* A set of flags on a symbol_ref that are, in some respects, redundant with
information derivable from the tree decl associated with this symbol.
@@ -1791,7 +1794,9 @@ do { \
this information to avoid recomputing it. Finally, this allows space for
the target to store more than one bit of information, as with
SYMBOL_REF_FLAG. */
-#define SYMBOL_REF_FLAGS(RTX) X0INT ((RTX), 1)
+#define SYMBOL_REF_FLAGS(RTX) \
+ (RTL_FLAG_CHECK1 ("SYMBOL_REF_FLAGS", (RTX), SYMBOL_REF) \
+ ->u2.symbol_ref_flags)
/* These flags are common enough to be defined for all targets. They
are computed by the default version of targetm.encode_section_info. */