Commit f4d28290 by Andreas Krebbel Committed by Andreas Krebbel

S/390: Make builtin creation conditional.

gcc/ChangeLog:

2015-06-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* config/s390/s390-builtin-types.def: Add flag to indicate the
	options under which the function type is needed.
	* config/s390/s390-builtins.def: Add flag to indicate the options
	under which the builtin is enabled.
	* config/s390/s390-builtins.h: Add flags parameter to macro
	definitions.
	(bflags_for_builtin): New function.
	(flags_for_builtin): Renamed to ...
	(opflags_for_builtin): ... this.
	* config/s390/s390-c.c (s390_resolve_overloaded_builtin): Rename
	flags_for_builtin to bflags_for_builtin and
	flags_overloaded_builtin_var to opflags_overloaded_builtin_var.
	* config/s390/s390.c: Add initialization of bflags_builtin and
	opflags_builtin arrays.
	Remove code for flags_builtin.
	(s390_init_builtins): Only create builtin function types if one of
	their flags is active.
	Only create builtins if all of their flags are active.
	(s390_expand_builtin): Rename flags_for_builtin to
	opflags_for_builtin.

From-SVN: r224872
parent f1497499
2015-06-24 Andreas Krebbel <krebbel@linux.vnet.ibm.com> 2015-06-24 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/s390-builtin-types.def: Add flag to indicate the
options under which the function type is needed.
* config/s390/s390-builtins.def: Add flag to indicate the options
under which the builtin is enabled.
* config/s390/s390-builtins.h: Add flags parameter to macro
definitions.
(bflags_for_builtin): New function.
(flags_for_builtin): Renamed to ...
(opflags_for_builtin): ... this.
* config/s390/s390-c.c (s390_resolve_overloaded_builtin): Rename
flags_for_builtin to bflags_for_builtin and
flags_overloaded_builtin_var to opflags_overloaded_builtin_var.
* config/s390/s390.c: Add initialization of bflags_builtin and
opflags_builtin arrays.
Remove code for flags_builtin.
(s390_init_builtins): Only create builtin function types if one of
their flags is active.
Only create builtins if all of their flags are active.
(s390_expand_builtin): Rename flags_for_builtin to
opflags_for_builtin.
2015-06-24 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/vecintrin.h: Remove internal builtins. * config/s390/vecintrin.h: Remove internal builtins.
2015-06-24 Andreas Krebbel <krebbel@linux.vnet.ibm.com> 2015-06-24 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -35,11 +35,11 @@ enum s390_builtin_type_index ...@@ -35,11 +35,11 @@ enum s390_builtin_type_index
#undef DEF_OPAQUE_VECTOR_TYPE #undef DEF_OPAQUE_VECTOR_TYPE
#undef DEF_FN_TYPE #undef DEF_FN_TYPE
#undef DEF_OV_TYPE #undef DEF_OV_TYPE
#define DEF_TYPE(INDEX, NODE, CONST_P) INDEX, #define DEF_TYPE(INDEX, ...) INDEX,
#define DEF_POINTER_TYPE(INDEX, INDEX2) INDEX, #define DEF_POINTER_TYPE(INDEX, ...) INDEX,
#define DEF_DISTINCT_TYPE(INDEX, INDEX2) INDEX, #define DEF_DISTINCT_TYPE(INDEX, ...) INDEX,
#define DEF_VECTOR_TYPE(INDEX, INDEX2, ELEMENTS) INDEX, #define DEF_VECTOR_TYPE(INDEX, ...) INDEX,
#define DEF_OPAQUE_VECTOR_TYPE(INDEX, INDEX2, ELEMENTS) INDEX, #define DEF_OPAQUE_VECTOR_TYPE(INDEX, ...) INDEX,
#define DEF_FN_TYPE(...) #define DEF_FN_TYPE(...)
#define DEF_OV_TYPE(...) #define DEF_OV_TYPE(...)
#include "s390-builtin-types.def" #include "s390-builtin-types.def"
...@@ -139,20 +139,35 @@ S390_OVERLOADED_BUILTIN_VAR_MAX ...@@ -139,20 +139,35 @@ S390_OVERLOADED_BUILTIN_VAR_MAX
(S390_BUILTIN_MAX + S390_OVERLOADED_BUILTIN_MAX + \ (S390_BUILTIN_MAX + S390_OVERLOADED_BUILTIN_MAX + \
S390_OVERLOADED_BUILTIN_VAR_MAX) S390_OVERLOADED_BUILTIN_VAR_MAX)
extern const unsigned int flags_builtin[S390_BUILTIN_MAX + 1]; extern const unsigned int bflags_builtin[S390_BUILTIN_MAX + 1];
extern const unsigned int opflags_builtin[S390_BUILTIN_MAX + 1];
extern const unsigned int
bflags_overloaded_builtin[S390_OVERLOADED_BUILTIN_MAX + 1];
extern const unsigned int extern const unsigned int
flags_overloaded_builtin_var[S390_OVERLOADED_BUILTIN_VAR_MAX + 1]; opflags_overloaded_builtin_var[S390_OVERLOADED_BUILTIN_VAR_MAX + 1];
static inline unsigned int
bflags_for_builtin (int fcode)
{
if (fcode >= S390_OVERLOADED_BUILTIN_VAR_OFFSET)
gcc_unreachable ();
else if (fcode >= S390_OVERLOADED_BUILTIN_OFFSET)
return bflags_overloaded_builtin[fcode - S390_BUILTIN_MAX];
else
return bflags_builtin[fcode];
}
static inline unsigned int static inline unsigned int
flags_for_builtin (int fcode) opflags_for_builtin (int fcode)
{ {
if (fcode >= S390_OVERLOADED_BUILTIN_VAR_OFFSET) if (fcode >= S390_OVERLOADED_BUILTIN_VAR_OFFSET)
return flags_overloaded_builtin_var[fcode - return opflags_overloaded_builtin_var[fcode -
S390_OVERLOADED_BUILTIN_VAR_OFFSET]; S390_OVERLOADED_BUILTIN_VAR_OFFSET];
else if (fcode >= S390_OVERLOADED_BUILTIN_OFFSET) else if (fcode >= S390_OVERLOADED_BUILTIN_OFFSET)
gcc_unreachable (); gcc_unreachable ();
else else
return flags_builtin[fcode]; return opflags_builtin[fcode];
} }
extern tree s390_builtin_decls[S390_BUILTIN_MAX + extern tree s390_builtin_decls[S390_BUILTIN_MAX +
......
...@@ -82,7 +82,7 @@ desc_start_for_overloaded_builtin[S390_OVERLOADED_BUILTIN_MAX + 1] = ...@@ -82,7 +82,7 @@ desc_start_for_overloaded_builtin[S390_OVERLOADED_BUILTIN_MAX + 1] =
#undef OB_DEF #undef OB_DEF
#undef OB_DEF_VAR #undef OB_DEF_VAR
#define B_DEF(...) #define B_DEF(...)
#define OB_DEF(NAME, FIRST_VAR_NAME, LAST_VAR_NAME, FNTYPE) \ #define OB_DEF(NAME, FIRST_VAR_NAME,...) \
S390_OVERLOADED_BUILTIN_VAR_##FIRST_VAR_NAME, S390_OVERLOADED_BUILTIN_VAR_##FIRST_VAR_NAME,
#define OB_DEF_VAR(...) #define OB_DEF_VAR(...)
#include "s390-builtins.def" #include "s390-builtins.def"
...@@ -99,7 +99,7 @@ desc_end_for_overloaded_builtin[S390_OVERLOADED_BUILTIN_MAX + 1] = ...@@ -99,7 +99,7 @@ desc_end_for_overloaded_builtin[S390_OVERLOADED_BUILTIN_MAX + 1] =
#undef OB_DEF #undef OB_DEF
#undef OB_DEF_VAR #undef OB_DEF_VAR
#define B_DEF(...) #define B_DEF(...)
#define OB_DEF(NAME, FIRST_VAR_NAME, LAST_VAR_NAME, FNTYPE) \ #define OB_DEF(NAME, FIRST_VAR_NAME, LAST_VAR_NAME,...) \
S390_OVERLOADED_BUILTIN_VAR_##LAST_VAR_NAME, S390_OVERLOADED_BUILTIN_VAR_##LAST_VAR_NAME,
#define OB_DEF_VAR(...) #define OB_DEF_VAR(...)
#include "s390-builtins.def" #include "s390-builtins.def"
...@@ -126,7 +126,8 @@ s390_builtin_ov_types[BT_OV_MAX][MAX_OV_OPERANDS] = ...@@ -126,7 +126,8 @@ s390_builtin_ov_types[BT_OV_MAX][MAX_OV_OPERANDS] =
#include "s390-builtin-types.def" #include "s390-builtin-types.def"
}; };
static const enum s390_builtins bt_for_overloaded_builtin_var[S390_OVERLOADED_BUILTIN_VAR_MAX] = { static const enum s390_builtins
bt_for_overloaded_builtin_var[S390_OVERLOADED_BUILTIN_VAR_MAX] = {
#undef B_DEF #undef B_DEF
#undef OB_DEF #undef OB_DEF
#undef OB_DEF_VAR #undef OB_DEF_VAR
...@@ -751,7 +752,7 @@ s390_resolve_overloaded_builtin (location_t loc, ...@@ -751,7 +752,7 @@ s390_resolve_overloaded_builtin (location_t loc,
/* 0...S390_BUILTIN_MAX-1 is for non-overloaded builtins. */ /* 0...S390_BUILTIN_MAX-1 is for non-overloaded builtins. */
if (ob_fcode < S390_BUILTIN_MAX) if (ob_fcode < S390_BUILTIN_MAX)
{ {
if (flags_for_builtin(ob_fcode) & B_INT) if (bflags_for_builtin(ob_fcode) & B_INT)
{ {
error_at (loc, error_at (loc,
"Builtin %qF is for GCC internal use only.", "Builtin %qF is for GCC internal use only.",
...@@ -835,7 +836,7 @@ s390_resolve_overloaded_builtin (location_t loc, ...@@ -835,7 +836,7 @@ s390_resolve_overloaded_builtin (location_t loc,
else else
target_builtin_decl = s390_builtin_decls[bt_for_overloaded_builtin_var[last_match_index]]; target_builtin_decl = s390_builtin_decls[bt_for_overloaded_builtin_var[last_match_index]];
all_op_flags = flags_overloaded_builtin_var[last_match_index]; all_op_flags = opflags_overloaded_builtin_var[last_match_index];
return_type = s390_builtin_types[s390_builtin_ov_types[last_match_fntype_index][0]]; return_type = s390_builtin_types[s390_builtin_ov_types[last_match_fntype_index][0]];
/* Check for the operand flags in the overloaded builtin variant. */ /* Check for the operand flags in the overloaded builtin variant. */
......
...@@ -547,19 +547,44 @@ s390_check_type_for_vector_abi (const_tree type, bool arg_p, bool in_struct_p) ...@@ -547,19 +547,44 @@ s390_check_type_for_vector_abi (const_tree type, bool arg_p, bool in_struct_p)
#include "s390-builtins.h" #include "s390-builtins.h"
const unsigned int flags_builtin[S390_BUILTIN_MAX + 1] = const unsigned int bflags_builtin[S390_BUILTIN_MAX + 1] =
{ {
#undef B_DEF #undef B_DEF
#undef OB_DEF #undef OB_DEF
#undef OB_DEF_VAR #undef OB_DEF_VAR
#define B_DEF(NAME, PATTERN, ATTRS, FLAGS, FNTYPE) FLAGS, #define B_DEF(NAME, PATTERN, ATTRS, BFLAGS, ...) BFLAGS,
#define OB_DEF(...) #define OB_DEF(...)
#define OB_DEF_VAR(...) #define OB_DEF_VAR(...)
#include "s390-builtins.def" #include "s390-builtins.def"
0 0
}; };
const unsigned int flags_overloaded_builtin_var[S390_OVERLOADED_BUILTIN_VAR_MAX + 1] = const unsigned int opflags_builtin[S390_BUILTIN_MAX + 1] =
{
#undef B_DEF
#undef OB_DEF
#undef OB_DEF_VAR
#define B_DEF(NAME, PATTERN, ATTRS, BFLAGS, OPFLAGS, ...) OPFLAGS,
#define OB_DEF(...)
#define OB_DEF_VAR(...)
#include "s390-builtins.def"
0
};
const unsigned int bflags_overloaded_builtin[S390_OVERLOADED_BUILTIN_MAX + 1] =
{
#undef B_DEF
#undef OB_DEF
#undef OB_DEF_VAR
#define B_DEF(...)
#define OB_DEF(NAME, FIRST_VAR_NAME, LAST_VAR_NAME, BFLAGS, ...) BFLAGS,
#define OB_DEF_VAR(...)
#include "s390-builtins.def"
0
};
const unsigned int
opflags_overloaded_builtin_var[S390_OVERLOADED_BUILTIN_VAR_MAX + 1] =
{ {
#undef B_DEF #undef B_DEF
#undef OB_DEF #undef OB_DEF
...@@ -597,6 +622,10 @@ s390_init_builtins (void) ...@@ -597,6 +622,10 @@ s390_init_builtins (void)
NULL, NULL); NULL, NULL);
tree noreturn_attr = tree_cons (get_identifier ("noreturn"), NULL, NULL); tree noreturn_attr = tree_cons (get_identifier ("noreturn"), NULL, NULL);
tree c_uint64_type_node; tree c_uint64_type_node;
unsigned int bflags_mask = (BFLAGS_MASK_INIT);
bflags_mask |= (TARGET_VX) ? B_VX : 0;
bflags_mask |= (TARGET_HTM) ? B_HTM : 0;
/* The uint64_type_node from tree.c is not compatible to the C99 /* The uint64_type_node from tree.c is not compatible to the C99
uint64_t data type. What we want is c_uint64_type_node from uint64_t data type. What we want is c_uint64_type_node from
...@@ -608,32 +637,38 @@ s390_init_builtins (void) ...@@ -608,32 +637,38 @@ s390_init_builtins (void)
c_uint64_type_node = long_long_unsigned_type_node; c_uint64_type_node = long_long_unsigned_type_node;
#undef DEF_TYPE #undef DEF_TYPE
#define DEF_TYPE(INDEX, NODE, CONST_P) \ #define DEF_TYPE(INDEX, BFLAGS, NODE, CONST_P) \
if ((BFLAGS) == 0 || ((BFLAGS) & bflags_mask)) \
s390_builtin_types[INDEX] = (!CONST_P) ? \ s390_builtin_types[INDEX] = (!CONST_P) ? \
(NODE) : build_type_variant ((NODE), 1, 0); (NODE) : build_type_variant ((NODE), 1, 0);
#undef DEF_POINTER_TYPE #undef DEF_POINTER_TYPE
#define DEF_POINTER_TYPE(INDEX, INDEX_BASE) \ #define DEF_POINTER_TYPE(INDEX, BFLAGS, INDEX_BASE) \
if ((BFLAGS) == 0 || ((BFLAGS) & bflags_mask)) \
s390_builtin_types[INDEX] = \ s390_builtin_types[INDEX] = \
build_pointer_type (s390_builtin_types[INDEX_BASE]); build_pointer_type (s390_builtin_types[INDEX_BASE]);
#undef DEF_DISTINCT_TYPE #undef DEF_DISTINCT_TYPE
#define DEF_DISTINCT_TYPE(INDEX, INDEX_BASE) \ #define DEF_DISTINCT_TYPE(INDEX, BFLAGS, INDEX_BASE) \
if ((BFLAGS) == 0 || ((BFLAGS) & bflags_mask)) \
s390_builtin_types[INDEX] = \ s390_builtin_types[INDEX] = \
build_distinct_type_copy (s390_builtin_types[INDEX_BASE]); build_distinct_type_copy (s390_builtin_types[INDEX_BASE]);
#undef DEF_VECTOR_TYPE #undef DEF_VECTOR_TYPE
#define DEF_VECTOR_TYPE(INDEX, INDEX_BASE, ELEMENTS) \ #define DEF_VECTOR_TYPE(INDEX, BFLAGS, INDEX_BASE, ELEMENTS) \
if ((BFLAGS) == 0 || ((BFLAGS) & bflags_mask)) \
s390_builtin_types[INDEX] = \ s390_builtin_types[INDEX] = \
build_vector_type (s390_builtin_types[INDEX_BASE], ELEMENTS); build_vector_type (s390_builtin_types[INDEX_BASE], ELEMENTS);
#undef DEF_OPAQUE_VECTOR_TYPE #undef DEF_OPAQUE_VECTOR_TYPE
#define DEF_OPAQUE_VECTOR_TYPE(INDEX, INDEX_BASE, ELEMENTS) \ #define DEF_OPAQUE_VECTOR_TYPE(INDEX, BFLAGS, INDEX_BASE, ELEMENTS) \
if ((BFLAGS) == 0 || ((BFLAGS) & bflags_mask)) \
s390_builtin_types[INDEX] = \ s390_builtin_types[INDEX] = \
build_opaque_vector_type (s390_builtin_types[INDEX_BASE], ELEMENTS); build_opaque_vector_type (s390_builtin_types[INDEX_BASE], ELEMENTS);
#undef DEF_FN_TYPE #undef DEF_FN_TYPE
#define DEF_FN_TYPE(INDEX, args...) \ #define DEF_FN_TYPE(INDEX, BFLAGS, args...) \
if ((BFLAGS) == 0 || ((BFLAGS) & bflags_mask)) \
s390_builtin_fn_types[INDEX] = \ s390_builtin_fn_types[INDEX] = \
build_function_type_list (args, NULL_TREE); build_function_type_list (args, NULL_TREE);
#undef DEF_OV_TYPE #undef DEF_OV_TYPE
...@@ -641,7 +676,8 @@ s390_init_builtins (void) ...@@ -641,7 +676,8 @@ s390_init_builtins (void)
#include "s390-builtin-types.def" #include "s390-builtin-types.def"
#undef B_DEF #undef B_DEF
#define B_DEF(NAME, PATTERN, ATTRS, FLAGS, FNTYPE) \ #define B_DEF(NAME, PATTERN, ATTRS, BFLAGS, OPFLAGS, FNTYPE) \
if (((BFLAGS) & ~bflags_mask) == 0) \
s390_builtin_decls[S390_BUILTIN_##NAME] = \ s390_builtin_decls[S390_BUILTIN_##NAME] = \
add_builtin_function ("__builtin_" #NAME, \ add_builtin_function ("__builtin_" #NAME, \
s390_builtin_fn_types[FNTYPE], \ s390_builtin_fn_types[FNTYPE], \
...@@ -650,7 +686,8 @@ s390_init_builtins (void) ...@@ -650,7 +686,8 @@ s390_init_builtins (void)
NULL, \ NULL, \
ATTRS); ATTRS);
#undef OB_DEF #undef OB_DEF
#define OB_DEF(NAME, FIRST_VAR_NAME, LAST_VAR_NAME, FNTYPE) \ #define OB_DEF(NAME, FIRST_VAR_NAME, LAST_VAR_NAME, BFLAGS, FNTYPE) \
if (((BFLAGS) & ~bflags_mask) == 0) \
s390_builtin_decls[S390_OVERLOADED_BUILTIN_##NAME + S390_BUILTIN_MAX] = \ s390_builtin_decls[S390_OVERLOADED_BUILTIN_##NAME + S390_BUILTIN_MAX] = \
add_builtin_function ("__builtin_" #NAME, \ add_builtin_function ("__builtin_" #NAME, \
s390_builtin_fn_types[FNTYPE], \ s390_builtin_fn_types[FNTYPE], \
...@@ -728,7 +765,7 @@ s390_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, ...@@ -728,7 +765,7 @@ s390_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
bool nonvoid; bool nonvoid;
tree arg; tree arg;
call_expr_arg_iterator iter; call_expr_arg_iterator iter;
unsigned int all_op_flags = flags_for_builtin (fcode); unsigned int all_op_flags = opflags_for_builtin (fcode);
machine_mode last_vec_mode = VOIDmode; machine_mode last_vec_mode = VOIDmode;
if (TARGET_DEBUG_ARG) if (TARGET_DEBUG_ARG)
...@@ -738,7 +775,6 @@ s390_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, ...@@ -738,7 +775,6 @@ s390_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
(int)fcode, IDENTIFIER_POINTER (DECL_NAME (fndecl))); (int)fcode, IDENTIFIER_POINTER (DECL_NAME (fndecl)));
} }
if (fcode >= S390_OVERLOADED_BUILTIN_VAR_OFFSET if (fcode >= S390_OVERLOADED_BUILTIN_VAR_OFFSET
&& fcode < S390_ALL_BUILTIN_MAX) && fcode < S390_ALL_BUILTIN_MAX)
{ {
......
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