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>
* 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.
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
#undef DEF_OPAQUE_VECTOR_TYPE
#undef DEF_FN_TYPE
#undef DEF_OV_TYPE
#define DEF_TYPE(INDEX, NODE, CONST_P) INDEX,
#define DEF_POINTER_TYPE(INDEX, INDEX2) INDEX,
#define DEF_DISTINCT_TYPE(INDEX, INDEX2) INDEX,
#define DEF_VECTOR_TYPE(INDEX, INDEX2, ELEMENTS) INDEX,
#define DEF_OPAQUE_VECTOR_TYPE(INDEX, INDEX2, ELEMENTS) INDEX,
#define DEF_TYPE(INDEX, ...) INDEX,
#define DEF_POINTER_TYPE(INDEX, ...) INDEX,
#define DEF_DISTINCT_TYPE(INDEX, ...) INDEX,
#define DEF_VECTOR_TYPE(INDEX, ...) INDEX,
#define DEF_OPAQUE_VECTOR_TYPE(INDEX, ...) INDEX,
#define DEF_FN_TYPE(...)
#define DEF_OV_TYPE(...)
#include "s390-builtin-types.def"
......@@ -139,20 +139,35 @@ S390_OVERLOADED_BUILTIN_VAR_MAX
(S390_BUILTIN_MAX + S390_OVERLOADED_BUILTIN_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
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
flags_for_builtin (int fcode)
opflags_for_builtin (int fcode)
{
if (fcode >= S390_OVERLOADED_BUILTIN_VAR_OFFSET)
return flags_overloaded_builtin_var[fcode -
S390_OVERLOADED_BUILTIN_VAR_OFFSET];
return opflags_overloaded_builtin_var[fcode -
S390_OVERLOADED_BUILTIN_VAR_OFFSET];
else if (fcode >= S390_OVERLOADED_BUILTIN_OFFSET)
gcc_unreachable ();
else
return flags_builtin[fcode];
return opflags_builtin[fcode];
}
extern tree s390_builtin_decls[S390_BUILTIN_MAX +
......
......@@ -82,7 +82,7 @@ desc_start_for_overloaded_builtin[S390_OVERLOADED_BUILTIN_MAX + 1] =
#undef OB_DEF
#undef OB_DEF_VAR
#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,
#define OB_DEF_VAR(...)
#include "s390-builtins.def"
......@@ -99,7 +99,7 @@ desc_end_for_overloaded_builtin[S390_OVERLOADED_BUILTIN_MAX + 1] =
#undef OB_DEF
#undef OB_DEF_VAR
#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,
#define OB_DEF_VAR(...)
#include "s390-builtins.def"
......@@ -126,7 +126,8 @@ s390_builtin_ov_types[BT_OV_MAX][MAX_OV_OPERANDS] =
#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 OB_DEF
#undef OB_DEF_VAR
......@@ -751,7 +752,7 @@ s390_resolve_overloaded_builtin (location_t loc,
/* 0...S390_BUILTIN_MAX-1 is for non-overloaded builtins. */
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,
"Builtin %qF is for GCC internal use only.",
......@@ -835,7 +836,7 @@ s390_resolve_overloaded_builtin (location_t loc,
else
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]];
/* 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)
#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 OB_DEF
#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_VAR(...)
#include "s390-builtins.def"
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 OB_DEF
......@@ -597,6 +622,10 @@ s390_init_builtins (void)
NULL, NULL);
tree noreturn_attr = tree_cons (get_identifier ("noreturn"), NULL, NULL);
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
uint64_t data type. What we want is c_uint64_type_node from
......@@ -608,56 +637,64 @@ s390_init_builtins (void)
c_uint64_type_node = long_long_unsigned_type_node;
#undef DEF_TYPE
#define DEF_TYPE(INDEX, NODE, CONST_P) \
s390_builtin_types[INDEX] = (!CONST_P) ? \
(NODE) : build_type_variant ((NODE), 1, 0);
#define DEF_TYPE(INDEX, BFLAGS, NODE, CONST_P) \
if ((BFLAGS) == 0 || ((BFLAGS) & bflags_mask)) \
s390_builtin_types[INDEX] = (!CONST_P) ? \
(NODE) : build_type_variant ((NODE), 1, 0);
#undef DEF_POINTER_TYPE
#define DEF_POINTER_TYPE(INDEX, INDEX_BASE) \
s390_builtin_types[INDEX] = \
build_pointer_type (s390_builtin_types[INDEX_BASE]);
#define DEF_POINTER_TYPE(INDEX, BFLAGS, INDEX_BASE) \
if ((BFLAGS) == 0 || ((BFLAGS) & bflags_mask)) \
s390_builtin_types[INDEX] = \
build_pointer_type (s390_builtin_types[INDEX_BASE]);
#undef DEF_DISTINCT_TYPE
#define DEF_DISTINCT_TYPE(INDEX, INDEX_BASE) \
s390_builtin_types[INDEX] = \
build_distinct_type_copy (s390_builtin_types[INDEX_BASE]);
#define DEF_DISTINCT_TYPE(INDEX, BFLAGS, INDEX_BASE) \
if ((BFLAGS) == 0 || ((BFLAGS) & bflags_mask)) \
s390_builtin_types[INDEX] = \
build_distinct_type_copy (s390_builtin_types[INDEX_BASE]);
#undef DEF_VECTOR_TYPE
#define DEF_VECTOR_TYPE(INDEX, INDEX_BASE, ELEMENTS) \
s390_builtin_types[INDEX] = \
build_vector_type (s390_builtin_types[INDEX_BASE], ELEMENTS);
#define DEF_VECTOR_TYPE(INDEX, BFLAGS, INDEX_BASE, ELEMENTS) \
if ((BFLAGS) == 0 || ((BFLAGS) & bflags_mask)) \
s390_builtin_types[INDEX] = \
build_vector_type (s390_builtin_types[INDEX_BASE], ELEMENTS);
#undef DEF_OPAQUE_VECTOR_TYPE
#define DEF_OPAQUE_VECTOR_TYPE(INDEX, INDEX_BASE, ELEMENTS) \
s390_builtin_types[INDEX] = \
build_opaque_vector_type (s390_builtin_types[INDEX_BASE], ELEMENTS);
#define DEF_OPAQUE_VECTOR_TYPE(INDEX, BFLAGS, INDEX_BASE, ELEMENTS) \
if ((BFLAGS) == 0 || ((BFLAGS) & bflags_mask)) \
s390_builtin_types[INDEX] = \
build_opaque_vector_type (s390_builtin_types[INDEX_BASE], ELEMENTS);
#undef DEF_FN_TYPE
#define DEF_FN_TYPE(INDEX, args...) \
s390_builtin_fn_types[INDEX] = \
#define DEF_FN_TYPE(INDEX, BFLAGS, args...) \
if ((BFLAGS) == 0 || ((BFLAGS) & bflags_mask)) \
s390_builtin_fn_types[INDEX] = \
build_function_type_list (args, NULL_TREE);
#undef DEF_OV_TYPE
#define DEF_OV_TYPE(...)
#include "s390-builtin-types.def"
#undef B_DEF
#define B_DEF(NAME, PATTERN, ATTRS, FLAGS, FNTYPE) \
s390_builtin_decls[S390_BUILTIN_##NAME] = \
add_builtin_function ("__builtin_" #NAME, \
s390_builtin_fn_types[FNTYPE], \
S390_BUILTIN_##NAME, \
BUILT_IN_MD, \
NULL, \
ATTRS);
#define B_DEF(NAME, PATTERN, ATTRS, BFLAGS, OPFLAGS, FNTYPE) \
if (((BFLAGS) & ~bflags_mask) == 0) \
s390_builtin_decls[S390_BUILTIN_##NAME] = \
add_builtin_function ("__builtin_" #NAME, \
s390_builtin_fn_types[FNTYPE], \
S390_BUILTIN_##NAME, \
BUILT_IN_MD, \
NULL, \
ATTRS);
#undef OB_DEF
#define OB_DEF(NAME, FIRST_VAR_NAME, LAST_VAR_NAME, FNTYPE) \
s390_builtin_decls[S390_OVERLOADED_BUILTIN_##NAME + S390_BUILTIN_MAX] = \
add_builtin_function ("__builtin_" #NAME, \
s390_builtin_fn_types[FNTYPE], \
S390_OVERLOADED_BUILTIN_##NAME + S390_BUILTIN_MAX, \
BUILT_IN_MD, \
NULL, \
0);
#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] = \
add_builtin_function ("__builtin_" #NAME, \
s390_builtin_fn_types[FNTYPE], \
S390_OVERLOADED_BUILTIN_##NAME + S390_BUILTIN_MAX, \
BUILT_IN_MD, \
NULL, \
0);
#undef OB_DEF_VAR
#define OB_DEF_VAR(...)
#include "s390-builtins.def"
......@@ -728,7 +765,7 @@ s390_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
bool nonvoid;
tree arg;
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;
if (TARGET_DEBUG_ARG)
......@@ -738,7 +775,6 @@ s390_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
(int)fcode, IDENTIFIER_POINTER (DECL_NAME (fndecl)));
}
if (fcode >= S390_OVERLOADED_BUILTIN_VAR_OFFSET
&& 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