internal-fn.def revision 1.7 1 1.1 mrg /* Internal functions.
2 1.7 mrg Copyright (C) 2011-2018 Free Software Foundation, Inc.
3 1.1 mrg
4 1.1 mrg This file is part of GCC.
5 1.1 mrg
6 1.1 mrg GCC is free software; you can redistribute it and/or modify it under
7 1.1 mrg the terms of the GNU General Public License as published by the Free
8 1.1 mrg Software Foundation; either version 3, or (at your option) any later
9 1.1 mrg version.
10 1.1 mrg
11 1.1 mrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 1.1 mrg WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 1.1 mrg FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 1.1 mrg for more details.
15 1.1 mrg
16 1.1 mrg You should have received a copy of the GNU General Public License
17 1.1 mrg along with GCC; see the file COPYING3. If not see
18 1.1 mrg <http://www.gnu.org/licenses/>. */
19 1.1 mrg
20 1.1 mrg /* This file specifies a list of internal "functions". These functions
21 1.1 mrg differ from built-in functions in that they have no linkage and cannot
22 1.1 mrg be called directly by the user. They represent operations that are only
23 1.1 mrg synthesised by GCC itself.
24 1.1 mrg
25 1.1 mrg Internal functions are used instead of tree codes if the operation
26 1.1 mrg and its operands are more naturally represented as a GIMPLE_CALL
27 1.1 mrg than a GIMPLE_ASSIGN.
28 1.1 mrg
29 1.4 mrg Each entry in this file has one of the forms:
30 1.1 mrg
31 1.3 mrg DEF_INTERNAL_FN (NAME, FLAGS, FNSPEC)
32 1.4 mrg DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
33 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (NAME, FLAGS, SELECTOR, SIGNED_OPTAB,
34 1.7 mrg UNSIGNED_OPTAB, TYPE)
35 1.4 mrg DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE)
36 1.4 mrg DEF_INTERNAL_INT_FN (NAME, FLAGS, OPTAB, TYPE)
37 1.1 mrg
38 1.3 mrg where NAME is the name of the function, FLAGS is a set of
39 1.3 mrg ECF_* flags and FNSPEC is a string describing functions fnspec.
40 1.3 mrg
41 1.4 mrg DEF_INTERNAL_OPTAB_FN defines an internal function that maps to a
42 1.4 mrg direct optab. The function should only be called with a given
43 1.4 mrg set of types if the associated optab is available for the modes
44 1.4 mrg of those types. OPTAB says what optab to use (without the trailing
45 1.4 mrg "_optab") and TYPE categorizes the optab based on its inputs and
46 1.4 mrg outputs. The possible types of optab are:
47 1.4 mrg
48 1.4 mrg - mask_load: currently just maskload
49 1.4 mrg - load_lanes: currently just vec_load_lanes
50 1.7 mrg - mask_load_lanes: currently just vec_mask_load_lanes
51 1.7 mrg - gather_load: used for {mask_,}gather_load
52 1.4 mrg
53 1.4 mrg - mask_store: currently just maskstore
54 1.4 mrg - store_lanes: currently just vec_store_lanes
55 1.7 mrg - mask_store_lanes: currently just vec_mask_store_lanes
56 1.7 mrg - scatter_store: used for {mask_,}scatter_store
57 1.7 mrg
58 1.7 mrg - unary: a normal unary optab, such as vec_reverse_<mode>
59 1.7 mrg - binary: a normal binary optab, such as vec_interleave_lo_<mode>
60 1.7 mrg
61 1.7 mrg - cond_binary: a conditional binary optab, such as add<mode>cc
62 1.7 mrg
63 1.7 mrg - fold_left: for scalar = FN (scalar, vector), keyed off the vector mode
64 1.7 mrg
65 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN defines an internal function that
66 1.7 mrg maps to one of two optabs, depending on the signedness of an input.
67 1.7 mrg SIGNED_OPTAB and UNSIGNED_OPTAB are the optabs for signed and
68 1.7 mrg unsigned inputs respectively, both without the trailing "_optab".
69 1.7 mrg SELECTOR says which type in the tree_pair determines the signedness.
70 1.4 mrg
71 1.4 mrg DEF_INTERNAL_FLT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition,
72 1.4 mrg the function implements the computational part of a built-in math
73 1.4 mrg function BUILT_IN_<NAME>{F,,L}. Unlike some built-in functions,
74 1.4 mrg these internal functions never set errno.
75 1.4 mrg
76 1.4 mrg DEF_INTERNAL_INT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition
77 1.4 mrg says that the function extends the C-level BUILT_IN_<NAME>{,L,LL,IMAX}
78 1.4 mrg group of functions to any integral mode (including vector modes).
79 1.4 mrg
80 1.3 mrg Each entry must have a corresponding expander of the form:
81 1.1 mrg
82 1.3 mrg void expand_NAME (gimple_call stmt)
83 1.1 mrg
84 1.4 mrg where STMT is the statement that performs the call. These are generated
85 1.4 mrg automatically for optab functions and call out to a function or macro
86 1.4 mrg called expand_<TYPE>_optab_fn. */
87 1.4 mrg
88 1.4 mrg #ifndef DEF_INTERNAL_FN
89 1.4 mrg #define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC)
90 1.4 mrg #endif
91 1.4 mrg
92 1.4 mrg #ifndef DEF_INTERNAL_OPTAB_FN
93 1.4 mrg #define DEF_INTERNAL_OPTAB_FN(NAME, FLAGS, OPTAB, TYPE) \
94 1.4 mrg DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
95 1.4 mrg #endif
96 1.4 mrg
97 1.7 mrg #ifndef DEF_INTERNAL_SIGNED_OPTAB_FN
98 1.7 mrg #define DEF_INTERNAL_SIGNED_OPTAB_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, \
99 1.7 mrg UNSIGNED_OPTAB, TYPE) \
100 1.7 mrg DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
101 1.7 mrg #endif
102 1.7 mrg
103 1.4 mrg #ifndef DEF_INTERNAL_FLT_FN
104 1.4 mrg #define DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) \
105 1.4 mrg DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
106 1.4 mrg #endif
107 1.4 mrg
108 1.7 mrg #ifndef DEF_INTERNAL_FLT_FLOATN_FN
109 1.7 mrg #define DEF_INTERNAL_FLT_FLOATN_FN(NAME, FLAGS, OPTAB, TYPE) \
110 1.7 mrg DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE)
111 1.7 mrg #endif
112 1.7 mrg
113 1.4 mrg #ifndef DEF_INTERNAL_INT_FN
114 1.4 mrg #define DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) \
115 1.4 mrg DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
116 1.4 mrg #endif
117 1.4 mrg
118 1.4 mrg DEF_INTERNAL_OPTAB_FN (MASK_LOAD, ECF_PURE, maskload, mask_load)
119 1.4 mrg DEF_INTERNAL_OPTAB_FN (LOAD_LANES, ECF_CONST, vec_load_lanes, load_lanes)
120 1.7 mrg DEF_INTERNAL_OPTAB_FN (MASK_LOAD_LANES, ECF_PURE,
121 1.7 mrg vec_mask_load_lanes, mask_load_lanes)
122 1.7 mrg
123 1.7 mrg DEF_INTERNAL_OPTAB_FN (GATHER_LOAD, ECF_PURE, gather_load, gather_load)
124 1.7 mrg DEF_INTERNAL_OPTAB_FN (MASK_GATHER_LOAD, ECF_PURE,
125 1.7 mrg mask_gather_load, gather_load)
126 1.7 mrg
127 1.7 mrg DEF_INTERNAL_OPTAB_FN (SCATTER_STORE, 0, scatter_store, scatter_store)
128 1.7 mrg DEF_INTERNAL_OPTAB_FN (MASK_SCATTER_STORE, 0,
129 1.7 mrg mask_scatter_store, scatter_store)
130 1.4 mrg
131 1.4 mrg DEF_INTERNAL_OPTAB_FN (MASK_STORE, 0, maskstore, mask_store)
132 1.4 mrg DEF_INTERNAL_OPTAB_FN (STORE_LANES, ECF_CONST, vec_store_lanes, store_lanes)
133 1.7 mrg DEF_INTERNAL_OPTAB_FN (MASK_STORE_LANES, 0,
134 1.7 mrg vec_mask_store_lanes, mask_store_lanes)
135 1.7 mrg
136 1.7 mrg DEF_INTERNAL_OPTAB_FN (WHILE_ULT, ECF_CONST | ECF_NOTHROW, while_ult, while)
137 1.7 mrg
138 1.7 mrg DEF_INTERNAL_OPTAB_FN (VEC_SHL_INSERT, ECF_CONST | ECF_NOTHROW,
139 1.7 mrg vec_shl_insert, binary)
140 1.7 mrg
141 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_ADD, ECF_CONST, cond_add, cond_binary)
142 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_SUB, ECF_CONST, cond_sub, cond_binary)
143 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MIN, ECF_CONST, first,
144 1.7 mrg cond_smin, cond_umin, cond_binary)
145 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MAX, ECF_CONST, first,
146 1.7 mrg cond_smax, cond_umax, cond_binary)
147 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_AND, ECF_CONST | ECF_NOTHROW,
148 1.7 mrg cond_and, cond_binary)
149 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_IOR, ECF_CONST | ECF_NOTHROW,
150 1.7 mrg cond_ior, cond_binary)
151 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_XOR, ECF_CONST | ECF_NOTHROW,
152 1.7 mrg cond_xor, cond_binary)
153 1.4 mrg
154 1.4 mrg DEF_INTERNAL_OPTAB_FN (RSQRT, ECF_CONST, rsqrt, unary)
155 1.4 mrg
156 1.7 mrg DEF_INTERNAL_OPTAB_FN (REDUC_PLUS, ECF_CONST | ECF_NOTHROW,
157 1.7 mrg reduc_plus_scal, unary)
158 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MAX, ECF_CONST | ECF_NOTHROW, first,
159 1.7 mrg reduc_smax_scal, reduc_umax_scal, unary)
160 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MIN, ECF_CONST | ECF_NOTHROW, first,
161 1.7 mrg reduc_smin_scal, reduc_umin_scal, unary)
162 1.7 mrg DEF_INTERNAL_OPTAB_FN (REDUC_AND, ECF_CONST | ECF_NOTHROW,
163 1.7 mrg reduc_and_scal, unary)
164 1.7 mrg DEF_INTERNAL_OPTAB_FN (REDUC_IOR, ECF_CONST | ECF_NOTHROW,
165 1.7 mrg reduc_ior_scal, unary)
166 1.7 mrg DEF_INTERNAL_OPTAB_FN (REDUC_XOR, ECF_CONST | ECF_NOTHROW,
167 1.7 mrg reduc_xor_scal, unary)
168 1.7 mrg
169 1.7 mrg /* Extract the last active element from a vector. */
170 1.7 mrg DEF_INTERNAL_OPTAB_FN (EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
171 1.7 mrg extract_last, cond_unary)
172 1.7 mrg
173 1.7 mrg /* Same, but return the first argument if no elements are active. */
174 1.7 mrg DEF_INTERNAL_OPTAB_FN (FOLD_EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
175 1.7 mrg fold_extract_last, fold_extract)
176 1.7 mrg
177 1.7 mrg DEF_INTERNAL_OPTAB_FN (FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
178 1.7 mrg fold_left_plus, fold_left)
179 1.7 mrg
180 1.4 mrg /* Unary math functions. */
181 1.4 mrg DEF_INTERNAL_FLT_FN (ACOS, ECF_CONST, acos, unary)
182 1.4 mrg DEF_INTERNAL_FLT_FN (ASIN, ECF_CONST, asin, unary)
183 1.4 mrg DEF_INTERNAL_FLT_FN (ATAN, ECF_CONST, atan, unary)
184 1.4 mrg DEF_INTERNAL_FLT_FN (COS, ECF_CONST, cos, unary)
185 1.4 mrg DEF_INTERNAL_FLT_FN (EXP, ECF_CONST, exp, unary)
186 1.4 mrg DEF_INTERNAL_FLT_FN (EXP10, ECF_CONST, exp10, unary)
187 1.4 mrg DEF_INTERNAL_FLT_FN (EXP2, ECF_CONST, exp2, unary)
188 1.4 mrg DEF_INTERNAL_FLT_FN (EXPM1, ECF_CONST, expm1, unary)
189 1.4 mrg DEF_INTERNAL_FLT_FN (LOG, ECF_CONST, log, unary)
190 1.4 mrg DEF_INTERNAL_FLT_FN (LOG10, ECF_CONST, log10, unary)
191 1.4 mrg DEF_INTERNAL_FLT_FN (LOG1P, ECF_CONST, log1p, unary)
192 1.4 mrg DEF_INTERNAL_FLT_FN (LOG2, ECF_CONST, log2, unary)
193 1.4 mrg DEF_INTERNAL_FLT_FN (LOGB, ECF_CONST, logb, unary)
194 1.4 mrg DEF_INTERNAL_FLT_FN (SIGNIFICAND, ECF_CONST, significand, unary)
195 1.4 mrg DEF_INTERNAL_FLT_FN (SIN, ECF_CONST, sin, unary)
196 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (SQRT, ECF_CONST, sqrt, unary)
197 1.4 mrg DEF_INTERNAL_FLT_FN (TAN, ECF_CONST, tan, unary)
198 1.4 mrg
199 1.4 mrg /* FP rounding. */
200 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (CEIL, ECF_CONST, ceil, unary)
201 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (FLOOR, ECF_CONST, floor, unary)
202 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (NEARBYINT, ECF_CONST, nearbyint, unary)
203 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (RINT, ECF_CONST, rint, unary)
204 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (ROUND, ECF_CONST, round, unary)
205 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (TRUNC, ECF_CONST, btrunc, unary)
206 1.4 mrg
207 1.4 mrg /* Binary math functions. */
208 1.4 mrg DEF_INTERNAL_FLT_FN (ATAN2, ECF_CONST, atan2, binary)
209 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (COPYSIGN, ECF_CONST, copysign, binary)
210 1.4 mrg DEF_INTERNAL_FLT_FN (FMOD, ECF_CONST, fmod, binary)
211 1.4 mrg DEF_INTERNAL_FLT_FN (POW, ECF_CONST, pow, binary)
212 1.4 mrg DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary)
213 1.4 mrg DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary)
214 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (FMIN, ECF_CONST, fmin, binary)
215 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (FMAX, ECF_CONST, fmax, binary)
216 1.7 mrg DEF_INTERNAL_OPTAB_FN (XORSIGN, ECF_CONST, xorsign, binary)
217 1.4 mrg
218 1.4 mrg /* FP scales. */
219 1.4 mrg DEF_INTERNAL_FLT_FN (LDEXP, ECF_CONST, ldexp, binary)
220 1.4 mrg
221 1.4 mrg /* Unary integer ops. */
222 1.7 mrg DEF_INTERNAL_INT_FN (CLRSB, ECF_CONST | ECF_NOTHROW, clrsb, unary)
223 1.7 mrg DEF_INTERNAL_INT_FN (CLZ, ECF_CONST | ECF_NOTHROW, clz, unary)
224 1.7 mrg DEF_INTERNAL_INT_FN (CTZ, ECF_CONST | ECF_NOTHROW, ctz, unary)
225 1.7 mrg DEF_INTERNAL_INT_FN (FFS, ECF_CONST | ECF_NOTHROW, ffs, unary)
226 1.7 mrg DEF_INTERNAL_INT_FN (PARITY, ECF_CONST | ECF_NOTHROW, parity, unary)
227 1.7 mrg DEF_INTERNAL_INT_FN (POPCOUNT, ECF_CONST | ECF_NOTHROW, popcount, unary)
228 1.1 mrg
229 1.6 mrg DEF_INTERNAL_FN (GOMP_USE_SIMT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
230 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_ENTER, ECF_LEAF | ECF_NOTHROW, NULL)
231 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_ENTER_ALLOC, ECF_LEAF | ECF_NOTHROW, NULL)
232 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_EXIT, ECF_LEAF | ECF_NOTHROW, NULL)
233 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
234 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_VF, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
235 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_LAST_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
236 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_ORDERED_PRED, ECF_LEAF | ECF_NOTHROW, NULL)
237 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_VOTE_ANY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
238 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_XCHG_BFLY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
239 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_XCHG_IDX, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
240 1.3 mrg DEF_INTERNAL_FN (GOMP_SIMD_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
241 1.3 mrg DEF_INTERNAL_FN (GOMP_SIMD_VF, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
242 1.3 mrg DEF_INTERNAL_FN (GOMP_SIMD_LAST_LANE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
243 1.4 mrg DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_START, ECF_LEAF | ECF_NOTHROW, NULL)
244 1.4 mrg DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_END, ECF_LEAF | ECF_NOTHROW, NULL)
245 1.3 mrg DEF_INTERNAL_FN (LOOP_VECTORIZED, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
246 1.7 mrg DEF_INTERNAL_FN (LOOP_DIST_ALIAS, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
247 1.3 mrg DEF_INTERNAL_FN (ANNOTATE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
248 1.3 mrg DEF_INTERNAL_FN (UBSAN_NULL, ECF_LEAF | ECF_NOTHROW, ".R.")
249 1.3 mrg DEF_INTERNAL_FN (UBSAN_BOUNDS, ECF_LEAF | ECF_NOTHROW, NULL)
250 1.3 mrg DEF_INTERNAL_FN (UBSAN_VPTR, ECF_LEAF | ECF_NOTHROW, ".RR..")
251 1.3 mrg DEF_INTERNAL_FN (UBSAN_CHECK_ADD, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
252 1.3 mrg DEF_INTERNAL_FN (UBSAN_CHECK_SUB, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
253 1.3 mrg DEF_INTERNAL_FN (UBSAN_CHECK_MUL, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
254 1.7 mrg DEF_INTERNAL_FN (UBSAN_PTR, ECF_LEAF | ECF_NOTHROW, ".R.")
255 1.3 mrg DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW, NULL)
256 1.3 mrg DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NULL)
257 1.3 mrg DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
258 1.7 mrg DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW, "..R..")
259 1.7 mrg DEF_INTERNAL_FN (ASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL)
260 1.6 mrg DEF_INTERNAL_FN (ASAN_POISON, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
261 1.6 mrg DEF_INTERNAL_FN (ASAN_POISON_USE, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
262 1.3 mrg DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
263 1.3 mrg DEF_INTERNAL_FN (SUB_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
264 1.3 mrg DEF_INTERNAL_FN (MUL_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
265 1.3 mrg DEF_INTERNAL_FN (TSAN_FUNC_EXIT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
266 1.4 mrg DEF_INTERNAL_FN (VA_ARG, ECF_NOTHROW | ECF_LEAF, NULL)
267 1.4 mrg
268 1.4 mrg /* An unduplicable, uncombinable function. Generally used to preserve
269 1.4 mrg a CFG property in the face of jump threading, tail merging or
270 1.4 mrg other such optimizations. The first argument distinguishes
271 1.4 mrg between uses. See internal-fn.h for usage. */
272 1.4 mrg DEF_INTERNAL_FN (UNIQUE, ECF_NOTHROW, NULL)
273 1.6 mrg DEF_INTERNAL_FN (PHI, 0, NULL)
274 1.4 mrg
275 1.4 mrg /* DIM_SIZE and DIM_POS return the size of a particular compute
276 1.4 mrg dimension and the executing thread's position within that
277 1.4 mrg dimension. DIM_POS is pure (and not const) so that it isn't
278 1.4 mrg thought to clobber memory and can be gcse'd within a single
279 1.4 mrg parallel region, but not across FORK/JOIN boundaries. They take a
280 1.6 mrg single INTEGER_CST argument. This might be overly conservative. */
281 1.4 mrg DEF_INTERNAL_FN (GOACC_DIM_SIZE, ECF_CONST | ECF_NOTHROW | ECF_LEAF, ".")
282 1.4 mrg DEF_INTERNAL_FN (GOACC_DIM_POS, ECF_PURE | ECF_NOTHROW | ECF_LEAF, ".")
283 1.4 mrg
284 1.4 mrg /* OpenACC looping abstraction. See internal-fn.h for usage. */
285 1.4 mrg DEF_INTERNAL_FN (GOACC_LOOP, ECF_PURE | ECF_NOTHROW, NULL)
286 1.4 mrg
287 1.4 mrg /* OpenACC reduction abstraction. See internal-fn.h for usage. */
288 1.4 mrg DEF_INTERNAL_FN (GOACC_REDUCTION, ECF_NOTHROW | ECF_LEAF, NULL)
289 1.4 mrg
290 1.6 mrg /* Openacc tile abstraction. Describes the spans of the element loop.
291 1.6 mrg GOACC_TILE (num-loops, loop-no, tile-arg, tile-mask, element-mask). */
292 1.6 mrg DEF_INTERNAL_FN (GOACC_TILE, ECF_NOTHROW | ECF_LEAF, NULL)
293 1.6 mrg
294 1.4 mrg /* Set errno to EDOM, if GCC knows how to do that directly for the
295 1.4 mrg current target. */
296 1.4 mrg DEF_INTERNAL_FN (SET_EDOM, ECF_LEAF | ECF_NOTHROW, NULL)
297 1.4 mrg
298 1.6 mrg /* Atomic functions. These don't have ECF_NOTHROW because for
299 1.6 mrg -fnon-call-exceptions they can throw, otherwise we set
300 1.6 mrg gimple_call_nothrow_p on it. */
301 1.6 mrg DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_SET, ECF_LEAF, NULL)
302 1.6 mrg DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_COMPLEMENT, ECF_LEAF, NULL)
303 1.6 mrg DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_RESET, ECF_LEAF, NULL)
304 1.6 mrg DEF_INTERNAL_FN (ATOMIC_COMPARE_EXCHANGE, ECF_LEAF, NULL)
305 1.6 mrg
306 1.6 mrg /* To implement [[fallthrough]]. */
307 1.6 mrg DEF_INTERNAL_FN (FALLTHROUGH, ECF_LEAF | ECF_NOTHROW, NULL)
308 1.6 mrg
309 1.6 mrg /* To implement __builtin_launder. */
310 1.6 mrg DEF_INTERNAL_FN (LAUNDER, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
311 1.6 mrg
312 1.6 mrg /* Divmod function. */
313 1.6 mrg DEF_INTERNAL_FN (DIVMOD, ECF_CONST | ECF_LEAF, NULL)
314 1.6 mrg
315 1.7 mrg /* A NOP function with arbitrary arguments and return value. */
316 1.7 mrg DEF_INTERNAL_FN (NOP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
317 1.7 mrg
318 1.4 mrg #undef DEF_INTERNAL_INT_FN
319 1.4 mrg #undef DEF_INTERNAL_FLT_FN
320 1.7 mrg #undef DEF_INTERNAL_FLT_FLOATN_FN
321 1.7 mrg #undef DEF_INTERNAL_SIGNED_OPTAB_FN
322 1.4 mrg #undef DEF_INTERNAL_OPTAB_FN
323 1.4 mrg #undef DEF_INTERNAL_FN
324