Make LTO's implementation of LANG_HOOKS_TYPE_FOR_SIZE the default
authorDavid Malcolm <dmalcolm@redhat.com>
Thu, 19 Jan 2017 17:27:54 +0000 (17:27 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Thu, 19 Jan 2017 17:27:54 +0000 (17:27 +0000)
gcc/jit/ChangeLog:
* dummy-frontend.c (jit_langhook_type_for_size): Delete.
(LANG_HOOKS_TYPE_FOR_SIZE): Don't redefine.

gcc/ChangeLog:
* langhooks-def.h (lhd_type_for_size): New decl.
(LANG_HOOKS_TYPE_FOR_SIZE): Define as lhd_type_for_size.
* langhooks.c (lhd_type_for_size): New function, taken from
lto_type_for_size.

gcc/lto/ChangeLog:
* lto-lang.c (builtin_type_for_size): Convert call to
lto_type_for_size to one through the langhook.
(lto_type_for_size): Move to langhooks.c and rename to
lhd_type_for_size.
(LANG_HOOKS_TYPE_FOR_SIZE): Don't redefine.

From-SVN: r244646

gcc/ChangeLog
gcc/jit/ChangeLog
gcc/jit/dummy-frontend.c
gcc/langhooks-def.h
gcc/langhooks.c
gcc/lto/ChangeLog
gcc/lto/lto-lang.c

index 7d678102285f0f8d5eceb69b8aee3aa227e8ee92..a51167089e627825866d9ced5a8237fc01bcffbc 100644 (file)
@@ -1,3 +1,10 @@
+2017-01-19  David Malcolm  <dmalcolm@redhat.com>
+
+       * langhooks-def.h (lhd_type_for_size): New decl.
+       (LANG_HOOKS_TYPE_FOR_SIZE): Define as lhd_type_for_size.
+       * langhooks.c (lhd_type_for_size): New function, taken from
+       lto_type_for_size.
+
 2017-01-19  Pat Haugen  <pthaugen@us.ibm.com>
 
        * config/rs6000/power9.md (power9-alu): Remove 'cmp' type and add
index 712382ca1274cad2c418cd8d35b668e2470bc279..e03f9ac5455b1589ca76fa1c09d454560b270275 100644 (file)
@@ -1,3 +1,8 @@
+2017-01-19  David Malcolm  <dmalcolm@redhat.com>
+
+       * dummy-frontend.c (jit_langhook_type_for_size): Delete.
+       (LANG_HOOKS_TYPE_FOR_SIZE): Don't redefine.
+
 2017-01-18  David Malcolm  <dmalcolm@redhat.com>
 
        * dummy-frontend.c (jit_langhook_type_for_size): Implement, using
index 4c7932bab88bdcd5e1edeb69791d366e47375fd9..87f583f68c2c67c6734c68072e68c34d5328bc89 100644 (file)
@@ -207,55 +207,6 @@ jit_langhook_type_for_mode (enum machine_mode mode, int unsignedp)
   return NULL;
 }
 
-/* Return an integer type with PRECISION bits of precision,
-   that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
-
-static tree
-jit_langhook_type_for_size (unsigned precision, int unsignedp)
-{
-  int i;
-
-  if (precision == TYPE_PRECISION (integer_type_node))
-    return unsignedp ? unsigned_type_node : integer_type_node;
-
-  if (precision == TYPE_PRECISION (signed_char_type_node))
-    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
-
-  if (precision == TYPE_PRECISION (short_integer_type_node))
-    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
-
-  if (precision == TYPE_PRECISION (long_integer_type_node))
-    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
-
-  if (precision == TYPE_PRECISION (long_long_integer_type_node))
-    return unsignedp
-          ? long_long_unsigned_type_node
-          : long_long_integer_type_node;
-
-  for (i = 0; i < NUM_INT_N_ENTS; i ++)
-    if (int_n_enabled_p[i]
-       && precision == int_n_data[i].bitsize)
-      return (unsignedp ? int_n_trees[i].unsigned_type
-             : int_n_trees[i].signed_type);
-
-  if (precision <= TYPE_PRECISION (intQI_type_node))
-    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
-
-  if (precision <= TYPE_PRECISION (intHI_type_node))
-    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
-
-  if (precision <= TYPE_PRECISION (intSI_type_node))
-    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
-
-  if (precision <= TYPE_PRECISION (intDI_type_node))
-    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
-
-  if (precision <= TYPE_PRECISION (intTI_type_node))
-    return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
-
-  return NULL_TREE;
-}
-
 /* Record a builtin function.  We just ignore builtin functions.  */
 
 static tree
