This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH 1/3] S/390: Implement TARGET_BUILTIN_DECL
- From: Andreas Krebbel <krebbel at linux dot vnet dot ibm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 24 Feb 2015 17:25:25 +0100
- Subject: [PATCH 1/3] S/390: Implement TARGET_BUILTIN_DECL
- Authentication-results: sourceware.org; auth=none
Hi,
the attached patch defines the TARGET_BUILTIN_DECL macro for S/390 in
order to make our target specific builtins to work with lto.
I'll commit this to mainline after waiting few days for comments.
Bye,
-Andreas-
2015-02-24 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.
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
--
1.9.3