Line data Source code
1 : /* Internal functions.
2 : Copyright (C) 2011-2026 Free Software Foundation, Inc.
3 :
4 : This file is part of GCC.
5 :
6 : GCC is free software; you can redistribute it and/or modify it under
7 : the terms of the GNU General Public License as published by the Free
8 : Software Foundation; either version 3, or (at your option) any later
9 : version.
10 :
11 : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 : WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 : FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 : for more details.
15 :
16 : You should have received a copy of the GNU General Public License
17 : along with GCC; see the file COPYING3. If not see
18 : <http://www.gnu.org/licenses/>. */
19 :
20 : /* This file specifies a list of internal "functions". These functions
21 : differ from built-in functions in that they have no linkage and cannot
22 : be called directly by the user. They represent operations that are only
23 : synthesised by GCC itself.
24 :
25 : Internal functions are used instead of tree codes if the operation
26 : and its operands are more naturally represented as a GIMPLE_CALL
27 : than a GIMPLE_ASSIGN.
28 :
29 : Each entry in this file has one of the forms:
30 :
31 : DEF_INTERNAL_FN (NAME, FLAGS, FNSPEC)
32 : DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
33 : DEF_INTERNAL_SIGNED_OPTAB_FN (NAME, FLAGS, SELECTOR, SIGNED_OPTAB,
34 : UNSIGNED_OPTAB, TYPE)
35 : DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE)
36 : DEF_INTERNAL_FLT_FLOATN_FN (NAME, FLAGS, OPTAB, TYPE)
37 : DEF_INTERNAL_INT_FN (NAME, FLAGS, OPTAB, TYPE)
38 : DEF_INTERNAL_INT_EXT_FN (NAME, FLAGS, OPTAB, TYPE)
39 : DEF_INTERNAL_INTSZ_FN (NAME, FLAGS, OPTAB, TYPE)
40 : DEF_INTERNAL_INTSZ_EXT_FN (NAME, FLAGS, OPTAB, TYPE)
41 : DEF_INTERNAL_COND_FN (NAME, FLAGS, OPTAB, TYPE)
42 : DEF_INTERNAL_SIGNED_COND_FN (NAME, FLAGS, OPTAB, TYPE)
43 : DEF_INTERNAL_WIDENING_OPTAB_FN (NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB,
44 : TYPE)
45 :
46 : where NAME is the name of the function, FLAGS is a set of
47 : ECF_* flags and FNSPEC is a string describing functions fnspec.
48 :
49 : DEF_INTERNAL_OPTAB_FN defines an internal function that maps to a
50 : direct optab. The function should only be called with a given
51 : set of types if the associated optab is available for the modes
52 : of those types. OPTAB says what optab to use (without the trailing
53 : "_optab") and TYPE categorizes the optab based on its inputs and
54 : outputs. The possible types of optab are:
55 :
56 : - mask_load: currently just maskload
57 : - load_lanes: currently just vec_load_lanes
58 : - mask_load_lanes: currently just vec_mask_load_lanes
59 : - mask_len_load_lanes: currently just vec_mask_len_load_lanes
60 : - gather_load: used for {mask_,mask_len_,}gather_load
61 : - strided_load: currently just mask_len_strided_load
62 : - len_load: currently just len_load
63 : - mask_len_load: currently just mask_len_load
64 :
65 : - mask_store: currently just maskstore
66 : - store_lanes: currently just vec_store_lanes
67 : - mask_store_lanes: currently just vec_mask_store_lanes
68 : - mask_len_store_lanes: currently just vec_mask_len_store_lanes
69 : - scatter_store: used for {mask_,mask_len_,}scatter_store
70 : - strided_store: currently just mask_len_strided_store
71 : - len_store: currently just len_store
72 : - mask_len_store: currently just mask_len_store
73 :
74 : - unary: a normal unary optab, such as vec_reverse_<mode>
75 : - binary: a normal binary optab, such as vec_interleave_lo_<mode>
76 : - ternary: a normal ternary optab, such as fma<mode>4
77 :
78 : - unary_convert: a single-input conversion optab, such as
79 : lround<srcmode><dstmode>2.
80 :
81 : - cond_binary: a conditional binary optab, such as cond_add<mode>
82 : - cond_unary: a conditional unary optab, such as cond_neg<mode>
83 : - cond_ternary: a conditional ternary optab, such as cond_fma_rev<mode>
84 :
85 : - fold_left: for scalar = FN (scalar, vector), keyed off the vector mode
86 : - check_ptrs: used for check_{raw,war}_ptrs
87 :
88 : - cond_len_unary: a conditional unary optab, such as cond_len_neg<mode>
89 : - cond_len_binary: a conditional binary optab, such as cond_len_add<mode>
90 : - cond_len_ternary: a conditional ternary optab, such as
91 : cond_len_fma_rev<mode>
92 :
93 : DEF_INTERNAL_SIGNED_OPTAB_FN defines an internal function that
94 : maps to one of two optabs, depending on the signedness of an input.
95 : SIGNED_OPTAB and UNSIGNED_OPTAB are the optabs for signed and
96 : unsigned inputs respectively, both without the trailing "_optab".
97 : SELECTOR says which type in the tree_pair determines the signedness.
98 :
99 : DEF_INTERNAL_FLT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition,
100 : the function implements the computational part of a built-in math
101 : function BUILT_IN_<NAME>{F,,L}. Unlike some built-in functions,
102 : these internal functions never set errno.
103 :
104 : DEF_INTERNAL_INT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition
105 : says that the function extends the C-level BUILT_IN_<NAME>{,L,LL,IMAX}
106 : group of functions to any integral mode (including vector modes).
107 :
108 : DEF_INTERNAL_INT_EXT_FN is like DEF_INTERNAL_INT_FN, except that it
109 : has expand_##NAME defined in internal-fn.cc to override the
110 : DEF_INTERNAL_INT_FN expansion behavior.
111 :
112 : DEF_INTERNAL_INTSZ_FN is like DEF_INTERNAL_OPTAB_FN, but in addition
113 : says that the function extends the C-level BUILT_IN_<NAME>{8,16,32,64,128}
114 : group of functions to any integral mode (including vector modes).
115 :
116 : DEF_INTERNAL_INTSZ_EXT_FN is like DEF_INTERNAL_INTSZ_FN, except that it
117 : has expand_##NAME defined in internal-fn.cc to override the
118 : DEF_INTERNAL_INTSZ_FN expansion behavior.
119 :
120 : DEF_INTERNAL_WIDENING_OPTAB_FN is a wrapper that defines five internal
121 : functions with DEF_INTERNAL_SIGNED_OPTAB_FN:
122 : - one that describes a widening operation with the same number of elements
123 : in the output and input vectors,
124 : - two that describe a pair of high-low widening operations where the output
125 : vectors each have half the number of elements of the input vectors,
126 : corresponding to the result of the widening operation on the top half and
127 : bottom half, these have the suffixes _HI and _LO,
128 : - and two that describe a pair of even-odd widening operations where the
129 : output vectors each have half the number of elements of the input vectors,
130 : corresponding to the result of the widening operation on the even and odd
131 : elements, these have the suffixes _EVEN and _ODD.
132 : These five internal functions will require two optabs each, a SIGNED_OPTAB
133 : and an UNSIGNED_OTPAB.
134 :
135 : DEF_INTERNAL_COND_FN is a wrapper that defines 2 internal functions with
136 : DEF_INTERNAL_OPTAB_FN:
137 : - One is COND_* operations that are predicated by mask only. Such operations
138 : make sense for both vectors and scalars.
139 : - The other is COND_LEN_* operations that are predicated by mask and len
140 : both. Such operations only make sense for vectors.
141 :
142 : DEF_INTERNAL_SIGNED_COND_FN is like DEF_INTERNAL_COND_FN but defines internal
143 : functions with DEF_INTERNAL_SIGNED_OPTAB_FN.
144 :
145 : Each entry must have a corresponding expander of the form:
146 :
147 : void expand_NAME (gimple_call stmt)
148 :
149 : where STMT is the statement that performs the call. These are generated
150 : automatically for optab functions and call out to a function or macro
151 : called expand_<TYPE>_optab_fn. */
152 :
153 : #ifndef DEF_INTERNAL_FN
154 : #define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC)
155 : #endif
156 :
157 : #ifndef DEF_INTERNAL_OPTAB_FN
158 : #define DEF_INTERNAL_OPTAB_FN(NAME, FLAGS, OPTAB, TYPE) \
159 : DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
160 : #endif
161 :
162 : #ifndef DEF_INTERNAL_SIGNED_OPTAB_FN
163 : #define DEF_INTERNAL_SIGNED_OPTAB_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, \
164 : UNSIGNED_OPTAB, TYPE) \
165 : DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
166 : #endif
167 :
168 : #ifndef DEF_INTERNAL_FLT_FN
169 : #define DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) \
170 : DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
171 : #endif
172 :
173 : #ifndef DEF_INTERNAL_FLT_FLOATN_FN
174 : #define DEF_INTERNAL_FLT_FLOATN_FN(NAME, FLAGS, OPTAB, TYPE) \
175 : DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE)
176 : #endif
177 :
178 : #ifndef DEF_INTERNAL_INT_FN
179 : #define DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) \
180 : DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
181 : #endif
182 :
183 : #ifndef DEF_INTERNAL_INT_EXT_FN
184 : #define DEF_INTERNAL_INT_EXT_FN(NAME, FLAGS, OPTAB, TYPE) \
185 : DEF_INTERNAL_INT_FN (NAME, FLAGS, OPTAB, TYPE)
186 : #endif
187 :
188 : #ifndef DEF_INTERNAL_INTSZ_FN
189 : #define DEF_INTERNAL_INTSZ_FN(NAME, FLAGS, OPTAB, TYPE) \
190 : DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
191 : #endif
192 :
193 : #ifndef DEF_INTERNAL_INTSZ_EXT_FN
194 : #define DEF_INTERNAL_INTSZ_EXT_FN(NAME, FLAGS, OPTAB, TYPE) \
195 : DEF_INTERNAL_INTSZ_FN (NAME, FLAGS, OPTAB, TYPE)
196 : #endif
197 :
198 : #ifndef DEF_INTERNAL_WIDENING_OPTAB_FN
199 : #define DEF_INTERNAL_WIDENING_OPTAB_FN(NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB, TYPE) \
200 : DEF_INTERNAL_SIGNED_OPTAB_FN (NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB, TYPE) \
201 : DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _LO, FLAGS, SELECTOR, SOPTAB##_lo, UOPTAB##_lo, TYPE) \
202 : DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _HI, FLAGS, SELECTOR, SOPTAB##_hi, UOPTAB##_hi, TYPE) \
203 : DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _EVEN, FLAGS, SELECTOR, SOPTAB##_even, UOPTAB##_even, TYPE) \
204 : DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _ODD, FLAGS, SELECTOR, SOPTAB##_odd, UOPTAB##_odd, TYPE)
205 : #endif
206 :
207 : #ifndef DEF_INTERNAL_COND_FN
208 : #define DEF_INTERNAL_COND_FN(NAME, FLAGS, OPTAB, TYPE) \
209 : DEF_INTERNAL_OPTAB_FN (COND_##NAME, FLAGS, cond_##OPTAB, cond_##TYPE) \
210 : DEF_INTERNAL_OPTAB_FN (COND_LEN_##NAME, FLAGS, cond_len_##OPTAB, \
211 : cond_len_##TYPE)
212 : #endif
213 :
214 : #ifndef DEF_INTERNAL_SIGNED_COND_FN
215 : #define DEF_INTERNAL_SIGNED_COND_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, \
216 : UNSIGNED_OPTAB, TYPE) \
217 : DEF_INTERNAL_SIGNED_OPTAB_FN (COND_##NAME, FLAGS, SELECTOR, \
218 : cond_##SIGNED_OPTAB, cond_##UNSIGNED_OPTAB, \
219 : cond_##TYPE) \
220 : DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_##NAME, FLAGS, SELECTOR, \
221 : cond_len_##SIGNED_OPTAB, \
222 : cond_len_##UNSIGNED_OPTAB, cond_len_##TYPE)
223 : #endif
224 :
225 252 : DEF_INTERNAL_OPTAB_FN (CRC, ECF_CONST | ECF_NOTHROW, crc, crc)
226 271 : DEF_INTERNAL_OPTAB_FN (CRC_REV, ECF_CONST | ECF_NOTHROW, crc_rev, crc)
227 725 : DEF_INTERNAL_OPTAB_FN (MASK_LOAD, ECF_PURE, maskload, mask_load)
228 0 : DEF_INTERNAL_OPTAB_FN (LOAD_LANES, ECF_CONST, vec_load_lanes, load_lanes)
229 0 : DEF_INTERNAL_OPTAB_FN (MASK_LOAD_LANES, ECF_PURE,
230 : vec_mask_load_lanes, mask_load_lanes)
231 0 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_LOAD_LANES, ECF_PURE,
232 : vec_mask_len_load_lanes, mask_load_lanes)
233 :
234 238094 : DEF_INTERNAL_OPTAB_FN (GATHER_LOAD, ECF_PURE, gather_load, gather_load)
235 246036 : DEF_INTERNAL_OPTAB_FN (MASK_GATHER_LOAD, ECF_PURE,
236 : mask_gather_load, gather_load)
237 242620 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_GATHER_LOAD, ECF_PURE,
238 : mask_len_gather_load, gather_load)
239 1074 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_STRIDED_LOAD, ECF_PURE,
240 : mask_len_strided_load, strided_load)
241 :
242 0 : DEF_INTERNAL_OPTAB_FN (LEN_LOAD, ECF_PURE, len_load, len_load)
243 0 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_LOAD, ECF_PURE, mask_len_load, mask_len_load)
244 :
245 80248 : DEF_INTERNAL_OPTAB_FN (SCATTER_STORE, 0, scatter_store, scatter_store)
246 82438 : DEF_INTERNAL_OPTAB_FN (MASK_SCATTER_STORE, 0,
247 : mask_scatter_store, scatter_store)
248 81482 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_SCATTER_STORE, 0,
249 : mask_len_scatter_store, scatter_store)
250 2171 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_STRIDED_STORE, 0,
251 : mask_len_strided_store, strided_store)
252 :
253 762 : DEF_INTERNAL_OPTAB_FN (MASK_STORE, 0, maskstore, mask_store)
254 0 : DEF_INTERNAL_OPTAB_FN (STORE_LANES, ECF_CONST, vec_store_lanes, store_lanes)
255 0 : DEF_INTERNAL_OPTAB_FN (MASK_STORE_LANES, 0,
256 : vec_mask_store_lanes, mask_store_lanes)
257 0 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_STORE_LANES, 0,
258 : vec_mask_len_store_lanes, mask_store_lanes)
259 :
260 8944 : DEF_INTERNAL_OPTAB_FN (VCOND_MASK, ECF_CONST | ECF_NOTHROW,
261 : vcond_mask, vec_cond_mask)
262 1544 : DEF_INTERNAL_OPTAB_FN (VCOND_MASK_LEN, ECF_CONST | ECF_NOTHROW,
263 : vcond_mask_len, cond_len_unary)
264 :
265 123 : DEF_INTERNAL_OPTAB_FN (VEC_SET, ECF_CONST | ECF_NOTHROW, vec_set, vec_set)
266 0 : DEF_INTERNAL_OPTAB_FN (VEC_EXTRACT, ECF_CONST | ECF_NOTHROW,
267 : vec_extract, vec_extract)
268 :
269 0 : DEF_INTERNAL_OPTAB_FN (LEN_STORE, 0, len_store, len_store)
270 0 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_STORE, 0, mask_len_store, mask_len_store)
271 :
272 109782 : DEF_INTERNAL_OPTAB_FN (WHILE_ULT, ECF_CONST | ECF_NOTHROW, while_ult, while)
273 0 : DEF_INTERNAL_OPTAB_FN (SELECT_VL, ECF_CONST | ECF_NOTHROW, select_vl, select_vl)
274 72 : DEF_INTERNAL_OPTAB_FN (CHECK_RAW_PTRS, ECF_CONST | ECF_NOTHROW,
275 : check_raw_ptrs, check_ptrs)
276 5154 : DEF_INTERNAL_OPTAB_FN (CHECK_WAR_PTRS, ECF_CONST | ECF_NOTHROW,
277 : check_war_ptrs, check_ptrs)
278 :
279 0 : DEF_INTERNAL_OPTAB_FN (VEC_SHL_INSERT, ECF_CONST | ECF_NOTHROW,
280 : vec_shl_insert, binary)
281 :
282 79969 : DEF_INTERNAL_OPTAB_FN (DIV_POW2, ECF_CONST | ECF_NOTHROW, sdiv_pow2, binary)
283 :
284 6905 : DEF_INTERNAL_OPTAB_FN (FMS, ECF_CONST, fms, ternary)
285 6276 : DEF_INTERNAL_OPTAB_FN (FNMA, ECF_CONST, fnma, ternary)
286 1822 : DEF_INTERNAL_OPTAB_FN (FNMS, ECF_CONST, fnms, ternary)
287 :
288 1872 : DEF_INTERNAL_SIGNED_OPTAB_FN (ABD, ECF_CONST | ECF_NOTHROW, first,
289 : sabd, uabd, binary)
290 :
291 5594 : DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_FLOOR, ECF_CONST | ECF_NOTHROW, first,
292 : savg_floor, uavg_floor, binary)
293 532 : DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_CEIL, ECF_CONST | ECF_NOTHROW, first,
294 : savg_ceil, uavg_ceil, binary)
295 :
296 1178 : DEF_INTERNAL_SIGNED_OPTAB_FN (MULH, ECF_CONST | ECF_NOTHROW, first,
297 : smul_highpart, umul_highpart, binary)
298 34 : DEF_INTERNAL_SIGNED_OPTAB_FN (MULHS, ECF_CONST | ECF_NOTHROW, first,
299 : smulhs, umulhs, binary)
300 126 : DEF_INTERNAL_SIGNED_OPTAB_FN (MULHRS, ECF_CONST | ECF_NOTHROW, first,
301 : smulhrs, umulhrs, binary)
302 :
303 276 : DEF_INTERNAL_SIGNED_OPTAB_FN (SAT_ADD, ECF_CONST, first, ssadd, usadd, binary)
304 762 : DEF_INTERNAL_SIGNED_OPTAB_FN (SAT_SUB, ECF_CONST, first, sssub, ussub, binary)
305 0 : DEF_INTERNAL_SIGNED_OPTAB_FN (SAT_MUL, ECF_CONST, first, ssmul, usmul, binary)
306 :
307 555 : DEF_INTERNAL_SIGNED_OPTAB_FN (SAT_TRUNC, ECF_CONST, first, sstrunc, ustrunc, unary_convert)
308 :
309 16 : DEF_INTERNAL_COND_FN (SQRT, ECF_CONST, sqrt, unary)
310 68 : DEF_INTERNAL_COND_FN (CEIL, ECF_CONST, ceil, unary)
311 74 : DEF_INTERNAL_COND_FN (FLOOR, ECF_CONST, floor, unary)
312 32 : DEF_INTERNAL_COND_FN (ROUND, ECF_CONST, round, unary)
313 74 : DEF_INTERNAL_COND_FN (RINT, ECF_CONST, rint, unary)
314 59410 : DEF_INTERNAL_COND_FN (ADD, ECF_CONST, add, binary)
315 4547 : DEF_INTERNAL_COND_FN (SUB, ECF_CONST, sub, binary)
316 19893 : DEF_INTERNAL_COND_FN (MUL, ECF_CONST, smul, binary)
317 291 : DEF_INTERNAL_SIGNED_COND_FN (DIV, ECF_CONST, first, sdiv, udiv, binary)
318 327 : DEF_INTERNAL_SIGNED_COND_FN (MOD, ECF_CONST, first, smod, umod, binary)
319 939 : DEF_INTERNAL_COND_FN (RDIV, ECF_CONST, sdiv, binary)
320 673 : DEF_INTERNAL_SIGNED_COND_FN (MIN, ECF_CONST, first, smin, umin, binary)
321 718 : DEF_INTERNAL_SIGNED_COND_FN (MAX, ECF_CONST, first, smax, umax, binary)
322 0 : DEF_INTERNAL_COND_FN (COPYSIGN, ECF_CONST, copysign, binary)
323 5 : DEF_INTERNAL_COND_FN (FMIN, ECF_CONST, fmin, binary)
324 5 : DEF_INTERNAL_COND_FN (FMAX, ECF_CONST, fmax, binary)
325 1995 : DEF_INTERNAL_COND_FN (AND, ECF_CONST | ECF_NOTHROW, and, binary)
326 6308 : DEF_INTERNAL_COND_FN (IOR, ECF_CONST | ECF_NOTHROW, ior, binary)
327 941 : DEF_INTERNAL_COND_FN (XOR, ECF_CONST | ECF_NOTHROW, xor, binary)
328 634 : DEF_INTERNAL_COND_FN (SHL, ECF_CONST | ECF_NOTHROW, ashl, binary)
329 865 : DEF_INTERNAL_SIGNED_COND_FN (SHR, ECF_CONST | ECF_NOTHROW, first, ashr, lshr,
330 : binary)
331 :
332 1602 : DEF_INTERNAL_COND_FN (FMA, ECF_CONST, fma, ternary)
333 136 : DEF_INTERNAL_COND_FN (FMS, ECF_CONST, fms, ternary)
334 112 : DEF_INTERNAL_COND_FN (FNMA, ECF_CONST, fnma, ternary)
335 108 : DEF_INTERNAL_COND_FN (FNMS, ECF_CONST, fnms, ternary)
336 :
337 830 : DEF_INTERNAL_COND_FN (NEG, ECF_CONST, neg, unary)
338 214 : DEF_INTERNAL_COND_FN (NOT, ECF_CONST, one_cmpl, unary)
339 :
340 148 : DEF_INTERNAL_OPTAB_FN (RSQRT, ECF_CONST, rsqrt, unary)
341 :
342 94970 : DEF_INTERNAL_OPTAB_FN (REDUC_PLUS, ECF_CONST | ECF_NOTHROW,
343 : reduc_plus_scal, unary)
344 3602 : DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MAX, ECF_CONST | ECF_NOTHROW, first,
345 : reduc_smax_scal, reduc_umax_scal, unary)
346 5224 : DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MIN, ECF_CONST | ECF_NOTHROW, first,
347 : reduc_smin_scal, reduc_umin_scal, unary)
348 34 : DEF_INTERNAL_OPTAB_FN (REDUC_FMAX, ECF_CONST | ECF_NOTHROW,
349 : reduc_fmax_scal, unary)
350 24 : DEF_INTERNAL_OPTAB_FN (REDUC_FMIN, ECF_CONST | ECF_NOTHROW,
351 : reduc_fmin_scal, unary)
352 11553 : DEF_INTERNAL_OPTAB_FN (REDUC_AND, ECF_CONST | ECF_NOTHROW,
353 : reduc_and_scal, unary)
354 45091 : DEF_INTERNAL_OPTAB_FN (REDUC_IOR, ECF_CONST | ECF_NOTHROW,
355 : reduc_ior_scal, unary)
356 1737 : DEF_INTERNAL_OPTAB_FN (REDUC_XOR, ECF_CONST | ECF_NOTHROW,
357 : reduc_xor_scal, unary)
358 138 : DEF_INTERNAL_OPTAB_FN (REDUC_SBOOL_AND, ECF_CONST | ECF_NOTHROW,
359 : reduc_sbool_and_scal, reduc_sbool)
360 879 : DEF_INTERNAL_OPTAB_FN (REDUC_SBOOL_IOR, ECF_CONST | ECF_NOTHROW,
361 : reduc_sbool_ior_scal, reduc_sbool)
362 173 : DEF_INTERNAL_OPTAB_FN (REDUC_SBOOL_XOR, ECF_CONST | ECF_NOTHROW,
363 : reduc_sbool_xor_scal, reduc_sbool)
364 :
365 :
366 : /* Extract the last active element from a vector. */
367 11748 : DEF_INTERNAL_OPTAB_FN (EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
368 : extract_last, fold_left)
369 :
370 : /* Same, but return the first argument if no elements are active. */
371 795 : DEF_INTERNAL_OPTAB_FN (FOLD_EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
372 : fold_extract_last, fold_extract)
373 :
374 795 : DEF_INTERNAL_OPTAB_FN (LEN_FOLD_EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
375 : len_fold_extract_last, fold_len_extract)
376 :
377 4411 : DEF_INTERNAL_OPTAB_FN (FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
378 : fold_left_plus, fold_left)
379 :
380 0 : DEF_INTERNAL_OPTAB_FN (MASK_FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
381 : mask_fold_left_plus, mask_fold_left)
382 :
383 0 : DEF_INTERNAL_OPTAB_FN (MASK_LEN_FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
384 : mask_len_fold_left_plus, mask_len_fold_left)
385 :
386 : /* Unary math functions. */
387 178 : DEF_INTERNAL_FLT_FN (ACOS, ECF_CONST, acos, unary)
388 834 : DEF_INTERNAL_FLT_FN (ACOSH, ECF_CONST, acosh, unary)
389 1812 : DEF_INTERNAL_FLT_FN (ASIN, ECF_CONST, asin, unary)
390 485 : DEF_INTERNAL_FLT_FN (ASINH, ECF_CONST, asinh, unary)
391 1423 : DEF_INTERNAL_FLT_FN (ATAN, ECF_CONST, atan, unary)
392 1109 : DEF_INTERNAL_FLT_FN (ATANH, ECF_CONST, atanh, unary)
393 5481 : DEF_INTERNAL_FLT_FN (COS, ECF_CONST, cos, unary)
394 2749 : DEF_INTERNAL_FLT_FN (COSH, ECF_CONST, cosh, unary)
395 12276 : DEF_INTERNAL_FLT_FN (EXP, ECF_CONST, exp, unary)
396 22 : DEF_INTERNAL_FLT_FN (EXP10, ECF_CONST, exp10, unary)
397 2642 : DEF_INTERNAL_FLT_FN (EXP2, ECF_CONST, exp2, unary)
398 679 : DEF_INTERNAL_FLT_FN (EXPM1, ECF_CONST, expm1, unary)
399 12360 : DEF_INTERNAL_FLT_FN (LOG, ECF_CONST, log, unary)
400 2339 : DEF_INTERNAL_FLT_FN (LOG10, ECF_CONST, log10, unary)
401 1301 : DEF_INTERNAL_FLT_FN (LOG1P, ECF_CONST, log1p, unary)
402 1663 : DEF_INTERNAL_FLT_FN (LOG2, ECF_CONST, log2, unary)
403 818 : DEF_INTERNAL_FLT_FN (LOGB, ECF_CONST, logb, unary)
404 20426 : DEF_INTERNAL_FLT_FN (SIGNBIT, ECF_CONST, signbit, unary)
405 216 : DEF_INTERNAL_FLT_FN (SIGNIFICAND, ECF_CONST, significand, unary)
406 9526 : DEF_INTERNAL_FLT_FN (SIN, ECF_CONST, sin, unary)
407 2551 : DEF_INTERNAL_FLT_FN (SINH, ECF_CONST, sinh, unary)
408 7413 : DEF_INTERNAL_FLT_FLOATN_FN (SQRT, ECF_CONST, sqrt, unary)
409 2008 : DEF_INTERNAL_FLT_FN (TAN, ECF_CONST, tan, unary)
410 576 : DEF_INTERNAL_FLT_FN (TANH, ECF_CONST, tanh, unary)
411 :
412 : /* Floating-point to integer conversions.
413 :
414 : ??? Here we preserve the I/L/LL prefix convention from the
415 : corresponding built-in functions, rather than make the internal
416 : functions polymorphic in both the argument and the return types.
417 : Perhaps an alternative would be to pass a zero of the required
418 : return type as a second parameter. */
419 216 : DEF_INTERNAL_FLT_FN (ICEIL, ECF_CONST, lceil, unary_convert)
420 219 : DEF_INTERNAL_FLT_FN (IFLOOR, ECF_CONST, lfloor, unary_convert)
421 272 : DEF_INTERNAL_FLT_FN (IRINT, ECF_CONST, lrint, unary_convert)
422 3506 : DEF_INTERNAL_FLT_FN (IROUND, ECF_CONST, lround, unary_convert)
423 2343 : DEF_INTERNAL_FLT_FN (LCEIL, ECF_CONST, lceil, unary_convert)
424 2283 : DEF_INTERNAL_FLT_FN (LFLOOR, ECF_CONST, lfloor, unary_convert)
425 432 : DEF_INTERNAL_FLT_FLOATN_FN (LRINT, ECF_CONST, lrint, unary_convert)
426 168 : DEF_INTERNAL_FLT_FLOATN_FN (LROUND, ECF_CONST, lround, unary_convert)
427 396 : DEF_INTERNAL_FLT_FN (LLCEIL, ECF_CONST, lceil, unary_convert)
428 396 : DEF_INTERNAL_FLT_FN (LLFLOOR, ECF_CONST, lfloor, unary_convert)
429 32 : DEF_INTERNAL_FLT_FLOATN_FN (LLRINT, ECF_CONST, lrint, unary_convert)
430 32 : DEF_INTERNAL_FLT_FLOATN_FN (LLROUND, ECF_CONST, lround, unary_convert)
431 :
432 : /* FP rounding. */
433 1118 : DEF_INTERNAL_FLT_FLOATN_FN (CEIL, ECF_CONST, ceil, unary)
434 918 : DEF_INTERNAL_FLT_FLOATN_FN (FLOOR, ECF_CONST, floor, unary)
435 316 : DEF_INTERNAL_FLT_FLOATN_FN (NEARBYINT, ECF_CONST, nearbyint, unary)
436 556 : DEF_INTERNAL_FLT_FLOATN_FN (RINT, ECF_CONST, rint, unary)
437 393 : DEF_INTERNAL_FLT_FLOATN_FN (ROUND, ECF_CONST, round, unary)
438 25 : DEF_INTERNAL_FLT_FLOATN_FN (ROUNDEVEN, ECF_CONST, roundeven, unary)
439 1702 : DEF_INTERNAL_FLT_FLOATN_FN (TRUNC, ECF_CONST, btrunc, unary)
440 :
441 : /* Binary math functions. */
442 7564 : DEF_INTERNAL_FLT_FN (ATAN2, ECF_CONST, atan2, binary)
443 67297 : DEF_INTERNAL_FLT_FLOATN_FN (COPYSIGN, ECF_CONST, copysign, binary)
444 5895 : DEF_INTERNAL_FLT_FN (FMOD, ECF_CONST, fmod, binary)
445 1425 : DEF_INTERNAL_FLT_FN (HYPOT, ECF_CONST, hypot, binary)
446 23504 : DEF_INTERNAL_FLT_FN (POW, ECF_CONST, pow, binary)
447 261 : DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary)
448 399 : DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary)
449 241 : DEF_INTERNAL_FLT_FLOATN_FN (FMIN, ECF_CONST, fmin, binary)
450 309 : DEF_INTERNAL_FLT_FLOATN_FN (FMAX, ECF_CONST, fmax, binary)
451 43 : DEF_INTERNAL_OPTAB_FN (XORSIGN, ECF_CONST, xorsign, binary)
452 259 : DEF_INTERNAL_OPTAB_FN (COMPLEX_ADD_ROT90, ECF_CONST, cadd90, binary)
453 89 : DEF_INTERNAL_OPTAB_FN (COMPLEX_ADD_ROT270, ECF_CONST, cadd270, binary)
454 124 : DEF_INTERNAL_OPTAB_FN (COMPLEX_MUL, ECF_CONST, cmul, binary)
455 22 : DEF_INTERNAL_OPTAB_FN (COMPLEX_MUL_CONJ, ECF_CONST, cmul_conj, binary)
456 5528 : DEF_INTERNAL_OPTAB_FN (VEC_ADDSUB, ECF_CONST, vec_addsub, binary)
457 62879 : DEF_INTERNAL_OPTAB_FN (VEC_TRUNC_ADD_HIGH, ECF_CONST | ECF_NOTHROW,
458 : vec_trunc_add_high, binary)
459 269340 : DEF_INTERNAL_WIDENING_OPTAB_FN (VEC_WIDEN_PLUS,
460 : ECF_CONST | ECF_NOTHROW,
461 : first,
462 : vec_widen_sadd, vec_widen_uadd,
463 : binary)
464 48744 : DEF_INTERNAL_WIDENING_OPTAB_FN (VEC_WIDEN_MINUS,
465 : ECF_CONST | ECF_NOTHROW,
466 : first,
467 : vec_widen_ssub, vec_widen_usub,
468 : binary)
469 9030 : DEF_INTERNAL_WIDENING_OPTAB_FN (VEC_WIDEN_ABD,
470 : ECF_CONST | ECF_NOTHROW,
471 : first,
472 : vec_widen_sabd, vec_widen_uabd,
473 : binary)
474 943 : DEF_INTERNAL_OPTAB_FN (VEC_FMADDSUB, ECF_CONST, vec_fmaddsub, ternary)
475 611 : DEF_INTERNAL_OPTAB_FN (VEC_FMSUBADD, ECF_CONST, vec_fmsubadd, ternary)
476 :
477 : /* FP scales. */
478 907 : DEF_INTERNAL_FLT_FLOATN_FN (LDEXP, ECF_CONST, ldexp, binary)
479 :
480 : /* Ternary math functions. */
481 3382210 : DEF_INTERNAL_FLT_FLOATN_FN (FMA, ECF_CONST, fma, ternary)
482 22 : DEF_INTERNAL_OPTAB_FN (COMPLEX_FMA, ECF_CONST, cmla, ternary)
483 22 : DEF_INTERNAL_OPTAB_FN (COMPLEX_FMA_CONJ, ECF_CONST, cmla_conj, ternary)
484 0 : DEF_INTERNAL_OPTAB_FN (COMPLEX_FMS, ECF_CONST, cmls, ternary)
485 0 : DEF_INTERNAL_OPTAB_FN (COMPLEX_FMS_CONJ, ECF_CONST, cmls_conj, ternary)
486 :
487 : /* Unary integer ops. */
488 807 : DEF_INTERNAL_INT_EXT_FN (CLRSB, ECF_CONST | ECF_NOTHROW, clrsb, unary)
489 162509 : DEF_INTERNAL_INT_EXT_FN (CLZ, ECF_CONST | ECF_NOTHROW, clz, unary)
490 76880 : DEF_INTERNAL_INT_EXT_FN (CTZ, ECF_CONST | ECF_NOTHROW, ctz, unary)
491 10350 : DEF_INTERNAL_INT_EXT_FN (FFS, ECF_CONST | ECF_NOTHROW, ffs, unary)
492 1980 : DEF_INTERNAL_INT_EXT_FN (PARITY, ECF_CONST | ECF_NOTHROW, parity, unary)
493 12135 : DEF_INTERNAL_INT_EXT_FN (POPCOUNT, ECF_CONST | ECF_NOTHROW, popcount, unary)
494 0 : DEF_INTERNAL_INTSZ_EXT_FN (BSWAP, ECF_CONST | ECF_NOTHROW, bswap, unary)
495 0 : DEF_INTERNAL_INTSZ_EXT_FN (BITREVERSE, ECF_CONST | ECF_NOTHROW, bitreverse,
496 : unary)
497 :
498 298462 : DEF_INTERNAL_FN (GOMP_TARGET_REV, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
499 298462 : DEF_INTERNAL_FN (GOMP_USE_SIMT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
500 298462 : DEF_INTERNAL_FN (GOMP_SIMT_ENTER, ECF_LEAF | ECF_NOTHROW, NULL)
501 298462 : DEF_INTERNAL_FN (GOMP_SIMT_ENTER_ALLOC, ECF_LEAF | ECF_NOTHROW, NULL)
502 298462 : DEF_INTERNAL_FN (GOMP_SIMT_EXIT, ECF_LEAF | ECF_NOTHROW, NULL)
503 298462 : DEF_INTERNAL_FN (GOMP_SIMT_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
504 298462 : DEF_INTERNAL_FN (GOMP_SIMT_VF, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
505 298462 : DEF_INTERNAL_FN (GOMP_MAX_VF, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
506 298462 : DEF_INTERNAL_FN (GOMP_SIMT_LAST_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
507 298462 : DEF_INTERNAL_FN (GOMP_SIMT_ORDERED_PRED, ECF_LEAF | ECF_NOTHROW, NULL)
508 298462 : DEF_INTERNAL_FN (GOMP_SIMT_VOTE_ANY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
509 298462 : DEF_INTERNAL_FN (GOMP_SIMT_XCHG_BFLY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
510 298462 : DEF_INTERNAL_FN (GOMP_SIMT_XCHG_IDX, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
511 298462 : DEF_INTERNAL_FN (GOMP_SIMD_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
512 298462 : DEF_INTERNAL_FN (GOMP_SIMD_VF, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
513 298462 : DEF_INTERNAL_FN (GOMP_SIMD_LAST_LANE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
514 298462 : DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_START, ECF_LEAF | ECF_NOTHROW, NULL)
515 298462 : DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_END, ECF_LEAF | ECF_NOTHROW, NULL)
516 298462 : DEF_INTERNAL_FN (GOMP_DISPATCH, ECF_LEAF | ECF_NOTHROW, NULL)
517 298462 : DEF_INTERNAL_FN (LOOP_VECTORIZED, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
518 298462 : DEF_INTERNAL_FN (LOOP_DIST_ALIAS, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
519 298462 : DEF_INTERNAL_FN (ANNOTATE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
520 298462 : DEF_INTERNAL_FN (UBSAN_NULL, ECF_LEAF | ECF_NOTHROW, ". R . ")
521 298462 : DEF_INTERNAL_FN (UBSAN_BOUNDS, ECF_LEAF | ECF_NOTHROW, NULL)
522 298462 : DEF_INTERNAL_FN (UBSAN_VPTR, ECF_LEAF | ECF_NOTHROW, ". R R . . ")
523 298462 : DEF_INTERNAL_FN (UBSAN_CHECK_ADD, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
524 298462 : DEF_INTERNAL_FN (UBSAN_CHECK_SUB, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
525 298462 : DEF_INTERNAL_FN (UBSAN_CHECK_MUL, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
526 298462 : DEF_INTERNAL_FN (UBSAN_PTR, ECF_LEAF | ECF_NOTHROW, ". R . ")
527 298462 : DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW, NULL)
528 298462 : DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NULL)
529 298462 : DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
530 298462 : DEF_INTERNAL_FN (HWASAN_ALLOCA_POISON, ECF_LEAF | ECF_NOTHROW, NULL)
531 298462 : DEF_INTERNAL_FN (HWASAN_ALLOCA_UNPOISON, ECF_LEAF | ECF_NOTHROW, ". R ")
532 298462 : DEF_INTERNAL_FN (HWASAN_CHOOSE_TAG, ECF_LEAF | ECF_NOTHROW, ". ")
533 298462 : DEF_INTERNAL_FN (HWASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW,
534 : ". . R . . ")
535 298462 : DEF_INTERNAL_FN (HWASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL)
536 298462 : DEF_INTERNAL_FN (HWASAN_SET_TAG,
537 : ECF_TM_PURE | ECF_PURE | ECF_LEAF | ECF_NOTHROW, ". R R ")
538 298462 : DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW,
539 : ". . R . . ")
540 298462 : DEF_INTERNAL_FN (ASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL)
541 298462 : DEF_INTERNAL_FN (ASAN_POISON, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
542 298462 : DEF_INTERNAL_FN (ASAN_POISON_USE, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
543 298462 : DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
544 298462 : DEF_INTERNAL_FN (SUB_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
545 298462 : DEF_INTERNAL_FN (MUL_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
546 298462 : DEF_INTERNAL_FN (UADDC, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
547 298462 : DEF_INTERNAL_FN (USUBC, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
548 298462 : DEF_INTERNAL_FN (TSAN_FUNC_EXIT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
549 298462 : DEF_INTERNAL_FN (VA_ARG, ECF_NOTHROW | ECF_LEAF, NULL)
550 298462 : DEF_INTERNAL_FN (VEC_CONVERT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
551 298462 : DEF_INTERNAL_FN (RAWMEMCHR, ECF_PURE | ECF_LEAF | ECF_NOTHROW, NULL)
552 :
553 : /* An unduplicable, uncombinable function. Generally used to preserve
554 : a CFG property in the face of jump threading, tail merging or
555 : other such optimizations. The first argument distinguishes
556 : between uses. See internal-fn.h for usage. */
557 298462 : DEF_INTERNAL_FN (UNIQUE, ECF_NOTHROW, NULL)
558 298462 : DEF_INTERNAL_FN (PHI, 0, NULL)
559 :
560 : /* A function to represent an artificial initialization to an uninitialized
561 : automatic variable. */
562 298462 : DEF_INTERNAL_FN (DEFERRED_INIT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
563 :
564 : /* A function to associate the access size and access mode information
565 : with the corresponding reference to an object. It only reads from the
566 : 2nd and the 4th arguments. */
567 298462 : DEF_INTERNAL_FN (ACCESS_WITH_SIZE, ECF_PURE | ECF_LEAF | ECF_NOTHROW, NULL)
568 :
569 : /* DIM_SIZE and DIM_POS return the size of a particular compute
570 : dimension and the executing thread's position within that
571 : dimension. DIM_POS is pure (and not const) so that it isn't
572 : thought to clobber memory and can be gcse'd within a single
573 : parallel region, but not across FORK/JOIN boundaries. They take a
574 : single INTEGER_CST argument. This might be overly conservative. */
575 298462 : DEF_INTERNAL_FN (GOACC_DIM_SIZE, ECF_CONST | ECF_NOTHROW | ECF_LEAF, NULL)
576 298462 : DEF_INTERNAL_FN (GOACC_DIM_POS, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL)
577 :
578 : /* OpenACC looping abstraction. See internal-fn.h for usage. */
579 298462 : DEF_INTERNAL_FN (GOACC_LOOP, ECF_PURE | ECF_NOTHROW, NULL)
580 :
581 : /* OpenACC reduction abstraction. See internal-fn.h for usage. */
582 298462 : DEF_INTERNAL_FN (GOACC_REDUCTION, ECF_NOTHROW | ECF_LEAF, NULL)
583 :
584 : /* Openacc tile abstraction. Describes the spans of the element loop.
585 : GOACC_TILE (num-loops, loop-no, tile-arg, tile-mask, element-mask). */
586 298462 : DEF_INTERNAL_FN (GOACC_TILE, ECF_NOTHROW | ECF_LEAF, NULL)
587 :
588 : /* Set errno to EDOM, if GCC knows how to do that directly for the
589 : current target. */
590 298462 : DEF_INTERNAL_FN (SET_EDOM, ECF_LEAF | ECF_NOTHROW, NULL)
591 :
592 : /* Atomic functions. These don't have ECF_NOTHROW because for
593 : -fnon-call-exceptions they can throw, otherwise we set
594 : gimple_call_nothrow_p on it. */
595 298462 : DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_SET, ECF_LEAF, NULL)
596 298462 : DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_COMPLEMENT, ECF_LEAF, NULL)
597 298462 : DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_RESET, ECF_LEAF, NULL)
598 298462 : DEF_INTERNAL_FN (ATOMIC_COMPARE_EXCHANGE, ECF_LEAF, NULL)
599 298462 : DEF_INTERNAL_FN (ATOMIC_ADD_FETCH_CMP_0, ECF_LEAF, NULL)
600 298462 : DEF_INTERNAL_FN (ATOMIC_SUB_FETCH_CMP_0, ECF_LEAF, NULL)
601 298462 : DEF_INTERNAL_FN (ATOMIC_AND_FETCH_CMP_0, ECF_LEAF, NULL)
602 298462 : DEF_INTERNAL_FN (ATOMIC_OR_FETCH_CMP_0, ECF_LEAF, NULL)
603 298462 : DEF_INTERNAL_FN (ATOMIC_XOR_FETCH_CMP_0, ECF_LEAF, NULL)
604 :
605 : /* To implement [[fallthrough]]. If the TREE_NOTHROW or GF_CALL_NOTHROW flag
606 : is set on the call (normally redundant with ECF_NOTHROW), it marks
607 : [[fallthrough]] at the end of C++ loop body. */
608 298462 : DEF_INTERNAL_FN (FALLTHROUGH, ECF_LEAF | ECF_NOTHROW, NULL)
609 :
610 : /* To implement __builtin_launder. */
611 298462 : DEF_INTERNAL_FN (LAUNDER, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
612 :
613 : /* Divmod function. */
614 298462 : DEF_INTERNAL_FN (DIVMOD, ECF_CONST | ECF_LEAF, NULL)
615 :
616 : /* For coroutines. */
617 298462 : DEF_INTERNAL_FN (CO_ACTOR, ECF_NOTHROW | ECF_LEAF, NULL)
618 298462 : DEF_INTERNAL_FN (CO_YIELD, ECF_NOTHROW | ECF_LEAF, NULL)
619 298462 : DEF_INTERNAL_FN (CO_SUSPN, ECF_NOTHROW, NULL)
620 298462 : DEF_INTERNAL_FN (CO_FRAME, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL)
621 :
622 : /* A NOP function with arbitrary arguments and return value. */
623 298462 : DEF_INTERNAL_FN (NOP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
624 :
625 : /* A GIMPLE value with no definition and not Virtual Opeands for temporary
626 : assignment cases within a pass. */
627 298462 : DEF_INTERNAL_FN (VARYING , ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
628 :
629 : /* Temporary vehicle for __builtin_shufflevector. */
630 298462 : DEF_INTERNAL_FN (SHUFFLEVECTOR, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
631 :
632 : /* <=> optimization. */
633 298462 : DEF_INTERNAL_FN (SPACESHIP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
634 :
635 : /* [[assume (cond)]]. */
636 298462 : DEF_INTERNAL_FN (ASSUME, ECF_CONST | ECF_LEAF | ECF_NOTHROW
637 : | ECF_LOOPING_CONST_OR_PURE, NULL)
638 :
639 : /* For if-conversion of inbranch SIMD clones. */
640 298462 : DEF_INTERNAL_FN (MASK_CALL, ECF_NOVOPS, NULL)
641 :
642 : /* _BitInt support. */
643 298462 : DEF_INTERNAL_FN (MULBITINT, ECF_LEAF | ECF_NOTHROW, ". O . R . R . ")
644 298462 : DEF_INTERNAL_FN (DIVMODBITINT, ECF_LEAF, ". O . O . R . R . ")
645 298462 : DEF_INTERNAL_FN (FLOATTOBITINT, ECF_LEAF | ECF_NOTHROW, ". O . . ")
646 298462 : DEF_INTERNAL_FN (BITINTTOFLOAT, ECF_PURE | ECF_LEAF, ". R . ")
647 :
648 : /* Bitwise functions. */
649 563 : DEF_INTERNAL_OPTAB_FN (BIT_ANDN, ECF_CONST, andn, binary)
650 29 : DEF_INTERNAL_OPTAB_FN (BIT_IORN, ECF_CONST, iorn, binary)
651 :
652 : #undef DEF_INTERNAL_WIDENING_OPTAB_FN
653 : #undef DEF_INTERNAL_SIGNED_COND_FN
654 : #undef DEF_INTERNAL_COND_FN
655 : #undef DEF_INTERNAL_INT_EXT_FN
656 : #undef DEF_INTERNAL_INT_FN
657 : #undef DEF_INTERNAL_INTSZ_EXT_FN
658 : #undef DEF_INTERNAL_INTSZ_FN
659 : #undef DEF_INTERNAL_FLT_FN
660 : #undef DEF_INTERNAL_FLT_FLOATN_FN
661 : #undef DEF_INTERNAL_SIGNED_OPTAB_FN
662 : #undef DEF_INTERNAL_OPTAB_FN
663 : #undef DEF_INTERNAL_FN
|