@@ -295,9 +246,6 @@ jit_langhook_getdecls (void)
 #undef LANG_HOOKS_TYPE_FOR_MODE
 #define LANG_HOOKS_TYPE_FOR_MODE       jit_langhook_type_for_mode
 
-#undef LANG_HOOKS_TYPE_FOR_SIZE
-#define LANG_HOOKS_TYPE_FOR_SIZE       jit_langhook_type_for_size
-
 #undef LANG_HOOKS_BUILTIN_FUNCTION
 #define LANG_HOOKS_BUILTIN_FUNCTION    jit_langhook_builtin_function
 
index db7587bd1758e5e952cf9f3f78a69fbc18b665db..eb680848f6a50dd0770e4b8d6f61ae897e151cca 100644 (file)
@@ -52,6 +52,7 @@ extern void lhd_print_error_function (diagnostic_context *,
                                      const char *, struct diagnostic_info *);
 extern void lhd_set_decl_assembler_name (tree);
 extern bool lhd_warn_unused_global_decl (const_tree);
+extern tree lhd_type_for_size (unsigned precision, int unsignedp);
 extern void lhd_incomplete_type_error (location_t, const_tree, const_tree);
 extern tree lhd_type_promotes_to (tree);
 extern void lhd_register_builtin_type (tree, const char *);
@@ -165,6 +166,7 @@ extern tree lhd_unit_size_without_reusable_padding (tree);
 
 #define LANG_HOOKS_MAKE_TYPE lhd_make_node
 #define LANG_HOOKS_CLASSIFY_RECORD     NULL
+#define LANG_HOOKS_TYPE_FOR_SIZE       lhd_type_for_size
 #define LANG_HOOKS_INCOMPLETE_TYPE_ERROR lhd_incomplete_type_error
 #define LANG_HOOKS_GENERIC_TYPE_P      hook_bool_const_tree_false
 #define LANG_HOOKS_GET_INNERMOST_GENERIC_PARMS hook_tree_const_tree_null
index 4b4ebd7d12c3279db7e2211742ce24361a26d754..dc19db71db247f5d6a1cf5e416d0a620b9a59b56 100644 (file)
@@ -469,6 +469,56 @@ lhd_make_node (enum tree_code code)
   return make_node (code);
 }
 
