Hello, this patch adds a small file hsa-builtins.def which defines a few builtins that I then use in OpenMP lowering and expansion.
After we split gridification stuff in omp-low.c to a separate file, we should be able to only conditionally include the file and remove the weird conditional ifdef. OK for trunk? Thanks, Martin 2016-11-11 Martin Jambor <mjam...@suse.cz> gcc/ * hsa-builtins.def: New file. * Makefile.in (BUILTINS_DEF): Add hsa-builtins.def dependency. * builtins.def: Include hsa-builtins.def. (DEF_HSA_BUILTIN): New macro. fortran/ * f95-lang.c (DEF_HSA_BUILTIN): New macro. --- gcc/Makefile.in | 3 ++- gcc/builtins.def | 16 ++++++++++++++++ gcc/fortran/f95-lang.c | 11 +++++++++++ gcc/hsa-builtins.def | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 gcc/hsa-builtins.def diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 7ecd1e4..4e64960 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -911,7 +911,8 @@ RTL_H = $(RTL_BASE_H) $(FLAGS_H) genrtl.h READ_MD_H = $(OBSTACK_H) $(HASHTAB_H) read-md.h PARAMS_H = params.h params-enum.h params.def BUILTINS_DEF = builtins.def sync-builtins.def omp-builtins.def \ - gtm-builtins.def sanitizer.def cilkplus.def cilk-builtins.def + gtm-builtins.def sanitizer.def cilkplus.def cilk-builtins.def \ + hsa-builtins.def INTERNAL_FN_DEF = internal-fn.def INTERNAL_FN_H = internal-fn.h $(INTERNAL_FN_DEF) TREE_CORE_H = tree-core.h coretypes.h all-tree.def tree.def \ diff --git a/gcc/builtins.def b/gcc/builtins.def index 219feeb..4e8f140 100644 --- a/gcc/builtins.def +++ b/gcc/builtins.def @@ -201,6 +201,19 @@ along with GCC; see the file COPYING3. If not see || flag_cilkplus \ || flag_offload_abi != OFFLOAD_ABI_UNSET)) +#undef DEF_HSA_BUILTIN +#ifdef ENABLE_HSA +#define DEF_HSA_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ + DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ + false, false, true, ATTRS, false, \ + (!flag_disable_hsa)) +#else +#define DEF_HSA_BUILTIN(ENUM, NAME, TYPE, ATTRS) \ + DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ + false, false, true, ATTRS, false, \ + (false)) +#endif + /* Builtin used by implementation of Cilk Plus. Most of these are decomposed by the compiler but a few are implemented in libcilkrts. */ #undef DEF_CILK_BUILTIN_STUB @@ -968,6 +981,9 @@ DEF_GCC_BUILTIN (BUILT_IN_LINE, "LINE", BT_FN_INT, ATTR_NOTHROW_LEAF_LIST) /* Offloading and Multi Processing builtins. */ #include "omp-builtins.def" +/* Heterogeneous Systems Architecture. */ +#include "hsa-builtins.def" + /* Cilk keywords builtins. */ #include "cilk-builtins.def" diff --git a/gcc/fortran/f95-lang.c b/gcc/fortran/f95-lang.c index cea6675..22d29da 100644 --- a/gcc/fortran/f95-lang.c +++ b/gcc/fortran/f95-lang.c @@ -1224,6 +1224,17 @@ gfc_init_builtin_functions (void) #undef DEF_GOMP_BUILTIN } +#ifdef ENABLE_HSA + if (!flag_disable_hsa) + { +#undef DEF_HSA_BUILTIN +#define DEF_HSA_BUILTIN(code, name, type, attr) \ + gfc_define_builtin ("__builtin_" name, builtin_types[type], \ + code, name, attr); +#include "../hsa-builtins.def" + } +#endif + gfc_define_builtin ("__builtin_trap", builtin_types[BT_FN_VOID], BUILT_IN_TRAP, NULL, ATTR_NOTHROW_LEAF_LIST); TREE_THIS_VOLATILE (builtin_decl_explicit (BUILT_IN_TRAP)) = 1; diff --git a/gcc/hsa-builtins.def b/gcc/hsa-builtins.def new file mode 100644 index 0000000..cc0409e --- /dev/null +++ b/gcc/hsa-builtins.def @@ -0,0 +1,39 @@ +/* This file contains the definitions and documentation for the + Offloading and Multi Processing builtins used in the GNU compiler. + Copyright (C) 2005-2015 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +/* Before including this file, you should define a macro: + + DEF_HSA_BUILTIN (ENUM, NAME, TYPE, ATTRS) + + See builtins.def for details. */ + +/* The reason why they aren't in gcc/builtins.def is that the Fortran front end + doesn't source those. */ + +DEF_HSA_BUILTIN (BUILT_IN_HSA_WORKGROUPID, "hsa_workgroupid", + BT_FN_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST) +DEF_HSA_BUILTIN (BUILT_IN_HSA_WORKITEMID, "hsa_workitemid", + BT_FN_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST) +DEF_HSA_BUILTIN (BUILT_IN_HSA_WORKITEMABSID, "hsa_workitemabsid", + BT_FN_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST) +DEF_HSA_BUILTIN (BUILT_IN_HSA_GRIDSIZE, "hsa_gridsize", + BT_FN_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST) +DEF_HSA_BUILTIN (BUILT_IN_HSA_CURRENTWORKGROUPSIZE, "hsa_currentworkgroupsize", + BT_FN_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST) -- 2.10.1