]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 May 2014 10:39:08 +0000 (10:39 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 May 2014 10:39:08 +0000 (10:39 +0000)
* 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

gcc/ChangeLog
gcc/emit-rtl.c
gcc/gengenrtl.c
gcc/rtl.def
gcc/rtl.h
gcc/var-tracking.c

index 7a06499092d20f1f4e8fddb56edd61feb731884f..52daf01f522e2e7cfec6a0cf28c3485a6a3ff414 100644 (file)
@@ -1,3 +1,13 @@
+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.
index ab44aba705ce885d9a7244471b63755390e0c2a8..79763d8093751a9ac81df6a8c527609b290073fa 100644 (file)
@@ -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;
+}
 \f
 
 /* Create an rtvec and stores within it the RTXen passed in the arguments.  */
index d82ee39e7ee86d4a3fcc03c968d64e1c76335db8..550efb8e17091329a83a4841fbde40f4c47b0c04 100644 (file)
@@ -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.  */
index dda556daf699cf2e37c4f0ca1d03c8561f54f7fc..18acc6b8070fee4d66283cacb4f668e906d81036 100644 (file)
@@ -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.  */
index 46d0a118d88471ff9f5b7d92e31bcd2a7cc2e8c0..6e97dcd997825e90f4c0bbec4bffa37ca202f8a6 100644 (file)
--- 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))
 
index f36a1e9a6921255817fa4f75a65a24caada840ee..9e71165e1c78c040d29d35e2cbd37f11b7584dfa 100644 (file)
@@ -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)