diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-05-13 10:39:08 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-05-13 10:39:08 +0000 |
commit | e1398578201f88b8f4eac524003bce5f599d376b (patch) | |
tree | 2dffcda2eced8481083fed30ba21943ecb650e2b /gcc | |
parent | 78c24cc9e099a45949a75c9fda7284ac9f212493 (diff) | |
download | gcc-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/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/emit-rtl.c | 9 | ||||
-rw-r--r-- | gcc/gengenrtl.c | 7 | ||||
-rw-r--r-- | gcc/rtl.def | 4 | ||||
-rw-r--r-- | gcc/rtl.h | 8 | ||||
-rw-r--r-- | gcc/var-tracking.c | 8 |
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) |