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