1/* This file contains the definitions and documentation for the
2   Offloading and Multi Processing builtins used in the GNU compiler.
3   Copyright (C) 2005-2015 Free Software Foundation, Inc.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 3, or (at your option) any later
10version.
11
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING3.  If not see
19<http://www.gnu.org/licenses/>.  */
20
21/* Before including this file, you should define a macro:
22
23     DEF_GOACC_BUILTIN (ENUM, NAME, TYPE, ATTRS)
24     DEF_GOACC_BUILTIN_COMPILER (ENUM, NAME, TYPE, ATTRS)
25     DEF_GOMP_BUILTIN (ENUM, NAME, TYPE, ATTRS)
26
27   See builtins.def for details.  */
28
29/* The reason why they aren't in gcc/builtins.def is that the Fortran front end
30   doesn't source those.  */
31
32DEF_GOACC_BUILTIN (BUILT_IN_ACC_GET_DEVICE_TYPE, "acc_get_device_type",
33		   BT_FN_INT, ATTR_NOTHROW_LIST)
34DEF_GOACC_BUILTIN (BUILT_IN_GOACC_DATA_START, "GOACC_data_start",
35		   BT_FN_VOID_INT_SIZE_PTR_PTR_PTR, ATTR_NOTHROW_LIST)
36DEF_GOACC_BUILTIN (BUILT_IN_GOACC_DATA_END, "GOACC_data_end",
37		   BT_FN_VOID, ATTR_NOTHROW_LIST)
38DEF_GOACC_BUILTIN (BUILT_IN_GOACC_ENTER_EXIT_DATA, "GOACC_enter_exit_data",
39		   BT_FN_VOID_INT_SIZE_PTR_PTR_PTR_INT_INT_VAR,
40		   ATTR_NOTHROW_LIST)
41DEF_GOACC_BUILTIN (BUILT_IN_GOACC_PARALLEL, "GOACC_parallel",
42		   BT_FN_VOID_INT_OMPFN_SIZE_PTR_PTR_PTR_INT_INT_INT_INT_INT_VAR,
43		   ATTR_NOTHROW_LIST)
44DEF_GOACC_BUILTIN (BUILT_IN_GOACC_UPDATE, "GOACC_update",
45		   BT_FN_VOID_INT_SIZE_PTR_PTR_PTR_INT_INT_VAR,
46		   ATTR_NOTHROW_LIST)
47DEF_GOACC_BUILTIN (BUILT_IN_GOACC_WAIT, "GOACC_wait",
48		   BT_FN_VOID_INT_INT_VAR,
49		   ATTR_NOTHROW_LIST)
50DEF_GOACC_BUILTIN (BUILT_IN_GOACC_GET_THREAD_NUM, "GOACC_get_thread_num",
51		   BT_FN_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
52DEF_GOACC_BUILTIN (BUILT_IN_GOACC_GET_NUM_THREADS, "GOACC_get_num_threads",
53		   BT_FN_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
54
55DEF_GOACC_BUILTIN_COMPILER (BUILT_IN_ACC_ON_DEVICE, "acc_on_device",
56			    BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
57
58DEF_GOMP_BUILTIN (BUILT_IN_OMP_GET_THREAD_NUM, "omp_get_thread_num",
59		  BT_FN_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
60DEF_GOMP_BUILTIN (BUILT_IN_OMP_GET_NUM_THREADS, "omp_get_num_threads",
61		  BT_FN_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
62DEF_GOMP_BUILTIN (BUILT_IN_OMP_GET_TEAM_NUM, "omp_get_team_num",
63		  BT_FN_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
64DEF_GOMP_BUILTIN (BUILT_IN_OMP_GET_NUM_TEAMS, "omp_get_num_teams",
65		  BT_FN_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
66
67DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ATOMIC_START, "GOMP_atomic_start",
68		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
69DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ATOMIC_END, "GOMP_atomic_end",
70		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
71DEF_GOMP_BUILTIN (BUILT_IN_GOMP_BARRIER, "GOMP_barrier",
72		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
73DEF_GOMP_BUILTIN (BUILT_IN_GOMP_BARRIER_CANCEL, "GOMP_barrier_cancel",
74		  BT_FN_BOOL, ATTR_NOTHROW_LEAF_LIST)
75DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKWAIT, "GOMP_taskwait",
76		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
77DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKYIELD, "GOMP_taskyield",
78		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
79DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKGROUP_START, "GOMP_taskgroup_start",
80		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
81DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKGROUP_END, "GOMP_taskgroup_end",
82		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
83DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CANCEL, "GOMP_cancel",
84		  BT_FN_BOOL_INT_BOOL, ATTR_NOTHROW_LEAF_LIST)
85DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CANCELLATION_POINT, "GOMP_cancellation_point",
86		  BT_FN_BOOL_INT, ATTR_NOTHROW_LEAF_LIST)
87DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_START, "GOMP_critical_start",
88		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
89DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_END, "GOMP_critical_end",
90		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
91DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_NAME_START,
92		  "GOMP_critical_name_start",
93		  BT_FN_VOID_PTRPTR, ATTR_NOTHROW_LEAF_LIST)
94DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_NAME_END,
95		  "GOMP_critical_name_end",
96		  BT_FN_VOID_PTRPTR, ATTR_NOTHROW_LEAF_LIST)
97/* NOTE: Do not change the order of BUILT_IN_GOMP_LOOP_*_START.  They
98   are used in index arithmetic with enum omp_clause_schedule_kind
99   in omp-low.c.  */
100DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_START,
101		  "GOMP_loop_static_start",
102		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
103		  ATTR_NOTHROW_LEAF_LIST)
104DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DYNAMIC_START,
105		  "GOMP_loop_dynamic_start",
106		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
107		  ATTR_NOTHROW_LEAF_LIST)
108DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_GUIDED_START,
109		  "GOMP_loop_guided_start",
110		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
111		  ATTR_NOTHROW_LEAF_LIST)
112DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_RUNTIME_START,
113		  "GOMP_loop_runtime_start",
114		  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
115		  ATTR_NOTHROW_LEAF_LIST)
116DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_STATIC_START,
117		  "GOMP_loop_ordered_static_start",
118		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
119		  ATTR_NOTHROW_LEAF_LIST)
120DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_START,
121		  "GOMP_loop_ordered_dynamic_start",
122		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
123		  ATTR_NOTHROW_LEAF_LIST)
124DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_START,
125		  "GOMP_loop_ordered_guided_start",
126		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
127		  ATTR_NOTHROW_LEAF_LIST)
128DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_START,
129		  "GOMP_loop_ordered_runtime_start",
130		  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
131		  ATTR_NOTHROW_LEAF_LIST)
132DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_NEXT, "GOMP_loop_static_next",
133		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
134DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DYNAMIC_NEXT, "GOMP_loop_dynamic_next",
135		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
136DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_GUIDED_NEXT, "GOMP_loop_guided_next",
137		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
138DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_RUNTIME_NEXT, "GOMP_loop_runtime_next",
139		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
140DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_STATIC_NEXT,
141		  "GOMP_loop_ordered_static_next",
142		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
143DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_NEXT,
144		  "GOMP_loop_ordered_dynamic_next",
145		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
146DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_NEXT,
147		  "GOMP_loop_ordered_guided_next",
148		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
149DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_NEXT,
150		  "GOMP_loop_ordered_runtime_next",
151		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
152DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_STATIC_START,
153		  "GOMP_loop_ull_static_start",
154		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
155		  ATTR_NOTHROW_LEAF_LIST)
156DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_DYNAMIC_START,
157		  "GOMP_loop_ull_dynamic_start",
158		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
159		  ATTR_NOTHROW_LEAF_LIST)
160DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_GUIDED_START,
161		  "GOMP_loop_ull_guided_start",
162		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
163		  ATTR_NOTHROW_LEAF_LIST)
164DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_RUNTIME_START,
165		  "GOMP_loop_ull_runtime_start",
166		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
167		  ATTR_NOTHROW_LEAF_LIST)
168DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_STATIC_START,
169		  "GOMP_loop_ull_ordered_static_start",
170		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
171		  ATTR_NOTHROW_LEAF_LIST)
172DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_DYNAMIC_START,
173		  "GOMP_loop_ull_ordered_dynamic_start",
174		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
175		  ATTR_NOTHROW_LEAF_LIST)
176DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_GUIDED_START,
177		  "GOMP_loop_ull_ordered_guided_start",
178		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
179		  ATTR_NOTHROW_LEAF_LIST)
180DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_RUNTIME_START,
181		  "GOMP_loop_ull_ordered_runtime_start",
182		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
183		  ATTR_NOTHROW_LEAF_LIST)
184DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_STATIC_NEXT, "GOMP_loop_ull_static_next",
185		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
186DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_DYNAMIC_NEXT, "GOMP_loop_ull_dynamic_next",
187		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
188DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_GUIDED_NEXT, "GOMP_loop_ull_guided_next",
189		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
190DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_RUNTIME_NEXT, "GOMP_loop_ull_runtime_next",
191		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
192DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_STATIC_NEXT,
193		  "GOMP_loop_ull_ordered_static_next",
194		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
195DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_DYNAMIC_NEXT,
196		  "GOMP_loop_ull_ordered_dynamic_next",
197		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
198DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_GUIDED_NEXT,
199		  "GOMP_loop_ull_ordered_guided_next",
200		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
201DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_RUNTIME_NEXT,
202		  "GOMP_loop_ull_ordered_runtime_next",
203		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
204/* NOTE: Do not change the order of BUILT_IN_GOMP_PARALLEL_LOOP_*.
205   They are used in index arithmetic with enum omp_clause_schedule_kind
206   in omp-low.c.  */
207DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_STATIC,
208		  "GOMP_parallel_loop_static",
209		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
210		  ATTR_NOTHROW_LIST)
211DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC,
212		  "GOMP_parallel_loop_dynamic",
213		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
214		  ATTR_NOTHROW_LIST)
215DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED,
216		  "GOMP_parallel_loop_guided",
217		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
218		  ATTR_NOTHROW_LIST)
219DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME,
220		  "GOMP_parallel_loop_runtime",
221		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
222		  ATTR_NOTHROW_LIST)
223DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END, "GOMP_loop_end",
224		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
225DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END_CANCEL, "GOMP_loop_end_cancel",
226		  BT_FN_BOOL, ATTR_NOTHROW_LEAF_LIST)
227DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END_NOWAIT, "GOMP_loop_end_nowait",
228		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
229DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_START, "GOMP_ordered_start",
230		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
231DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_END, "GOMP_ordered_end",
232		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
233DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL, "GOMP_parallel",
234		  BT_FN_VOID_OMPFN_PTR_UINT_UINT, ATTR_NOTHROW_LIST)
235DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASK, "GOMP_task",
236		  BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR,
237		  ATTR_NOTHROW_LIST)
238DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_START, "GOMP_sections_start",
239		  BT_FN_UINT_UINT, ATTR_NOTHROW_LEAF_LIST)
240DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_NEXT, "GOMP_sections_next",
241		  BT_FN_UINT, ATTR_NOTHROW_LEAF_LIST)
242DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_SECTIONS,
243		  "GOMP_parallel_sections",
244		  BT_FN_VOID_OMPFN_PTR_UINT_UINT_UINT, ATTR_NOTHROW_LIST)
245DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END, "GOMP_sections_end",
246		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
247DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END_CANCEL,
248		  "GOMP_sections_end_cancel",
249		  BT_FN_BOOL, ATTR_NOTHROW_LEAF_LIST)
250DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END_NOWAIT,
251		  "GOMP_sections_end_nowait",
252		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
253DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_START, "GOMP_single_start",
254		  BT_FN_BOOL, ATTR_NOTHROW_LEAF_LIST)
255DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_START, "GOMP_single_copy_start",
256		  BT_FN_PTR, ATTR_NOTHROW_LEAF_LIST)
257DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_END, "GOMP_single_copy_end",
258		  BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
259DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TARGET, "GOMP_target",
260		  BT_FN_VOID_INT_OMPFN_PTR_SIZE_PTR_PTR_PTR,
261		  ATTR_NOTHROW_LIST)
262DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TARGET_DATA, "GOMP_target_data",
263		  BT_FN_VOID_INT_PTR_SIZE_PTR_PTR_PTR, ATTR_NOTHROW_LIST)
264DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TARGET_END_DATA, "GOMP_target_end_data",
265		  BT_FN_VOID, ATTR_NOTHROW_LIST)
266DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TARGET_UPDATE, "GOMP_target_update",
267		  BT_FN_VOID_INT_PTR_SIZE_PTR_PTR_PTR, ATTR_NOTHROW_LIST)
268DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TEAMS, "GOMP_teams",
269		  BT_FN_VOID_UINT_UINT, ATTR_NOTHROW_LIST)
270