internal-fn.def revision 1.9 1 1.1 mrg /* Internal functions.
2 1.9 mrg Copyright (C) 2011-2020 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.8 mrg - ternary: a normal ternary optab, such as fma<mode>4
61 1.7 mrg
62 1.8 mrg - cond_binary: a conditional binary optab, such as cond_add<mode>
63 1.8 mrg - cond_ternary: a conditional ternary optab, such as cond_fma_rev<mode>
64 1.7 mrg
65 1.7 mrg - fold_left: for scalar = FN (scalar, vector), keyed off the vector mode
66 1.9 mrg - check_ptrs: used for check_{raw,war}_ptrs
67 1.7 mrg
68 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN defines an internal function that
69 1.7 mrg maps to one of two optabs, depending on the signedness of an input.
70 1.7 mrg SIGNED_OPTAB and UNSIGNED_OPTAB are the optabs for signed and
71 1.7 mrg unsigned inputs respectively, both without the trailing "_optab".
72 1.7 mrg SELECTOR says which type in the tree_pair determines the signedness.
73 1.4 mrg
74 1.4 mrg DEF_INTERNAL_FLT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition,
75 1.4 mrg the function implements the computational part of a built-in math
76 1.4 mrg function BUILT_IN_<NAME>{F,,L}. Unlike some built-in functions,
77 1.4 mrg these internal functions never set errno.
78 1.4 mrg
79 1.4 mrg DEF_INTERNAL_INT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition
80 1.4 mrg says that the function extends the C-level BUILT_IN_<NAME>{,L,LL,IMAX}
81 1.4 mrg group of functions to any integral mode (including vector modes).
82 1.4 mrg
83 1.3 mrg Each entry must have a corresponding expander of the form:
84 1.1 mrg
85 1.3 mrg void expand_NAME (gimple_call stmt)
86 1.1 mrg
87 1.4 mrg where STMT is the statement that performs the call. These are generated
88 1.4 mrg automatically for optab functions and call out to a function or macro
89 1.4 mrg called expand_<TYPE>_optab_fn. */
90 1.4 mrg
91 1.4 mrg #ifndef DEF_INTERNAL_FN
92 1.4 mrg #define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC)
93 1.4 mrg #endif
94 1.4 mrg
95 1.4 mrg #ifndef DEF_INTERNAL_OPTAB_FN
96 1.4 mrg #define DEF_INTERNAL_OPTAB_FN(NAME, FLAGS, OPTAB, TYPE) \
97 1.4 mrg DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
98 1.4 mrg #endif
99 1.4 mrg
100 1.7 mrg #ifndef DEF_INTERNAL_SIGNED_OPTAB_FN
101 1.7 mrg #define DEF_INTERNAL_SIGNED_OPTAB_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, \
102 1.7 mrg UNSIGNED_OPTAB, TYPE) \
103 1.7 mrg DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
104 1.7 mrg #endif
105 1.7 mrg
106 1.4 mrg #ifndef DEF_INTERNAL_FLT_FN
107 1.4 mrg #define DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) \
108 1.4 mrg DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
109 1.4 mrg #endif
110 1.4 mrg
111 1.7 mrg #ifndef DEF_INTERNAL_FLT_FLOATN_FN
112 1.7 mrg #define DEF_INTERNAL_FLT_FLOATN_FN(NAME, FLAGS, OPTAB, TYPE) \
113 1.7 mrg DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE)
114 1.7 mrg #endif
115 1.7 mrg
116 1.4 mrg #ifndef DEF_INTERNAL_INT_FN
117 1.4 mrg #define DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) \
118 1.4 mrg DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
119 1.4 mrg #endif
120 1.4 mrg
121 1.4 mrg DEF_INTERNAL_OPTAB_FN (MASK_LOAD, ECF_PURE, maskload, mask_load)
122 1.4 mrg DEF_INTERNAL_OPTAB_FN (LOAD_LANES, ECF_CONST, vec_load_lanes, load_lanes)
123 1.7 mrg DEF_INTERNAL_OPTAB_FN (MASK_LOAD_LANES, ECF_PURE,
124 1.7 mrg vec_mask_load_lanes, mask_load_lanes)
125 1.7 mrg
126 1.7 mrg DEF_INTERNAL_OPTAB_FN (GATHER_LOAD, ECF_PURE, gather_load, gather_load)
127 1.7 mrg DEF_INTERNAL_OPTAB_FN (MASK_GATHER_LOAD, ECF_PURE,
128 1.7 mrg mask_gather_load, gather_load)
129 1.7 mrg
130 1.7 mrg DEF_INTERNAL_OPTAB_FN (SCATTER_STORE, 0, scatter_store, scatter_store)
131 1.7 mrg DEF_INTERNAL_OPTAB_FN (MASK_SCATTER_STORE, 0,
132 1.7 mrg mask_scatter_store, scatter_store)
133 1.4 mrg
134 1.4 mrg DEF_INTERNAL_OPTAB_FN (MASK_STORE, 0, maskstore, mask_store)
135 1.4 mrg DEF_INTERNAL_OPTAB_FN (STORE_LANES, ECF_CONST, vec_store_lanes, store_lanes)
136 1.7 mrg DEF_INTERNAL_OPTAB_FN (MASK_STORE_LANES, 0,
137 1.7 mrg vec_mask_store_lanes, mask_store_lanes)
138 1.7 mrg
139 1.7 mrg DEF_INTERNAL_OPTAB_FN (WHILE_ULT, ECF_CONST | ECF_NOTHROW, while_ult, while)
140 1.9 mrg DEF_INTERNAL_OPTAB_FN (CHECK_RAW_PTRS, ECF_CONST | ECF_NOTHROW,
141 1.9 mrg check_raw_ptrs, check_ptrs)
142 1.9 mrg DEF_INTERNAL_OPTAB_FN (CHECK_WAR_PTRS, ECF_CONST | ECF_NOTHROW,
143 1.9 mrg check_war_ptrs, check_ptrs)
144 1.7 mrg
145 1.7 mrg DEF_INTERNAL_OPTAB_FN (VEC_SHL_INSERT, ECF_CONST | ECF_NOTHROW,
146 1.7 mrg vec_shl_insert, binary)
147 1.7 mrg
148 1.9 mrg DEF_INTERNAL_OPTAB_FN (DIV_POW2, ECF_CONST | ECF_NOTHROW, sdiv_pow2, binary)
149 1.9 mrg
150 1.8 mrg DEF_INTERNAL_OPTAB_FN (FMS, ECF_CONST, fms, ternary)
151 1.8 mrg DEF_INTERNAL_OPTAB_FN (FNMA, ECF_CONST, fnma, ternary)
152 1.8 mrg DEF_INTERNAL_OPTAB_FN (FNMS, ECF_CONST, fnms, ternary)
153 1.8 mrg
154 1.8 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_FLOOR, ECF_CONST | ECF_NOTHROW, first,
155 1.8 mrg savg_floor, uavg_floor, binary)
156 1.8 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_CEIL, ECF_CONST | ECF_NOTHROW, first,
157 1.8 mrg savg_ceil, uavg_ceil, binary)
158 1.8 mrg
159 1.9 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (MULHS, ECF_CONST | ECF_NOTHROW, first,
160 1.9 mrg smulhs, umulhs, binary)
161 1.9 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (MULHRS, ECF_CONST | ECF_NOTHROW, first,
162 1.9 mrg smulhrs, umulhrs, binary)
163 1.9 mrg
164 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_ADD, ECF_CONST, cond_add, cond_binary)
165 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_SUB, ECF_CONST, cond_sub, cond_binary)
166 1.8 mrg DEF_INTERNAL_OPTAB_FN (COND_MUL, ECF_CONST, cond_smul, cond_binary)
167 1.8 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (COND_DIV, ECF_CONST, first,
168 1.8 mrg cond_sdiv, cond_udiv, cond_binary)
169 1.8 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MOD, ECF_CONST, first,
170 1.8 mrg cond_smod, cond_umod, cond_binary)
171 1.8 mrg DEF_INTERNAL_OPTAB_FN (COND_RDIV, ECF_CONST, cond_sdiv, cond_binary)
172 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MIN, ECF_CONST, first,
173 1.7 mrg cond_smin, cond_umin, cond_binary)
174 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MAX, ECF_CONST, first,
175 1.7 mrg cond_smax, cond_umax, cond_binary)
176 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_AND, ECF_CONST | ECF_NOTHROW,
177 1.7 mrg cond_and, cond_binary)
178 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_IOR, ECF_CONST | ECF_NOTHROW,
179 1.7 mrg cond_ior, cond_binary)
180 1.7 mrg DEF_INTERNAL_OPTAB_FN (COND_XOR, ECF_CONST | ECF_NOTHROW,
181 1.7 mrg cond_xor, cond_binary)
182 1.9 mrg DEF_INTERNAL_OPTAB_FN (COND_SHL, ECF_CONST | ECF_NOTHROW,
183 1.9 mrg cond_ashl, cond_binary)
184 1.9 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (COND_SHR, ECF_CONST | ECF_NOTHROW, first,
185 1.9 mrg cond_ashr, cond_lshr, cond_binary)
186 1.4 mrg
187 1.8 mrg DEF_INTERNAL_OPTAB_FN (COND_FMA, ECF_CONST, cond_fma, cond_ternary)
188 1.8 mrg DEF_INTERNAL_OPTAB_FN (COND_FMS, ECF_CONST, cond_fms, cond_ternary)
189 1.8 mrg DEF_INTERNAL_OPTAB_FN (COND_FNMA, ECF_CONST, cond_fnma, cond_ternary)
190 1.8 mrg DEF_INTERNAL_OPTAB_FN (COND_FNMS, ECF_CONST, cond_fnms, cond_ternary)
191 1.8 mrg
192 1.4 mrg DEF_INTERNAL_OPTAB_FN (RSQRT, ECF_CONST, rsqrt, unary)
193 1.4 mrg
194 1.7 mrg DEF_INTERNAL_OPTAB_FN (REDUC_PLUS, ECF_CONST | ECF_NOTHROW,
195 1.7 mrg reduc_plus_scal, unary)
196 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MAX, ECF_CONST | ECF_NOTHROW, first,
197 1.7 mrg reduc_smax_scal, reduc_umax_scal, unary)
198 1.7 mrg DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MIN, ECF_CONST | ECF_NOTHROW, first,
199 1.7 mrg reduc_smin_scal, reduc_umin_scal, unary)
200 1.7 mrg DEF_INTERNAL_OPTAB_FN (REDUC_AND, ECF_CONST | ECF_NOTHROW,
201 1.7 mrg reduc_and_scal, unary)
202 1.7 mrg DEF_INTERNAL_OPTAB_FN (REDUC_IOR, ECF_CONST | ECF_NOTHROW,
203 1.7 mrg reduc_ior_scal, unary)
204 1.7 mrg DEF_INTERNAL_OPTAB_FN (REDUC_XOR, ECF_CONST | ECF_NOTHROW,
205 1.7 mrg reduc_xor_scal, unary)
206 1.7 mrg
207 1.7 mrg /* Extract the last active element from a vector. */
208 1.7 mrg DEF_INTERNAL_OPTAB_FN (EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
209 1.8 mrg extract_last, fold_left)
210 1.7 mrg
211 1.7 mrg /* Same, but return the first argument if no elements are active. */
212 1.7 mrg DEF_INTERNAL_OPTAB_FN (FOLD_EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
213 1.7 mrg fold_extract_last, fold_extract)
214 1.7 mrg
215 1.7 mrg DEF_INTERNAL_OPTAB_FN (FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
216 1.7 mrg fold_left_plus, fold_left)
217 1.7 mrg
218 1.9 mrg DEF_INTERNAL_OPTAB_FN (MASK_FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
219 1.9 mrg mask_fold_left_plus, mask_fold_left)
220 1.9 mrg
221 1.4 mrg /* Unary math functions. */
222 1.4 mrg DEF_INTERNAL_FLT_FN (ACOS, ECF_CONST, acos, unary)
223 1.8 mrg DEF_INTERNAL_FLT_FN (ACOSH, ECF_CONST, acosh, unary)
224 1.4 mrg DEF_INTERNAL_FLT_FN (ASIN, ECF_CONST, asin, unary)
225 1.8 mrg DEF_INTERNAL_FLT_FN (ASINH, ECF_CONST, asinh, unary)
226 1.4 mrg DEF_INTERNAL_FLT_FN (ATAN, ECF_CONST, atan, unary)
227 1.8 mrg DEF_INTERNAL_FLT_FN (ATANH, ECF_CONST, atanh, unary)
228 1.4 mrg DEF_INTERNAL_FLT_FN (COS, ECF_CONST, cos, unary)
229 1.8 mrg DEF_INTERNAL_FLT_FN (COSH, ECF_CONST, cosh, unary)
230 1.4 mrg DEF_INTERNAL_FLT_FN (EXP, ECF_CONST, exp, unary)
231 1.4 mrg DEF_INTERNAL_FLT_FN (EXP10, ECF_CONST, exp10, unary)
232 1.4 mrg DEF_INTERNAL_FLT_FN (EXP2, ECF_CONST, exp2, unary)
233 1.4 mrg DEF_INTERNAL_FLT_FN (EXPM1, ECF_CONST, expm1, unary)
234 1.4 mrg DEF_INTERNAL_FLT_FN (LOG, ECF_CONST, log, unary)
235 1.4 mrg DEF_INTERNAL_FLT_FN (LOG10, ECF_CONST, log10, unary)
236 1.4 mrg DEF_INTERNAL_FLT_FN (LOG1P, ECF_CONST, log1p, unary)
237 1.4 mrg DEF_INTERNAL_FLT_FN (LOG2, ECF_CONST, log2, unary)
238 1.4 mrg DEF_INTERNAL_FLT_FN (LOGB, ECF_CONST, logb, unary)
239 1.9 mrg DEF_INTERNAL_FLT_FN (SIGNBIT, ECF_CONST, signbit, unary)
240 1.4 mrg DEF_INTERNAL_FLT_FN (SIGNIFICAND, ECF_CONST, significand, unary)
241 1.4 mrg DEF_INTERNAL_FLT_FN (SIN, ECF_CONST, sin, unary)
242 1.8 mrg DEF_INTERNAL_FLT_FN (SINH, ECF_CONST, sinh, unary)
243 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (SQRT, ECF_CONST, sqrt, unary)
244 1.4 mrg DEF_INTERNAL_FLT_FN (TAN, ECF_CONST, tan, unary)
245 1.8 mrg DEF_INTERNAL_FLT_FN (TANH, ECF_CONST, tanh, unary)
246 1.4 mrg
247 1.4 mrg /* FP rounding. */
248 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (CEIL, ECF_CONST, ceil, unary)
249 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (FLOOR, ECF_CONST, floor, unary)
250 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (NEARBYINT, ECF_CONST, nearbyint, unary)
251 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (RINT, ECF_CONST, rint, unary)
252 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (ROUND, ECF_CONST, round, unary)
253 1.9 mrg DEF_INTERNAL_FLT_FLOATN_FN (ROUNDEVEN, ECF_CONST, roundeven, unary)
254 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (TRUNC, ECF_CONST, btrunc, unary)
255 1.4 mrg
256 1.4 mrg /* Binary math functions. */
257 1.4 mrg DEF_INTERNAL_FLT_FN (ATAN2, ECF_CONST, atan2, binary)
258 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (COPYSIGN, ECF_CONST, copysign, binary)
259 1.4 mrg DEF_INTERNAL_FLT_FN (FMOD, ECF_CONST, fmod, binary)
260 1.8 mrg DEF_INTERNAL_FLT_FN (HYPOT, ECF_CONST, hypot, binary)
261 1.4 mrg DEF_INTERNAL_FLT_FN (POW, ECF_CONST, pow, binary)
262 1.4 mrg DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary)
263 1.4 mrg DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary)
264 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (FMIN, ECF_CONST, fmin, binary)
265 1.7 mrg DEF_INTERNAL_FLT_FLOATN_FN (FMAX, ECF_CONST, fmax, binary)
266 1.7 mrg DEF_INTERNAL_OPTAB_FN (XORSIGN, ECF_CONST, xorsign, binary)
267 1.4 mrg
268 1.4 mrg /* FP scales. */
269 1.4 mrg DEF_INTERNAL_FLT_FN (LDEXP, ECF_CONST, ldexp, binary)
270 1.4 mrg
271 1.8 mrg /* Ternary math functions. */
272 1.8 mrg DEF_INTERNAL_FLT_FLOATN_FN (FMA, ECF_CONST, fma, ternary)
273 1.8 mrg
274 1.4 mrg /* Unary integer ops. */
275 1.7 mrg DEF_INTERNAL_INT_FN (CLRSB, ECF_CONST | ECF_NOTHROW, clrsb, unary)
276 1.7 mrg DEF_INTERNAL_INT_FN (CLZ, ECF_CONST | ECF_NOTHROW, clz, unary)
277 1.7 mrg DEF_INTERNAL_INT_FN (CTZ, ECF_CONST | ECF_NOTHROW, ctz, unary)
278 1.7 mrg DEF_INTERNAL_INT_FN (FFS, ECF_CONST | ECF_NOTHROW, ffs, unary)
279 1.7 mrg DEF_INTERNAL_INT_FN (PARITY, ECF_CONST | ECF_NOTHROW, parity, unary)
280 1.7 mrg DEF_INTERNAL_INT_FN (POPCOUNT, ECF_CONST | ECF_NOTHROW, popcount, unary)
281 1.1 mrg
282 1.6 mrg DEF_INTERNAL_FN (GOMP_USE_SIMT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
283 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_ENTER, ECF_LEAF | ECF_NOTHROW, NULL)
284 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_ENTER_ALLOC, ECF_LEAF | ECF_NOTHROW, NULL)
285 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_EXIT, ECF_LEAF | ECF_NOTHROW, NULL)
286 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
287 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_VF, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
288 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_LAST_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
289 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_ORDERED_PRED, ECF_LEAF | ECF_NOTHROW, NULL)
290 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_VOTE_ANY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
291 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_XCHG_BFLY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
292 1.6 mrg DEF_INTERNAL_FN (GOMP_SIMT_XCHG_IDX, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
293 1.3 mrg DEF_INTERNAL_FN (GOMP_SIMD_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
294 1.3 mrg DEF_INTERNAL_FN (GOMP_SIMD_VF, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
295 1.3 mrg DEF_INTERNAL_FN (GOMP_SIMD_LAST_LANE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
296 1.4 mrg DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_START, ECF_LEAF | ECF_NOTHROW, NULL)
297 1.4 mrg DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_END, ECF_LEAF | ECF_NOTHROW, NULL)
298 1.3 mrg DEF_INTERNAL_FN (LOOP_VECTORIZED, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
299 1.7 mrg DEF_INTERNAL_FN (LOOP_DIST_ALIAS, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
300 1.3 mrg DEF_INTERNAL_FN (ANNOTATE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
301 1.3 mrg DEF_INTERNAL_FN (UBSAN_NULL, ECF_LEAF | ECF_NOTHROW, ".R.")
302 1.3 mrg DEF_INTERNAL_FN (UBSAN_BOUNDS, ECF_LEAF | ECF_NOTHROW, NULL)
303 1.3 mrg DEF_INTERNAL_FN (UBSAN_VPTR, ECF_LEAF | ECF_NOTHROW, ".RR..")
304 1.3 mrg DEF_INTERNAL_FN (UBSAN_CHECK_ADD, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
305 1.3 mrg DEF_INTERNAL_FN (UBSAN_CHECK_SUB, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
306 1.3 mrg DEF_INTERNAL_FN (UBSAN_CHECK_MUL, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
307 1.7 mrg DEF_INTERNAL_FN (UBSAN_PTR, ECF_LEAF | ECF_NOTHROW, ".R.")
308 1.3 mrg DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW, NULL)
309 1.3 mrg DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NULL)
310 1.3 mrg DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
311 1.7 mrg DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW, "..R..")
312 1.7 mrg DEF_INTERNAL_FN (ASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL)
313 1.6 mrg DEF_INTERNAL_FN (ASAN_POISON, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
314 1.6 mrg DEF_INTERNAL_FN (ASAN_POISON_USE, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
315 1.3 mrg DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
316 1.3 mrg DEF_INTERNAL_FN (SUB_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
317 1.3 mrg DEF_INTERNAL_FN (MUL_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
318 1.3 mrg DEF_INTERNAL_FN (TSAN_FUNC_EXIT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
319 1.4 mrg DEF_INTERNAL_FN (VA_ARG, ECF_NOTHROW | ECF_LEAF, NULL)
320 1.8 mrg DEF_INTERNAL_FN (VEC_CONVERT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
321 1.4 mrg
322 1.4 mrg /* An unduplicable, uncombinable function. Generally used to preserve
323 1.4 mrg a CFG property in the face of jump threading, tail merging or
324 1.4 mrg other such optimizations. The first argument distinguishes
325 1.4 mrg between uses. See internal-fn.h for usage. */
326 1.4 mrg DEF_INTERNAL_FN (UNIQUE, ECF_NOTHROW, NULL)
327 1.6 mrg DEF_INTERNAL_FN (PHI, 0, NULL)
328 1.4 mrg
329 1.4 mrg /* DIM_SIZE and DIM_POS return the size of a particular compute
330 1.4 mrg dimension and the executing thread's position within that
331 1.4 mrg dimension. DIM_POS is pure (and not const) so that it isn't
332 1.4 mrg thought to clobber memory and can be gcse'd within a single
333 1.4 mrg parallel region, but not across FORK/JOIN boundaries. They take a
334 1.6 mrg single INTEGER_CST argument. This might be overly conservative. */
335 1.4 mrg DEF_INTERNAL_FN (GOACC_DIM_SIZE, ECF_CONST | ECF_NOTHROW | ECF_LEAF, ".")
336 1.4 mrg DEF_INTERNAL_FN (GOACC_DIM_POS, ECF_PURE | ECF_NOTHROW | ECF_LEAF, ".")
337 1.4 mrg
338 1.4 mrg /* OpenACC looping abstraction. See internal-fn.h for usage. */
339 1.4 mrg DEF_INTERNAL_FN (GOACC_LOOP, ECF_PURE | ECF_NOTHROW, NULL)
340 1.4 mrg
341 1.4 mrg /* OpenACC reduction abstraction. See internal-fn.h for usage. */
342 1.4 mrg DEF_INTERNAL_FN (GOACC_REDUCTION, ECF_NOTHROW | ECF_LEAF, NULL)
343 1.4 mrg
344 1.6 mrg /* Openacc tile abstraction. Describes the spans of the element loop.
345 1.6 mrg GOACC_TILE (num-loops, loop-no, tile-arg, tile-mask, element-mask). */
346 1.6 mrg DEF_INTERNAL_FN (GOACC_TILE, ECF_NOTHROW | ECF_LEAF, NULL)
347 1.6 mrg
348 1.4 mrg /* Set errno to EDOM, if GCC knows how to do that directly for the
349 1.4 mrg current target. */
350 1.4 mrg DEF_INTERNAL_FN (SET_EDOM, ECF_LEAF | ECF_NOTHROW, NULL)
351 1.4 mrg
352 1.6 mrg /* Atomic functions. These don't have ECF_NOTHROW because for
353 1.6 mrg -fnon-call-exceptions they can throw, otherwise we set
354 1.6 mrg gimple_call_nothrow_p on it. */
355 1.6 mrg DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_SET, ECF_LEAF, NULL)
356 1.6 mrg DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_COMPLEMENT, ECF_LEAF, NULL)
357 1.6 mrg DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_RESET, ECF_LEAF, NULL)
358 1.6 mrg DEF_INTERNAL_FN (ATOMIC_COMPARE_EXCHANGE, ECF_LEAF, NULL)
359 1.6 mrg
360 1.6 mrg /* To implement [[fallthrough]]. */
361 1.6 mrg DEF_INTERNAL_FN (FALLTHROUGH, ECF_LEAF | ECF_NOTHROW, NULL)
362 1.6 mrg
363 1.6 mrg /* To implement __builtin_launder. */
364 1.6 mrg DEF_INTERNAL_FN (LAUNDER, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
365 1.6 mrg
366 1.6 mrg /* Divmod function. */
367 1.6 mrg DEF_INTERNAL_FN (DIVMOD, ECF_CONST | ECF_LEAF, NULL)
368 1.6 mrg
369 1.9 mrg /* For coroutines. */
370 1.9 mrg DEF_INTERNAL_FN (CO_ACTOR, ECF_NOTHROW | ECF_LEAF, NULL)
371 1.9 mrg DEF_INTERNAL_FN (CO_YIELD, ECF_NOTHROW, NULL)
372 1.9 mrg DEF_INTERNAL_FN (CO_SUSPN, ECF_NOTHROW, NULL)
373 1.9 mrg DEF_INTERNAL_FN (CO_FRAME, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL)
374 1.9 mrg
375 1.7 mrg /* A NOP function with arbitrary arguments and return value. */
376 1.7 mrg DEF_INTERNAL_FN (NOP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
377 1.7 mrg
378 1.4 mrg #undef DEF_INTERNAL_INT_FN
379 1.4 mrg #undef DEF_INTERNAL_FLT_FN
380 1.7 mrg #undef DEF_INTERNAL_FLT_FLOATN_FN
381 1.7 mrg #undef DEF_INTERNAL_SIGNED_OPTAB_FN
382 1.4 mrg #undef DEF_INTERNAL_OPTAB_FN
383 1.4 mrg #undef DEF_INTERNAL_FN
384