Commit 8a3a6ab4 by David Malcolm Committed by David Malcolm

Make LTO's implementation of LANG_HOOKS_TYPE_FOR_SIZE the default

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
parent 86eb502b
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> 2017-01-19 Pat Haugen <pthaugen@us.ibm.com>
* config/rs6000/power9.md (power9-alu): Remove 'cmp' type and add * config/rs6000/power9.md (power9-alu): Remove 'cmp' type and add
......
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> 2017-01-18 David Malcolm <dmalcolm@redhat.com>
* dummy-frontend.c (jit_langhook_type_for_size): Implement, using * dummy-frontend.c (jit_langhook_type_for_size): Implement, using
......
...@@ -207,55 +207,6 @@ jit_langhook_type_for_mode (enum machine_mode mode, int unsignedp) ...@@ -207,55 +207,6 @@ jit_langhook_type_for_mode (enum machine_mode mode, int unsignedp)
return NULL; 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. */ /* Record a builtin function. We just ignore builtin functions. */
static tree static tree
...@@ -295,9 +246,6 @@ jit_langhook_getdecls (void) ...@@ -295,9 +246,6 @@ jit_langhook_getdecls (void)
#undef LANG_HOOKS_TYPE_FOR_MODE #undef LANG_HOOKS_TYPE_FOR_MODE
#define LANG_HOOKS_TYPE_FOR_MODE jit_langhook_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 #undef LANG_HOOKS_BUILTIN_FUNCTION
#define LANG_HOOKS_BUILTIN_FUNCTION jit_langhook_builtin_function #define LANG_HOOKS_BUILTIN_FUNCTION jit_langhook_builtin_function
......
...@@ -52,6 +52,7 @@ extern void lhd_print_error_function (diagnostic_context *, ...@@ -52,6 +52,7 @@ extern void lhd_print_error_function (diagnostic_context *,
const char *, struct diagnostic_info *); const char *, struct diagnostic_info *);
extern void lhd_set_decl_assembler_name (tree); extern void lhd_set_decl_assembler_name (tree);
extern bool lhd_warn_unused_global_decl (const_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 void lhd_incomplete_type_error (location_t, const_tree, const_tree);
extern tree lhd_type_promotes_to (tree); extern tree lhd_type_promotes_to (tree);
extern void lhd_register_builtin_type (tree, const char *); extern void lhd_register_builtin_type (tree, const char *);
...@@ -165,6 +166,7 @@ extern tree lhd_unit_size_without_reusable_padding (tree); ...@@ -165,6 +166,7 @@ extern tree lhd_unit_size_without_reusable_padding (tree);
#define LANG_HOOKS_MAKE_TYPE lhd_make_node #define LANG_HOOKS_MAKE_TYPE lhd_make_node
#define LANG_HOOKS_CLASSIFY_RECORD NULL #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_INCOMPLETE_TYPE_ERROR lhd_incomplete_type_error
#define LANG_HOOKS_GENERIC_TYPE_P hook_bool_const_tree_false #define LANG_HOOKS_GENERIC_TYPE_P hook_bool_const_tree_false
#define LANG_HOOKS_GET_INNERMOST_GENERIC_PARMS hook_tree_const_tree_null #define LANG_HOOKS_GET_INNERMOST_GENERIC_PARMS hook_tree_const_tree_null
......
...@@ -469,6 +469,56 @@ lhd_make_node (enum tree_code code) ...@@ -469,6 +469,56 @@ lhd_make_node (enum tree_code code)
return make_node (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 HOST_WIDE_INT
lhd_to_target_charset (HOST_WIDE_INT c) lhd_to_target_charset (HOST_WIDE_INT c)
{ {
......
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> 2017-01-18 Maxim Ostapenko <m.ostapenko@samsung.com>
PR lto/79061 PR lto/79061
......
...@@ -36,8 +36,6 @@ along with GCC; see the file COPYING3. If not see ...@@ -36,8 +36,6 @@ along with GCC; see the file COPYING3. If not see
#include "lto.h" #include "lto.h"
#include "cilk.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_noreturn_attribute (tree *, tree, tree, int, bool *);
static tree handle_leaf_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 *); 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, ...) ...@@ -570,7 +568,7 @@ def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
static tree static tree
builtin_type_for_size (int size, bool unsignedp) 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; return type ? type : error_mark_node;
} }
...@@ -867,56 +865,6 @@ lto_post_options (const char **pfilename ATTRIBUTE_UNUSED) ...@@ -867,56 +865,6 @@ lto_post_options (const char **pfilename ATTRIBUTE_UNUSED)
return false; 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. /* Return a data type that has machine mode MODE.
If the mode is an integer, If the mode is an integer,
then UNSIGNEDP selects between signed and unsigned types. then UNSIGNEDP selects between signed and unsigned types.
...@@ -1364,8 +1312,6 @@ static void lto_init_ts (void) ...@@ -1364,8 +1312,6 @@ static void lto_init_ts (void)
#define LANG_HOOKS_GET_ALIAS_SET gimple_get_alias_set #define LANG_HOOKS_GET_ALIAS_SET gimple_get_alias_set
#undef LANG_HOOKS_TYPE_FOR_MODE #undef LANG_HOOKS_TYPE_FOR_MODE
#define LANG_HOOKS_TYPE_FOR_MODE lto_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 #undef LANG_HOOKS_SET_DECL_ASSEMBLER_NAME
#define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME lto_set_decl_assembler_name #define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME lto_set_decl_assembler_name
#undef LANG_HOOKS_GLOBAL_BINDINGS_P #undef LANG_HOOKS_GLOBAL_BINDINGS_P
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment