[76/77] Add a scalar_mode_pod class
authorRichard Sandiford <richard.sandiford@linaro.org>
Wed, 30 Aug 2017 11:20:55 +0000 (11:20 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 30 Aug 2017 11:20:55 +0000 (11:20 +0000)
This patch adds a scalar_mode_pod class and uses it to
replace the machine_mode in fixed_value.

2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* coretypes.h (scalar_mode_pod): New typedef.
* gdbhooks.py (build_pretty_printer): Handle it.
* machmode.h (gt_ggc_mx, gt_pch_nx): New functions.
* fixed-value.h (fixed_value::mode): Change type to scalar_mode_pod.
* fold-const.c (fold_convert_const_int_from_fixed): Use scalar_mode.
* tree-streamer-in.c (unpack_ts_fixed_cst_value_fields): Use
as_a <scalar_mode>.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r251526

gcc/ChangeLog
gcc/coretypes.h
gcc/fixed-value.h
gcc/fold-const.c
gcc/gdbhooks.py
gcc/machmode.h
gcc/tree-streamer-in.c

index bc704067bf063cf04f9c426dd04cda86a3293cf1..bb813131eeb3a8cc60c4fdbb16d886cc6fe3715e 100644 (file)
@@ -1,3 +1,15 @@
+2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
+           Alan Hayward  <alan.hayward@arm.com>
+           David Sherwood  <david.sherwood@arm.com>
+
+       * coretypes.h (scalar_mode_pod): New typedef.
+       * gdbhooks.py (build_pretty_printer): Handle it.
+       * machmode.h (gt_ggc_mx, gt_pch_nx): New functions.
+       * fixed-value.h (fixed_value::mode): Change type to scalar_mode_pod.
+       * fold-const.c (fold_convert_const_int_from_fixed): Use scalar_mode.
+       * tree-streamer-in.c (unpack_ts_fixed_cst_value_fields): Use
+       as_a <scalar_mode>.
+
 2017-08-30  Richard Sandiford  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
            David Sherwood  <david.sherwood@arm.com>
index ffe793e409d8ec0647564e62009e083ce2366b8f..8ccf16e5e4ad06ad92fcbee9080e07ede29b3a5e 100644 (file)
@@ -63,6 +63,7 @@ typedef opt_mode<scalar_mode> opt_scalar_mode;
 typedef opt_mode<scalar_int_mode> opt_scalar_int_mode;
 typedef opt_mode<scalar_float_mode> opt_scalar_float_mode;
 template<typename> class pod_mode;
+typedef pod_mode<scalar_mode> scalar_mode_pod;
 typedef pod_mode<scalar_int_mode> scalar_int_mode_pod;
 
 /* Subclasses of rtx_def, using indentation to show the class
index cc2180b3920029f0d7943d934516c1444d4005c1..1beb77426a440e8118c28558a4392f00932493f6 100644 (file)
@@ -22,8 +22,8 @@ along with GCC; see the file COPYING3.  If not see
 
 struct GTY(()) fixed_value
 {
-  double_int data;             /* Store data up to 2 wide integers.  */
-  machine_mode mode;   /* Use machine mode to know IBIT and FBIT.  */
+  double_int data;       /* Store data up to 2 wide integers.  */
+  scalar_mode_pod mode;  /* Use machine mode to know IBIT and FBIT.  */
 };
 
 #define FIXED_VALUE_TYPE struct fixed_value
index c921f1cf927d67a85109cbccdd24a56eaa9136f6..f3c84a8d02b5309422c8e2f1a1c75c720c386a77 100644 (file)
@@ -1944,7 +1944,7 @@ fold_convert_const_int_from_fixed (tree type, const_tree arg1)
 {
   tree t;
   double_int temp, temp_trunc;
-  machine_mode mode;
+  scalar_mode mode;
 
   /* Right shift FIXED_CST to temp by fbit.  */
   temp = TREE_FIXED_CST (arg1).data;
index e5f0cf6f31b9cc1257e366b50a461f1db91534c8..acf54351e23ad6121f7fbc2728aa82886935c6ba 100644 (file)
@@ -548,7 +548,8 @@ def build_pretty_printer():
                              'opt_mode', OptMachineModePrinter)
     pp.add_printer_for_regex(r'pod_mode<(\S+)>',
                              'pod_mode', MachineModePrinter)
-    pp.add_printer_for_types(['scalar_int_mode_pod'],
+    pp.add_printer_for_types(['scalar_int_mode_pod',
+                              'scalar_mode_pod'],
                              'pod_mode', MachineModePrinter)
     for mode in 'scalar_mode', 'scalar_int_mode', 'scalar_float_mode':
         pp.add_printer_for_types([mode], mode, MachineModePrinter)
index b3e79ca4df6850170269b1053e6cee82f099c394..73c45beb65550b201c62bd593d87b233feae399d 100644 (file)
@@ -893,4 +893,22 @@ namespace mode_iterator
        mode_iterator::iterate_p (&(ITERATOR)); \
        mode_iterator::get_2xwider (&(ITERATOR)))
 
+template<typename T>
+void
+gt_ggc_mx (pod_mode<T> *)
+{
+}
+
+template<typename T>
+void
+gt_pch_nx (pod_mode<T> *)
+{
+}
+
+template<typename T>
+void
+gt_pch_nx (pod_mode<T> *, void (*) (void *, void *), void *)
+{
+}
+
 #endif /* not HAVE_MACHINE_MODES */
index 8d47547967e8ce4301a4b3cae77b30ef815c9982..baf0c5bf8373071daad06aaad340c07b7959c3ab 100644 (file)
@@ -211,7 +211,7 @@ static void
 unpack_ts_fixed_cst_value_fields (struct bitpack_d *bp, tree expr)
 {
   FIXED_VALUE_TYPE *fp = ggc_alloc<fixed_value> ();
-  fp->mode = bp_unpack_machine_mode (bp);
+  fp->mode = as_a <scalar_mode> (bp_unpack_machine_mode (bp));
   fp->data.low = bp_unpack_var_len_int (bp);
   fp->data.high = bp_unpack_var_len_int (bp);
   TREE_FIXED_CST_PTR (expr) = fp;