aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>2015-02-27 10:13:07 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2015-02-27 10:13:07 +0000
commit9b80b7bc4de5b697b229be574246877a186fe859 (patch)
tree9a17381b8c96eacfda1ea52d3d8ba45db23bb088
parent4ceae7e9576c605219f2da69e2450476330548a7 (diff)
downloadgcc-9b80b7bc4de5b697b229be574246877a186fe859.zip
gcc-9b80b7bc4de5b697b229be574246877a186fe859.tar.gz
gcc-9b80b7bc4de5b697b229be574246877a186fe859.tar.bz2
S/390: Define TARGET_BUILTIN_DECL
gcc/ChangeLog: * config/s390/s390.c: (enum s390_builtin, s390_expand_builtin): Rename S390_BUILTIN_max to S390_BUILTIN_MAX. (s390_builtin_decls): New array. (s390_init_builtins): Put builtin decls into s390_builtin_decls. (s390_builtin_decl): New function. (TARGET_BUILTIN_DECL): Define macro. From-SVN: r221046
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/s390/s390.c94
2 files changed, 71 insertions, 32 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7763c88..6f2ce19 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2015-02-27 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * config/s390/s390.c: (enum s390_builtin, s390_expand_builtin):
+ Rename S390_BUILTIN_max to S390_BUILTIN_MAX.
+ (s390_builtin_decls): New array.
+ (s390_init_builtins): Put builtin decls into s390_builtin_decls.
+ (s390_builtin_decl): New function.
+ (TARGET_BUILTIN_DECL): Define macro.
+
2015-02-27 Richard Biener <rguenther@suse.de>
PR middle-end/63175
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index bc6223e..a4fb4c7 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -9982,10 +9982,12 @@ enum s390_builtin
S390_BUILTIN_TX_NESTING_DEPTH,
S390_BUILTIN_TX_ASSIST,
- S390_BUILTIN_max
+ S390_BUILTIN_MAX
};
-static enum insn_code const code_for_builtin[S390_BUILTIN_max] = {
+tree s390_builtin_decls[S390_BUILTIN_MAX];
+
+static enum insn_code const code_for_builtin[S390_BUILTIN_MAX] = {
CODE_FOR_tbegin,
CODE_FOR_tbegin_nofloat,
CODE_FOR_tbegin_retry,
@@ -10008,44 +10010,57 @@ s390_init_builtins (void)
/* void foo (void) */
ftype = build_function_type_list (void_type_node, NULL_TREE);
- add_builtin_function ("__builtin_tbeginc", ftype, S390_BUILTIN_TBEGINC,
- BUILT_IN_MD, NULL, NULL_TREE);
+ s390_builtin_decls[S390_BUILTIN_TBEGINC] =
+ add_builtin_function ("__builtin_tbeginc", ftype, S390_BUILTIN_TBEGINC,
+ BUILT_IN_MD, NULL, NULL_TREE);
/* void foo (int) */
ftype = build_function_type_list (void_type_node, integer_type_node,
NULL_TREE);
- add_builtin_function ("__builtin_tabort", ftype,
- S390_BUILTIN_TABORT, BUILT_IN_MD, NULL, noreturn_attr);
- add_builtin_function ("__builtin_tx_assist", ftype,
- S390_BUILTIN_TX_ASSIST, BUILT_IN_MD, NULL, NULL_TREE);
+ s390_builtin_decls[S390_BUILTIN_TABORT] =
+ add_builtin_function ("__builtin_tabort", ftype,
+ S390_BUILTIN_TABORT, BUILT_IN_MD, NULL,
+ noreturn_attr);
+ s390_builtin_decls[S390_BUILTIN_TX_ASSIST] =
+ add_builtin_function ("__builtin_tx_assist", ftype,
+ S390_BUILTIN_TX_ASSIST, BUILT_IN_MD, NULL, NULL_TREE);
+
/* int foo (void *) */
- ftype = build_function_type_list (integer_type_node, ptr_type_node, NULL_TREE);
- add_builtin_function ("__builtin_tbegin", ftype, S390_BUILTIN_TBEGIN,
- BUILT_IN_MD, NULL, returns_twice_attr);
- add_builtin_function ("__builtin_tbegin_nofloat", ftype,
- S390_BUILTIN_TBEGIN_NOFLOAT,
- BUILT_IN_MD, NULL, returns_twice_attr);
+ ftype = build_function_type_list (integer_type_node, ptr_type_node,
+ NULL_TREE);
+ s390_builtin_decls[S390_BUILTIN_TBEGIN] =
+ add_builtin_function ("__builtin_tbegin", ftype, S390_BUILTIN_TBEGIN,
+ BUILT_IN_MD, NULL, returns_twice_attr);
+ s390_builtin_decls[S390_BUILTIN_TBEGIN_NOFLOAT] =
+ add_builtin_function ("__builtin_tbegin_nofloat", ftype,
+ S390_BUILTIN_TBEGIN_NOFLOAT,
+ BUILT_IN_MD, NULL, returns_twice_attr);
/* int foo (void *, int) */
ftype = build_function_type_list (integer_type_node, ptr_type_node,
integer_type_node, NULL_TREE);
- add_builtin_function ("__builtin_tbegin_retry", ftype,
- S390_BUILTIN_TBEGIN_RETRY,
- BUILT_IN_MD,
- NULL, returns_twice_attr);
- add_builtin_function ("__builtin_tbegin_retry_nofloat", ftype,
- S390_BUILTIN_TBEGIN_RETRY_NOFLOAT,
- BUILT_IN_MD,
- NULL, returns_twice_attr);
+ s390_builtin_decls[S390_BUILTIN_TBEGIN_RETRY] =
+ add_builtin_function ("__builtin_tbegin_retry", ftype,
+ S390_BUILTIN_TBEGIN_RETRY,
+ BUILT_IN_MD,
+ NULL, returns_twice_attr);
+ s390_builtin_decls[S390_BUILTIN_TBEGIN_RETRY_NOFLOAT] =
+ add_builtin_function ("__builtin_tbegin_retry_nofloat", ftype,
+ S390_BUILTIN_TBEGIN_RETRY_NOFLOAT,
+ BUILT_IN_MD,
+ NULL, returns_twice_attr);
/* int foo (void) */
ftype = build_function_type_list (integer_type_node, NULL_TREE);
- add_builtin_function ("__builtin_tx_nesting_depth", ftype,
- S390_BUILTIN_TX_NESTING_DEPTH,
- BUILT_IN_MD, NULL, NULL_TREE);
- add_builtin_function ("__builtin_tend", ftype,
- S390_BUILTIN_TEND, BUILT_IN_MD, NULL, NULL_TREE);
+ s390_builtin_decls[S390_BUILTIN_TX_NESTING_DEPTH] =
+ add_builtin_function ("__builtin_tx_nesting_depth", ftype,
+ S390_BUILTIN_TX_NESTING_DEPTH,
+ BUILT_IN_MD, NULL, NULL_TREE);
+ s390_builtin_decls[S390_BUILTIN_TEND] =
+ add_builtin_function ("__builtin_tend", ftype,
+ S390_BUILTIN_TEND, BUILT_IN_MD, NULL, NULL_TREE);
+
/* void foo (uint64_t *, uint64_t) */
if (TARGET_64BIT)
@@ -10053,12 +10068,13 @@ s390_init_builtins (void)
else
uint64_type = long_long_unsigned_type_node;
- ftype = build_function_type_list (void_type_node,
+ ftype = build_function_type_list (void_type_node,
build_pointer_type (uint64_type),
uint64_type, NULL_TREE);
- add_builtin_function ("__builtin_non_tx_store", ftype,
- S390_BUILTIN_NON_TX_STORE,
- BUILT_IN_MD, NULL, NULL_TREE);
+ s390_builtin_decls[S390_BUILTIN_NON_TX_STORE] =
+ add_builtin_function ("__builtin_non_tx_store", ftype,
+ S390_BUILTIN_NON_TX_STORE,
+ BUILT_IN_MD, NULL, NULL_TREE);
}
/* Expand an expression EXP that calls a built-in function,
@@ -10083,7 +10099,7 @@ s390_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
tree arg;
call_expr_arg_iterator iter;
- if (fcode >= S390_BUILTIN_max)
+ if (fcode >= S390_BUILTIN_MAX)
internal_error ("bad builtin fcode");
icode = code_for_builtin[fcode];
if (icode == 0)
@@ -10170,6 +10186,18 @@ s390_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
return const0_rtx;
}
+/* Return the decl for the target specific builtin with the function
+ code FCODE. */
+
+static tree
+s390_builtin_decl (unsigned fcode, bool initialized_p ATTRIBUTE_UNUSED)
+{
+ if (fcode >= S390_BUILTIN_MAX)
+ return error_mark_node;
+
+ return s390_builtin_decls[fcode];
+}
+
/* We call mcount before the function prologue. So a profiled leaf
function should stay a leaf function. */
@@ -12138,6 +12166,8 @@ s390_use_by_pieces_infrastructure_p (unsigned HOST_WIDE_INT size,
#define TARGET_INIT_BUILTINS s390_init_builtins
#undef TARGET_EXPAND_BUILTIN
#define TARGET_EXPAND_BUILTIN s390_expand_builtin
+#undef TARGET_BUILTIN_DECL
+#define TARGET_BUILTIN_DECL s390_builtin_decl
#undef TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA
#define TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA s390_output_addr_const_extra