+/* Default implementation of LANG_HOOKS_TYPE_FOR_SIZE.
+   Return an integer type with PRECISION bits of precision,
+   that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
+
+tree
+lhd_type_for_size (unsigned precision, int unsignedp)
+{
+  int i;
+
+  if (precision == TYPE_PRECISION (integer_type_node))
+    return unsignedp ? unsigned_type_node : integer_type_node;
+
+  if (precision == TYPE_PRECISION (signed_char_type_node))
+    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
+
+  if (precision == TYPE_PRECISION (short_integer_type_node))
+    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
+
+  if (precision == TYPE_PRECISION (long_integer_type_node))
+    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
+
+  if (precision == TYPE_PRECISION (long_long_integer_type_node))
+    return unsignedp
+          ? long_long_unsigned_type_node
+          : long_long_integer_type_node;
+
+  for (i = 0; i < NUM_INT_N_ENTS; i ++)
+    if (int_n_enabled_p[i]
+       && precision == int_n_data[i].bitsize)
+      return (unsignedp ? int_n_trees[i].unsigned_type
+             : int_n_trees[i].signed_type);
+
+  if (precision <= TYPE_PRECISION (intQI_type_node))
+    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
+
+  if (precision <= TYPE_PRECISION (intHI_type_node))
+    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
+
+  if (precision <= TYPE_PRECISION (intSI_type_node))
+    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
+
+  if (precision <= TYPE_PRECISION (intDI_type_node))
+    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
+
+  if (precision <= TYPE_PRECISION (intTI_type_node))
+    return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
+
+  return NULL_TREE;
+}
+
 HOST_WIDE_INT
 lhd_to_target_charset (HOST_WIDE_INT c)
 {
index 5a208575833795aef98a4e157a7708b6bb324f09..6b76cc641d131b0ef4bf494427e1ffc9cf53b5d9 100644 (file)
@@ -1,3 +1,11 @@
+2017-01-19  David Malcolm  <dmalcolm@redhat.com>
+
+       * lto-lang.c (builtin_type_for_size): Convert call to
+       lto_type_for_size to one through the langhook.
+       (lto_type_for_size): Move to langhooks.c and rename to
+       lhd_type_for_size.
+       (LANG_HOOKS_TYPE_FOR_SIZE): Don't redefine.
+
 2017-01-18  Maxim Ostapenko  <m.ostapenko@samsung.com>
 
        PR lto/79061
index fccb8c61f8f30a02347dcced088e7db46e864bfd..ca8945e53bb5d1e3699f74203e8bdd0c6afac1c3 100644 (file)
@@ -36,8 +36,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "lto.h"
 #include "cilk.h"
 
-static tree lto_type_for_size (unsigned, int);
-
 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
 static tree handle_leaf_attribute (tree *, tree, tree, int, bool *);
 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
@@ -570,7 +568,7 @@ def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
 static tree
 builtin_type_for_size (int size, bool unsignedp)
 {
-  tree type = lto_type_for_size (size, unsignedp);
+  tree type = lang_hooks.types.type_for_size (size, unsignedp);
   return type ? type : error_mark_node;
 }
 
@@ -867,56 +865,6 @@ lto_post_options (const char **pfilename ATTRIBUTE_UNUSED)
   return false;
 }
 
-/* Return an integer type with PRECISION bits of precision,
-   that is unsigned if UNSIGNEDP is nonzero, otherwise signed.  */
-
-static tree
-lto_type_for_size (unsigned precision, int unsignedp)
-{
-  int i;
-
-  if (precision == TYPE_PRECISION (integer_type_node))
-    return unsignedp ? unsigned_type_node : integer_type_node;
-
-  if (precision == TYPE_PRECISION (signed_char_type_node))
-    return unsignedp ? unsigned_char_type_node : signed_char_type_node;
-
-  if (precision == TYPE_PRECISION (short_integer_type_node))
-    return unsignedp ? short_unsigned_type_node : short_integer_type_node;
-
-  if (precision == TYPE_PRECISION (long_integer_type_node))
-    return unsignedp ? long_unsigned_type_node : long_integer_type_node;
-
-  if (precision == TYPE_PRECISION (long_long_integer_type_node))
-    return unsignedp
-          ? long_long_unsigned_type_node
-          : long_long_integer_type_node;
-
-  for (i = 0; i < NUM_INT_N_ENTS; i ++)
-    if (int_n_enabled_p[i]
-       && precision == int_n_data[i].bitsize)
-      return (unsignedp ? int_n_trees[i].unsigned_type
-             : int_n_trees[i].signed_type);
-
-  if (precision <= TYPE_PRECISION (intQI_type_node))
-    return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
-
-  if (precision <= TYPE_PRECISION (intHI_type_node))
-    return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
-
-  if (precision <= TYPE_PRECISION (intSI_type_node))
-    return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
-
-  if (precision <= TYPE_PRECISION (intDI_type_node))
-    return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
-
-  if (precision <= TYPE_PRECISION (intTI_type_node))
-    return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
-
-  return NULL_TREE;
-}
-
-
 /* Return a data type that has machine mode MODE.
    If the mode is an integer,
    then UNSIGNEDP selects between signed and unsigned types.
@@ -1364,8 +1312,6 @@ static void lto_init_ts (void)
 #define LANG_HOOKS_GET_ALIAS_SET gimple_get_alias_set
 #undef LANG_HOOKS_TYPE_FOR_MODE
 #define LANG_HOOKS_TYPE_FOR_MODE lto_type_for_mode
-#undef LANG_HOOKS_TYPE_FOR_SIZE
-#define LANG_HOOKS_TYPE_FOR_SIZE lto_type_for_size
 #undef LANG_HOOKS_SET_DECL_ASSEMBLER_NAME
 #define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME lto_set_decl_assembler_name
 #undef LANG_HOOKS_GLOBAL_BINDINGS_P