summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2014-05-13 10:39:08 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2014-05-13 10:39:08 +0000
commite1398578201f88b8f4eac524003bce5f599d376b (patch)
tree2dffcda2eced8481083fed30ba21943ecb650e2b /gcc
parent78c24cc9e099a45949a75c9fda7284ac9f212493 (diff)
downloadgcc-e1398578201f88b8f4eac524003bce5f599d376b.tar.gz
gcc/
* rtl.def (VAR_LOCATION): Remove "i" field. * rtl.h (rtx_def): Add u2.var_location_status. (PAT_VAR_LOCATION_STATUS): Use it. (gen_rtx_VAR_LOCATION): Declare. * gengenrtl.c (excluded_rtx): Add VAR_LOCATION. * emit-rtl.c (gen_rtx_VAR_LOCATION): New function. * var-tracking.c (emit_note_insn_var_location): Remove casts. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210362 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/emit-rtl.c9
-rw-r--r--gcc/gengenrtl.c7
-rw-r--r--gcc/rtl.def4
-rw-r--r--gcc/rtl.h8
-rw-r--r--gcc/var-tracking.c8
6 files changed, 34 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7a06499092d..52daf01f522 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,15 @@
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.
+ (gen_rtx_VAR_LOCATION): Declare.
+ * gengenrtl.c (excluded_rtx): Add VAR_LOCATION.
+ * emit-rtl.c (gen_rtx_VAR_LOCATION): New function.
+ * var-tracking.c (emit_note_insn_var_location): Remove casts.
+
+2014-05-13 Richard Sandiford <rdsandiford@googlemail.com>
+
* rtl.def (scratch): Fix outdated comment and remove "0" field.
* gengtype.c (adjust_field_rtx_def): Update accordingly.
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index ab44aba705c..79763d80937 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -859,6 +859,15 @@ gen_lowpart_SUBREG (enum machine_mode mode, rtx reg)
return gen_rtx_SUBREG (mode, reg,
subreg_lowpart_offset (mode, inmode));
}
+
+rtx
+gen_rtx_VAR_LOCATION (enum machine_mode mode, tree decl, rtx loc,
+ enum var_init_status status)
+{
+ rtx x = gen_rtx_fmt_te (VAR_LOCATION, mode, decl, loc);
+ PAT_VAR_LOCATION_STATUS (x) = status;
+ return x;
+}
/* Create an rtvec and stores within it the RTXen passed in the arguments. */
diff --git a/gcc/gengenrtl.c b/gcc/gengenrtl.c
index d82ee39e7ee..550efb8e170 100644
--- a/gcc/gengenrtl.c
+++ b/gcc/gengenrtl.c
@@ -141,9 +141,10 @@ special_rtx (int idx)
static int
excluded_rtx (int idx)
{
- return ((strcmp (defs[idx].enumname, "CONST_DOUBLE") == 0)
- || (strcmp (defs[idx].enumname, "CONST_WIDE_INT") == 0)
- || (strcmp (defs[idx].enumname, "CONST_FIXED") == 0));
+ return (strcmp (defs[idx].enumname, "VAR_LOCATION") == 0
+ || strcmp (defs[idx].enumname, "CONST_DOUBLE") == 0
+ || strcmp (defs[idx].enumname, "CONST_WIDE_INT") == 0
+ || strcmp (defs[idx].enumname, "CONST_FIXED") == 0);
}
/* Place a list of all format specifiers we use into the array FORMAT. */
diff --git a/gcc/rtl.def b/gcc/rtl.def
index dda556daf69..18acc6b8070 100644
--- a/gcc/rtl.def
+++ b/gcc/rtl.def
@@ -747,9 +747,7 @@ DEF_RTL_EXPR(US_TRUNCATE, "us_truncate", "e", RTX_UNARY)
DEF_RTL_EXPR(FMA, "fma", "eee", RTX_TERNARY)
/* Information about the variable and its location. */
-/* Changed 'te' to 'tei'; the 'i' field is for recording
- initialization status of variables. */
-DEF_RTL_EXPR(VAR_LOCATION, "var_location", "tei", RTX_EXTRA)
+DEF_RTL_EXPR(VAR_LOCATION, "var_location", "te", RTX_EXTRA)
/* Used in VAR_LOCATION for a pointer to a decl that is no longer
addressable. */
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 46d0a118d88..6e97dcd9978 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -362,6 +362,9 @@ struct GTY((chain_next ("RTX_NEXT (&%h)"),
/* The INSN_UID of an RTX_INSN-class code. */
int insn_uid;
+ /* The PAT_VAR_LOCATION_STATUS of a VAR_LOCATION. */
+ enum var_init_status var_location_status;
+
/* In a CONST_WIDE_INT (aka hwivec_def), this is the number of
HOST_WIDE_INTs in the hwivec_def. */
unsigned int num_elem;
@@ -1055,7 +1058,8 @@ extern const char * const reg_note_name[];
can be unknown, uninitialized or initialized. See enumeration
type below. */
#define PAT_VAR_LOCATION_STATUS(PAT) \
- ((enum var_init_status) (XCINT ((PAT), 2, VAR_LOCATION)))
+ (RTL_FLAG_CHECK1 ("PAT_VAR_LOCATION_STATUS", PAT, VAR_LOCATION) \
+ ->u2.var_location_status)
/* Accessors for a NOTE_INSN_VAR_LOCATION. */
#define NOTE_VAR_LOCATION_DECL(NOTE) \
@@ -2561,6 +2565,8 @@ extern rtx gen_raw_REG (enum machine_mode, int);
extern rtx gen_rtx_REG (enum machine_mode, unsigned);
extern rtx gen_rtx_SUBREG (enum machine_mode, rtx, int);
extern rtx gen_rtx_MEM (enum machine_mode, rtx);
+extern rtx gen_rtx_VAR_LOCATION (enum machine_mode, tree, rtx,
+ enum var_init_status);
#define GEN_INT(N) gen_rtx_CONST_INT (VOIDmode, (N))
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index f36a1e9a692..9e71165e1c7 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -8748,8 +8748,7 @@ emit_note_insn_var_location (variable_def **varp, emit_note_data *data)
note_vl = NULL_RTX;
if (!complete)
- note_vl = gen_rtx_VAR_LOCATION (VOIDmode, decl, NULL_RTX,
- (int) initialized);
+ note_vl = gen_rtx_VAR_LOCATION (VOIDmode, decl, NULL_RTX, initialized);
else if (n_var_parts == 1)
{
rtx expr_list;
@@ -8759,8 +8758,7 @@ emit_note_insn_var_location (variable_def **varp, emit_note_data *data)
else
expr_list = loc[0];
- note_vl = gen_rtx_VAR_LOCATION (VOIDmode, decl, expr_list,
- (int) initialized);
+ note_vl = gen_rtx_VAR_LOCATION (VOIDmode, decl, expr_list, initialized);
}
else if (n_var_parts)
{
@@ -8773,7 +8771,7 @@ emit_note_insn_var_location (variable_def **varp, emit_note_data *data)
parallel = gen_rtx_PARALLEL (VOIDmode,
gen_rtvec_v (n_var_parts, loc));
note_vl = gen_rtx_VAR_LOCATION (VOIDmode, decl,
- parallel, (int) initialized);
+ parallel, initialized);
}
if (where != EMIT_NOTE_BEFORE_INSN)