]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/internal-fn.def
VECT: Add COND_LEN_* operations for loop control with length targets
[thirdparty/gcc.git] / gcc / internal-fn.def
CommitLineData
25583c4f 1/* Internal functions.
aeee4812 2 Copyright (C) 2011-2023 Free Software Foundation, Inc.
25583c4f
RS
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 3, or (at your option) any later
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License
17along 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
ab23f5d9 29 Each entry in this file has one of the forms:
25583c4f 30
b78475cf 31 DEF_INTERNAL_FN (NAME, FLAGS, FNSPEC)
ab23f5d9 32 DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
16d24520
RS
33 DEF_INTERNAL_SIGNED_OPTAB_FN (NAME, FLAGS, SELECTOR, SIGNED_OPTAB,
34 UNSIGNED_OPTAB, TYPE)
686ee971 35 DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE)
4959a752 36 DEF_INTERNAL_INT_FN (NAME, FLAGS, OPTAB, TYPE)
25583c4f 37
b78475cf
YG
38 where NAME is the name of the function, FLAGS is a set of
39 ECF_* flags and FNSPEC is a string describing functions fnspec.
40
ab23f5d9
RS
41 DEF_INTERNAL_OPTAB_FN defines an internal function that maps to a
42 direct optab. The function should only be called with a given
43 set of types if the associated optab is available for the modes
44 of those types. OPTAB says what optab to use (without the trailing
45 "_optab") and TYPE categorizes the optab based on its inputs and
46 outputs. The possible types of optab are:
47
48 - mask_load: currently just maskload
49 - load_lanes: currently just vec_load_lanes
7e11fc7f 50 - mask_load_lanes: currently just vec_mask_load_lanes
db3efdaf 51 - gather_load: used for {mask_,len_mask,}gather_load
d496134a 52 - len_load: currently just len_load
ccfdda34 53 - len_maskload: currently just len_maskload
ab23f5d9
RS
54
55 - mask_store: currently just maskstore
56 - store_lanes: currently just vec_store_lanes
7e11fc7f 57 - mask_store_lanes: currently just vec_mask_store_lanes
db3efdaf 58 - scatter_store: used for {mask_,len_mask,}scatter_store
d496134a 59 - len_store: currently just len_store
ccfdda34 60 - len_maskstore: currently just len_maskstore
ab23f5d9 61
0972596e
RS
62 - unary: a normal unary optab, such as vec_reverse_<mode>
63 - binary: a normal binary optab, such as vec_interleave_lo_<mode>
c566cc9f 64 - ternary: a normal ternary optab, such as fma<mode>4
0972596e 65
00eab0c6
RS
66 - unary_convert: a single-input conversion optab, such as
67 lround<srcmode><dstmode>2.
68
b41d1f6e
RS
69 - cond_binary: a conditional binary optab, such as cond_add<mode>
70 - cond_ternary: a conditional ternary optab, such as cond_fma_rev<mode>
0972596e 71
b781a135 72 - fold_left: for scalar = FN (scalar, vector), keyed off the vector mode
58c036c8 73 - check_ptrs: used for check_{raw,war}_ptrs
b781a135 74
6c96d1e4
JZZ
75 - cond_len_unary: a conditional unary optab, such as cond_len_neg<mode>
76 - cond_len_binary: a conditional binary optab, such as cond_len_add<mode>
77 - cond_len_ternary: a conditional ternary optab, such as cond_len_fma_rev<mode>
78
16d24520
RS
79 DEF_INTERNAL_SIGNED_OPTAB_FN defines an internal function that
80 maps to one of two optabs, depending on the signedness of an input.
81 SIGNED_OPTAB and UNSIGNED_OPTAB are the optabs for signed and
82 unsigned inputs respectively, both without the trailing "_optab".
83 SELECTOR says which type in the tree_pair determines the signedness.
84
686ee971
RS
85 DEF_INTERNAL_FLT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition,
86 the function implements the computational part of a built-in math
87 function BUILT_IN_<NAME>{F,,L}. Unlike some built-in functions,
88 these internal functions never set errno.
89
4959a752
RS
90 DEF_INTERNAL_INT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition
91 says that the function extends the C-level BUILT_IN_<NAME>{,L,LL,IMAX}
92 group of functions to any integral mode (including vector modes).
93
2f482a07
AV
94 DEF_INTERNAL_WIDENING_OPTAB_FN is a wrapper that defines five internal
95 functions with DEF_INTERNAL_SIGNED_OPTAB_FN:
96 - one that describes a widening operation with the same number of elements
97 in the output and input vectors,
98 - two that describe a pair of high-low widening operations where the output
99 vectors each have half the number of elements of the input vectors,
100 corresponding to the result of the widening operation on the top half and
101 bottom half, these have the suffixes _HI and _LO,
102 - and two that describe a pair of even-odd widening operations where the
103 output vectors each have half the number of elements of the input vectors,
104 corresponding to the result of the widening operation on the even and odd
105 elements, these have the suffixes _EVEN and _ODD.
106 These five internal functions will require two optabs each, a SIGNED_OPTAB
107 and an UNSIGNED_OTPAB.
108
b78475cf 109 Each entry must have a corresponding expander of the form:
25583c4f 110
538dd0b7 111 void expand_NAME (gimple_call stmt)
25583c4f 112
ab23f5d9
RS
113 where STMT is the statement that performs the call. These are generated
114 automatically for optab functions and call out to a function or macro
115 called expand_<TYPE>_optab_fn. */
116
117#ifndef DEF_INTERNAL_FN
118#define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC)
119#endif
120
121#ifndef DEF_INTERNAL_OPTAB_FN
122#define DEF_INTERNAL_OPTAB_FN(NAME, FLAGS, OPTAB, TYPE) \
123 DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
124#endif
125
16d24520
RS
126#ifndef DEF_INTERNAL_SIGNED_OPTAB_FN
127#define DEF_INTERNAL_SIGNED_OPTAB_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, \
128 UNSIGNED_OPTAB, TYPE) \
129 DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
130#endif
131
686ee971
RS
132#ifndef DEF_INTERNAL_FLT_FN
133#define DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) \
134 DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
135#endif
136
ee5fd23a
MM
137#ifndef DEF_INTERNAL_FLT_FLOATN_FN
138#define DEF_INTERNAL_FLT_FLOATN_FN(NAME, FLAGS, OPTAB, TYPE) \
139 DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE)
140#endif
141
4959a752
RS
142#ifndef DEF_INTERNAL_INT_FN
143#define DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) \
144 DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
145#endif
146
2f482a07
AV
147#ifndef DEF_INTERNAL_WIDENING_OPTAB_FN
148#define DEF_INTERNAL_WIDENING_OPTAB_FN(NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB, TYPE) \
149 DEF_INTERNAL_SIGNED_OPTAB_FN (NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB, TYPE) \
150 DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _LO, FLAGS, SELECTOR, SOPTAB##_lo, UOPTAB##_lo, TYPE) \
151 DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _HI, FLAGS, SELECTOR, SOPTAB##_hi, UOPTAB##_hi, TYPE) \
152 DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _EVEN, FLAGS, SELECTOR, SOPTAB##_even, UOPTAB##_even, TYPE) \
153 DEF_INTERNAL_SIGNED_OPTAB_FN (NAME ## _ODD, FLAGS, SELECTOR, SOPTAB##_odd, UOPTAB##_odd, TYPE)
154#endif
155
ab23f5d9
RS
156DEF_INTERNAL_OPTAB_FN (MASK_LOAD, ECF_PURE, maskload, mask_load)
157DEF_INTERNAL_OPTAB_FN (LOAD_LANES, ECF_CONST, vec_load_lanes, load_lanes)
7e11fc7f
RS
158DEF_INTERNAL_OPTAB_FN (MASK_LOAD_LANES, ECF_PURE,
159 vec_mask_load_lanes, mask_load_lanes)
ab23f5d9 160
bfaa08b7
RS
161DEF_INTERNAL_OPTAB_FN (GATHER_LOAD, ECF_PURE, gather_load, gather_load)
162DEF_INTERNAL_OPTAB_FN (MASK_GATHER_LOAD, ECF_PURE,
163 mask_gather_load, gather_load)
db3efdaf
JZZ
164DEF_INTERNAL_OPTAB_FN (LEN_MASK_GATHER_LOAD, ECF_PURE,
165 len_mask_gather_load, gather_load)
bfaa08b7 166
d496134a 167DEF_INTERNAL_OPTAB_FN (LEN_LOAD, ECF_PURE, len_load, len_load)
ccfdda34 168DEF_INTERNAL_OPTAB_FN (LEN_MASK_LOAD, ECF_PURE, len_maskload, len_maskload)
d496134a 169
f307441a
RS
170DEF_INTERNAL_OPTAB_FN (SCATTER_STORE, 0, scatter_store, scatter_store)
171DEF_INTERNAL_OPTAB_FN (MASK_SCATTER_STORE, 0,
172 mask_scatter_store, scatter_store)
db3efdaf
JZZ
173DEF_INTERNAL_OPTAB_FN (LEN_MASK_SCATTER_STORE, 0,
174 len_mask_scatter_store, scatter_store)
f307441a 175
ab23f5d9
RS
176DEF_INTERNAL_OPTAB_FN (MASK_STORE, 0, maskstore, mask_store)
177DEF_INTERNAL_OPTAB_FN (STORE_LANES, ECF_CONST, vec_store_lanes, store_lanes)
7e11fc7f
RS
178DEF_INTERNAL_OPTAB_FN (MASK_STORE_LANES, 0,
179 vec_mask_store_lanes, mask_store_lanes)
272c6793 180
502d63b6 181DEF_INTERNAL_OPTAB_FN (VCOND, 0, vcond, vec_cond)
298e76e6
RS
182DEF_INTERNAL_OPTAB_FN (VCONDU, 0, vcondu, vec_cond)
183DEF_INTERNAL_OPTAB_FN (VCONDEQ, 0, vcondeq, vec_cond)
502d63b6
ML
184DEF_INTERNAL_OPTAB_FN (VCOND_MASK, 0, vcond_mask, vec_cond_mask)
185
683e55fa 186DEF_INTERNAL_OPTAB_FN (VEC_SET, 0, vec_set, vec_set)
c30efd8c 187DEF_INTERNAL_OPTAB_FN (VEC_EXTRACT, 0, vec_extract, vec_extract)
683e55fa 188
d496134a 189DEF_INTERNAL_OPTAB_FN (LEN_STORE, 0, len_store, len_store)
ccfdda34 190DEF_INTERNAL_OPTAB_FN (LEN_MASK_STORE, 0, len_maskstore, len_maskstore)
d496134a 191
7cfb4d93 192DEF_INTERNAL_OPTAB_FN (WHILE_ULT, ECF_CONST | ECF_NOTHROW, while_ult, while)
47203d89 193DEF_INTERNAL_OPTAB_FN (SELECT_VL, ECF_CONST | ECF_NOTHROW, select_vl, binary)
58c036c8
RS
194DEF_INTERNAL_OPTAB_FN (CHECK_RAW_PTRS, ECF_CONST | ECF_NOTHROW,
195 check_raw_ptrs, check_ptrs)
196DEF_INTERNAL_OPTAB_FN (CHECK_WAR_PTRS, ECF_CONST | ECF_NOTHROW,
197 check_war_ptrs, check_ptrs)
7cfb4d93 198
f1739b48
RS
199DEF_INTERNAL_OPTAB_FN (VEC_SHL_INSERT, ECF_CONST | ECF_NOTHROW,
200 vec_shl_insert, binary)
201
c0c2f013
YW
202DEF_INTERNAL_OPTAB_FN (DIV_POW2, ECF_CONST | ECF_NOTHROW, sdiv_pow2, binary)
203
c566cc9f
RS
204DEF_INTERNAL_OPTAB_FN (FMS, ECF_CONST, fms, ternary)
205DEF_INTERNAL_OPTAB_FN (FNMA, ECF_CONST, fnma, ternary)
206DEF_INTERNAL_OPTAB_FN (FNMS, ECF_CONST, fnms, ternary)
207
710b8dec
OA
208DEF_INTERNAL_SIGNED_OPTAB_FN (ABD, ECF_CONST | ECF_NOTHROW, first,
209 sabd, uabd, binary)
210
0267732b
RS
211DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_FLOOR, ECF_CONST | ECF_NOTHROW, first,
212 savg_floor, uavg_floor, binary)
213DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_CEIL, ECF_CONST | ECF_NOTHROW, first,
214 savg_ceil, uavg_ceil, binary)
215
a1d27560
KL
216DEF_INTERNAL_SIGNED_OPTAB_FN (MULH, ECF_CONST | ECF_NOTHROW, first,
217 smul_highpart, umul_highpart, binary)
58cc9876
YW
218DEF_INTERNAL_SIGNED_OPTAB_FN (MULHS, ECF_CONST | ECF_NOTHROW, first,
219 smulhs, umulhs, binary)
220DEF_INTERNAL_SIGNED_OPTAB_FN (MULHRS, ECF_CONST | ECF_NOTHROW, first,
221 smulhrs, umulhrs, binary)
222
0972596e
RS
223DEF_INTERNAL_OPTAB_FN (COND_ADD, ECF_CONST, cond_add, cond_binary)
224DEF_INTERNAL_OPTAB_FN (COND_SUB, ECF_CONST, cond_sub, cond_binary)
6c4fd4a9
RS
225DEF_INTERNAL_OPTAB_FN (COND_MUL, ECF_CONST, cond_smul, cond_binary)
226DEF_INTERNAL_SIGNED_OPTAB_FN (COND_DIV, ECF_CONST, first,
227 cond_sdiv, cond_udiv, cond_binary)
228DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MOD, ECF_CONST, first,
229 cond_smod, cond_umod, cond_binary)
230DEF_INTERNAL_OPTAB_FN (COND_RDIV, ECF_CONST, cond_sdiv, cond_binary)
0972596e
RS
231DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MIN, ECF_CONST, first,
232 cond_smin, cond_umin, cond_binary)
233DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MAX, ECF_CONST, first,
234 cond_smax, cond_umax, cond_binary)
70613000
RS
235DEF_INTERNAL_OPTAB_FN (COND_FMIN, ECF_CONST, cond_fmin, cond_binary)
236DEF_INTERNAL_OPTAB_FN (COND_FMAX, ECF_CONST, cond_fmax, cond_binary)
0972596e
RS
237DEF_INTERNAL_OPTAB_FN (COND_AND, ECF_CONST | ECF_NOTHROW,
238 cond_and, cond_binary)
239DEF_INTERNAL_OPTAB_FN (COND_IOR, ECF_CONST | ECF_NOTHROW,
240 cond_ior, cond_binary)
241DEF_INTERNAL_OPTAB_FN (COND_XOR, ECF_CONST | ECF_NOTHROW,
242 cond_xor, cond_binary)
20103c0e
RS
243DEF_INTERNAL_OPTAB_FN (COND_SHL, ECF_CONST | ECF_NOTHROW,
244 cond_ashl, cond_binary)
245DEF_INTERNAL_SIGNED_OPTAB_FN (COND_SHR, ECF_CONST | ECF_NOTHROW, first,
246 cond_ashr, cond_lshr, cond_binary)
0972596e 247
b41d1f6e
RS
248DEF_INTERNAL_OPTAB_FN (COND_FMA, ECF_CONST, cond_fma, cond_ternary)
249DEF_INTERNAL_OPTAB_FN (COND_FMS, ECF_CONST, cond_fms, cond_ternary)
250DEF_INTERNAL_OPTAB_FN (COND_FNMA, ECF_CONST, cond_fnma, cond_ternary)
251DEF_INTERNAL_OPTAB_FN (COND_FNMS, ECF_CONST, cond_fnms, cond_ternary)
252
20dcda98 253DEF_INTERNAL_OPTAB_FN (COND_NEG, ECF_CONST, cond_neg, cond_unary)
254
6c96d1e4
JZZ
255DEF_INTERNAL_OPTAB_FN (COND_LEN_ADD, ECF_CONST, cond_len_add, cond_len_binary)
256DEF_INTERNAL_OPTAB_FN (COND_LEN_SUB, ECF_CONST, cond_len_sub, cond_len_binary)
257DEF_INTERNAL_OPTAB_FN (COND_LEN_MUL, ECF_CONST, cond_len_smul, cond_len_binary)
258DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_DIV, ECF_CONST, first, cond_len_sdiv,
259 cond_len_udiv, cond_len_binary)
260DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_MOD, ECF_CONST, first, cond_len_smod,
261 cond_len_umod, cond_len_binary)
262DEF_INTERNAL_OPTAB_FN (COND_LEN_RDIV, ECF_CONST, cond_len_sdiv, cond_len_binary)
263DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_MIN, ECF_CONST, first, cond_len_smin,
264 cond_len_umin, cond_len_binary)
265DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_MAX, ECF_CONST, first, cond_len_smax,
266 cond_len_umax, cond_len_binary)
267DEF_INTERNAL_OPTAB_FN (COND_LEN_FMIN, ECF_CONST, cond_len_fmin, cond_len_binary)
268DEF_INTERNAL_OPTAB_FN (COND_LEN_FMAX, ECF_CONST, cond_len_fmax, cond_len_binary)
269DEF_INTERNAL_OPTAB_FN (COND_LEN_AND, ECF_CONST | ECF_NOTHROW, cond_len_and,
270 cond_len_binary)
271DEF_INTERNAL_OPTAB_FN (COND_LEN_IOR, ECF_CONST | ECF_NOTHROW, cond_len_ior,
272 cond_len_binary)
273DEF_INTERNAL_OPTAB_FN (COND_LEN_XOR, ECF_CONST | ECF_NOTHROW, cond_len_xor,
274 cond_len_binary)
275DEF_INTERNAL_OPTAB_FN (COND_LEN_SHL, ECF_CONST | ECF_NOTHROW, cond_len_ashl,
276 cond_len_binary)
277DEF_INTERNAL_SIGNED_OPTAB_FN (COND_LEN_SHR, ECF_CONST | ECF_NOTHROW, first,
278 cond_len_ashr, cond_len_lshr, cond_len_binary)
279
280DEF_INTERNAL_OPTAB_FN (COND_LEN_FMA, ECF_CONST, cond_len_fma, cond_len_ternary)
281DEF_INTERNAL_OPTAB_FN (COND_LEN_FMS, ECF_CONST, cond_len_fms, cond_len_ternary)
282DEF_INTERNAL_OPTAB_FN (COND_LEN_FNMA, ECF_CONST, cond_len_fnma,
283 cond_len_ternary)
284DEF_INTERNAL_OPTAB_FN (COND_LEN_FNMS, ECF_CONST, cond_len_fnms,
285 cond_len_ternary)
286
287DEF_INTERNAL_OPTAB_FN (COND_LEN_NEG, ECF_CONST, cond_len_neg, cond_len_unary)
288
ee62a5a6
RS
289DEF_INTERNAL_OPTAB_FN (RSQRT, ECF_CONST, rsqrt, unary)
290
16d24520
RS
291DEF_INTERNAL_OPTAB_FN (REDUC_PLUS, ECF_CONST | ECF_NOTHROW,
292 reduc_plus_scal, unary)
293DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MAX, ECF_CONST | ECF_NOTHROW, first,
294 reduc_smax_scal, reduc_umax_scal, unary)
295DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MIN, ECF_CONST | ECF_NOTHROW, first,
296 reduc_smin_scal, reduc_umin_scal, unary)
e32b9eb3
RS
297DEF_INTERNAL_OPTAB_FN (REDUC_FMAX, ECF_CONST | ECF_NOTHROW,
298 reduc_fmax_scal, unary)
299DEF_INTERNAL_OPTAB_FN (REDUC_FMIN, ECF_CONST | ECF_NOTHROW,
300 reduc_fmin_scal, unary)
898f07b0
RS
301DEF_INTERNAL_OPTAB_FN (REDUC_AND, ECF_CONST | ECF_NOTHROW,
302 reduc_and_scal, unary)
303DEF_INTERNAL_OPTAB_FN (REDUC_IOR, ECF_CONST | ECF_NOTHROW,
304 reduc_ior_scal, unary)
305DEF_INTERNAL_OPTAB_FN (REDUC_XOR, ECF_CONST | ECF_NOTHROW,
306 reduc_xor_scal, unary)
16d24520 307
bfe1bb57
RS
308/* Extract the last active element from a vector. */
309DEF_INTERNAL_OPTAB_FN (EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
9d4ac06e 310 extract_last, fold_left)
bfe1bb57 311
bb6c2b68
RS
312/* Same, but return the first argument if no elements are active. */
313DEF_INTERNAL_OPTAB_FN (FOLD_EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
314 fold_extract_last, fold_extract)
315
b781a135
RS
316DEF_INTERNAL_OPTAB_FN (FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
317 fold_left_plus, fold_left)
bb6c2b68 318
bce29d65
AM
319DEF_INTERNAL_OPTAB_FN (MASK_FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
320 mask_fold_left_plus, mask_fold_left)
321
686ee971
RS
322/* Unary math functions. */
323DEF_INTERNAL_FLT_FN (ACOS, ECF_CONST, acos, unary)
a81037ce 324DEF_INTERNAL_FLT_FN (ACOSH, ECF_CONST, acosh, unary)
686ee971 325DEF_INTERNAL_FLT_FN (ASIN, ECF_CONST, asin, unary)
a81037ce 326DEF_INTERNAL_FLT_FN (ASINH, ECF_CONST, asinh, unary)
686ee971 327DEF_INTERNAL_FLT_FN (ATAN, ECF_CONST, atan, unary)
a81037ce 328DEF_INTERNAL_FLT_FN (ATANH, ECF_CONST, atanh, unary)
686ee971 329DEF_INTERNAL_FLT_FN (COS, ECF_CONST, cos, unary)
247c45b2 330DEF_INTERNAL_FLT_FN (COSH, ECF_CONST, cosh, unary)
686ee971
RS
331DEF_INTERNAL_FLT_FN (EXP, ECF_CONST, exp, unary)
332DEF_INTERNAL_FLT_FN (EXP10, ECF_CONST, exp10, unary)
333DEF_INTERNAL_FLT_FN (EXP2, ECF_CONST, exp2, unary)
334DEF_INTERNAL_FLT_FN (EXPM1, ECF_CONST, expm1, unary)
335DEF_INTERNAL_FLT_FN (LOG, ECF_CONST, log, unary)
336DEF_INTERNAL_FLT_FN (LOG10, ECF_CONST, log10, unary)
337DEF_INTERNAL_FLT_FN (LOG1P, ECF_CONST, log1p, unary)
338DEF_INTERNAL_FLT_FN (LOG2, ECF_CONST, log2, unary)
339DEF_INTERNAL_FLT_FN (LOGB, ECF_CONST, logb, unary)
a52cf5cf 340DEF_INTERNAL_FLT_FN (SIGNBIT, ECF_CONST, signbit, unary)
686ee971
RS
341DEF_INTERNAL_FLT_FN (SIGNIFICAND, ECF_CONST, significand, unary)
342DEF_INTERNAL_FLT_FN (SIN, ECF_CONST, sin, unary)
247c45b2 343DEF_INTERNAL_FLT_FN (SINH, ECF_CONST, sinh, unary)
ee5fd23a 344DEF_INTERNAL_FLT_FLOATN_FN (SQRT, ECF_CONST, sqrt, unary)
686ee971 345DEF_INTERNAL_FLT_FN (TAN, ECF_CONST, tan, unary)
247c45b2 346DEF_INTERNAL_FLT_FN (TANH, ECF_CONST, tanh, unary)
686ee971 347
00eab0c6
RS
348/* Floating-point to integer conversions.
349
350 ??? Here we preserve the I/L/LL prefix convention from the
351 corresponding built-in functions, rather than make the internal
352 functions polymorphic in both the argument and the return types.
353 Perhaps an alternative would be to pass a zero of the required
354 return type as a second parameter. */
355DEF_INTERNAL_FLT_FN (ICEIL, ECF_CONST, lceil, unary_convert)
356DEF_INTERNAL_FLT_FN (IFLOOR, ECF_CONST, lfloor, unary_convert)
357DEF_INTERNAL_FLT_FN (IRINT, ECF_CONST, lrint, unary_convert)
358DEF_INTERNAL_FLT_FN (IROUND, ECF_CONST, lround, unary_convert)
359DEF_INTERNAL_FLT_FN (LCEIL, ECF_CONST, lceil, unary_convert)
360DEF_INTERNAL_FLT_FN (LFLOOR, ECF_CONST, lfloor, unary_convert)
361DEF_INTERNAL_FLT_FN (LRINT, ECF_CONST, lrint, unary_convert)
362DEF_INTERNAL_FLT_FN (LROUND, ECF_CONST, lround, unary_convert)
363DEF_INTERNAL_FLT_FN (LLCEIL, ECF_CONST, lceil, unary_convert)
364DEF_INTERNAL_FLT_FN (LLFLOOR, ECF_CONST, lfloor, unary_convert)
365DEF_INTERNAL_FLT_FN (LLRINT, ECF_CONST, lrint, unary_convert)
366DEF_INTERNAL_FLT_FN (LLROUND, ECF_CONST, lround, unary_convert)
367
686ee971 368/* FP rounding. */
c6cfa2bf
MM
369DEF_INTERNAL_FLT_FLOATN_FN (CEIL, ECF_CONST, ceil, unary)
370DEF_INTERNAL_FLT_FLOATN_FN (FLOOR, ECF_CONST, floor, unary)
371DEF_INTERNAL_FLT_FLOATN_FN (NEARBYINT, ECF_CONST, nearbyint, unary)
372DEF_INTERNAL_FLT_FLOATN_FN (RINT, ECF_CONST, rint, unary)
373DEF_INTERNAL_FLT_FLOATN_FN (ROUND, ECF_CONST, round, unary)
d3b92f35 374DEF_INTERNAL_FLT_FLOATN_FN (ROUNDEVEN, ECF_CONST, roundeven, unary)
c6cfa2bf 375DEF_INTERNAL_FLT_FLOATN_FN (TRUNC, ECF_CONST, btrunc, unary)
686ee971
RS
376
377/* Binary math functions. */
378DEF_INTERNAL_FLT_FN (ATAN2, ECF_CONST, atan2, binary)
ee5fd23a 379DEF_INTERNAL_FLT_FLOATN_FN (COPYSIGN, ECF_CONST, copysign, binary)
686ee971 380DEF_INTERNAL_FLT_FN (FMOD, ECF_CONST, fmod, binary)
4dd9b6c6 381DEF_INTERNAL_FLT_FN (HYPOT, ECF_CONST, hypot, binary)
686ee971
RS
382DEF_INTERNAL_FLT_FN (POW, ECF_CONST, pow, binary)
383DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary)
384DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary)
ee5fd23a
MM
385DEF_INTERNAL_FLT_FLOATN_FN (FMIN, ECF_CONST, fmin, binary)
386DEF_INTERNAL_FLT_FLOATN_FN (FMAX, ECF_CONST, fmax, binary)
336a06a1 387DEF_INTERNAL_OPTAB_FN (XORSIGN, ECF_CONST, xorsign, binary)
3ed472af
TC
388DEF_INTERNAL_OPTAB_FN (COMPLEX_ADD_ROT90, ECF_CONST, cadd90, binary)
389DEF_INTERNAL_OPTAB_FN (COMPLEX_ADD_ROT270, ECF_CONST, cadd270, binary)
e09173d8
TC
390DEF_INTERNAL_OPTAB_FN (COMPLEX_MUL, ECF_CONST, cmul, binary)
391DEF_INTERNAL_OPTAB_FN (COMPLEX_MUL_CONJ, ECF_CONST, cmul_conj, binary)
7a6c31f0 392DEF_INTERNAL_OPTAB_FN (VEC_ADDSUB, ECF_CONST, vec_addsub, binary)
2f482a07
AV
393DEF_INTERNAL_WIDENING_OPTAB_FN (VEC_WIDEN_PLUS,
394 ECF_CONST | ECF_NOTHROW,
395 first,
396 vec_widen_sadd, vec_widen_uadd,
397 binary)
398DEF_INTERNAL_WIDENING_OPTAB_FN (VEC_WIDEN_MINUS,
399 ECF_CONST | ECF_NOTHROW,
400 first,
401 vec_widen_ssub, vec_widen_usub,
402 binary)
aec90c8b
OA
403DEF_INTERNAL_WIDENING_OPTAB_FN (VEC_WIDEN_ABD,
404 ECF_CONST | ECF_NOTHROW,
405 first,
406 vec_widen_sabd, vec_widen_uabd,
407 binary)
7d810646
RB
408DEF_INTERNAL_OPTAB_FN (VEC_FMADDSUB, ECF_CONST, vec_fmaddsub, ternary)
409DEF_INTERNAL_OPTAB_FN (VEC_FMSUBADD, ECF_CONST, vec_fmsubadd, ternary)
686ee971
RS
410
411/* FP scales. */
412DEF_INTERNAL_FLT_FN (LDEXP, ECF_CONST, ldexp, binary)
413
c566cc9f 414/* Ternary math functions. */
b41d1f6e 415DEF_INTERNAL_FLT_FLOATN_FN (FMA, ECF_CONST, fma, ternary)
31fac318
TC
416DEF_INTERNAL_OPTAB_FN (COMPLEX_FMA, ECF_CONST, cmla, ternary)
417DEF_INTERNAL_OPTAB_FN (COMPLEX_FMA_CONJ, ECF_CONST, cmla_conj, ternary)
478e571a
TC
418DEF_INTERNAL_OPTAB_FN (COMPLEX_FMS, ECF_CONST, cmls, ternary)
419DEF_INTERNAL_OPTAB_FN (COMPLEX_FMS_CONJ, ECF_CONST, cmls_conj, ternary)
c566cc9f 420
4959a752 421/* Unary integer ops. */
f8c770dd
RS
422DEF_INTERNAL_INT_FN (CLRSB, ECF_CONST | ECF_NOTHROW, clrsb, unary)
423DEF_INTERNAL_INT_FN (CLZ, ECF_CONST | ECF_NOTHROW, clz, unary)
424DEF_INTERNAL_INT_FN (CTZ, ECF_CONST | ECF_NOTHROW, ctz, unary)
425DEF_INTERNAL_INT_FN (FFS, ECF_CONST | ECF_NOTHROW, ffs, unary)
426DEF_INTERNAL_INT_FN (PARITY, ECF_CONST | ECF_NOTHROW, parity, unary)
427DEF_INTERNAL_INT_FN (POPCOUNT, ECF_CONST | ECF_NOTHROW, popcount, unary)
4959a752 428
d6621a2f 429DEF_INTERNAL_FN (GOMP_TARGET_REV, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
6c7509bc 430DEF_INTERNAL_FN (GOMP_USE_SIMT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
0c6b03b5 431DEF_INTERNAL_FN (GOMP_SIMT_ENTER, ECF_LEAF | ECF_NOTHROW, NULL)
9d2fe6d4
RS
432DEF_INTERNAL_FN (GOMP_SIMT_ENTER_ALLOC, ECF_LEAF | ECF_NOTHROW, NULL)
433DEF_INTERNAL_FN (GOMP_SIMT_EXIT, ECF_LEAF | ECF_NOTHROW, NULL)
434DEF_INTERNAL_FN (GOMP_SIMT_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
9669b00b 435DEF_INTERNAL_FN (GOMP_SIMT_VF, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
9d2fe6d4
RS
436DEF_INTERNAL_FN (GOMP_SIMT_LAST_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
437DEF_INTERNAL_FN (GOMP_SIMT_ORDERED_PRED, ECF_LEAF | ECF_NOTHROW, NULL)
438DEF_INTERNAL_FN (GOMP_SIMT_VOTE_ANY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
439DEF_INTERNAL_FN (GOMP_SIMT_XCHG_BFLY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
440DEF_INTERNAL_FN (GOMP_SIMT_XCHG_IDX, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
b78475cf
YG
441DEF_INTERNAL_FN (GOMP_SIMD_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
442DEF_INTERNAL_FN (GOMP_SIMD_VF, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
443DEF_INTERNAL_FN (GOMP_SIMD_LAST_LANE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
d9a6bd32
JJ
444DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_START, ECF_LEAF | ECF_NOTHROW, NULL)
445DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_END, ECF_LEAF | ECF_NOTHROW, NULL)
b78475cf 446DEF_INTERNAL_FN (LOOP_VECTORIZED, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
542e7230 447DEF_INTERNAL_FN (LOOP_DIST_ALIAS, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
b78475cf 448DEF_INTERNAL_FN (ANNOTATE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
762cca00 449DEF_INTERNAL_FN (UBSAN_NULL, ECF_LEAF | ECF_NOTHROW, ". R . ")
b78475cf 450DEF_INTERNAL_FN (UBSAN_BOUNDS, ECF_LEAF | ECF_NOTHROW, NULL)
762cca00 451DEF_INTERNAL_FN (UBSAN_VPTR, ECF_LEAF | ECF_NOTHROW, ". R R . . ")
b78475cf
YG
452DEF_INTERNAL_FN (UBSAN_CHECK_ADD, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
453DEF_INTERNAL_FN (UBSAN_CHECK_SUB, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
454DEF_INTERNAL_FN (UBSAN_CHECK_MUL, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
762cca00 455DEF_INTERNAL_FN (UBSAN_PTR, ECF_LEAF | ECF_NOTHROW, ". R . ")
0e82f089 456DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW, NULL)
b78475cf
YG
457DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NULL)
458DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
93a73251
MM
459DEF_INTERNAL_FN (HWASAN_ALLOCA_UNPOISON, ECF_LEAF | ECF_NOTHROW, ". R ")
460DEF_INTERNAL_FN (HWASAN_CHOOSE_TAG, ECF_LEAF | ECF_NOTHROW, ". ")
461DEF_INTERNAL_FN (HWASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW,
462 ". . R . . ")
463DEF_INTERNAL_FN (HWASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL)
464DEF_INTERNAL_FN (HWASAN_SET_TAG,
465 ECF_TM_PURE | ECF_PURE | ECF_LEAF | ECF_NOTHROW, ". R R ")
762cca00
JH
466DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW,
467 ". . R . . ")
d80956bb 468DEF_INTERNAL_FN (ASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL)
c7775327 469DEF_INTERNAL_FN (ASAN_POISON, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
f6b9f2ff 470DEF_INTERNAL_FN (ASAN_POISON_USE, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
1304953e
JJ
471DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
472DEF_INTERNAL_FN (SUB_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
473DEF_INTERNAL_FN (MUL_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
43a3252c
JJ
474DEF_INTERNAL_FN (UADDC, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
475DEF_INTERNAL_FN (USUBC, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
fca4adf2 476DEF_INTERNAL_FN (TSAN_FUNC_EXIT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
b8b2ab06 477DEF_INTERNAL_FN (VA_ARG, ECF_NOTHROW | ECF_LEAF, NULL)
d8fcab68 478DEF_INTERNAL_FN (VEC_CONVERT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
6f966f06 479DEF_INTERNAL_FN (RAWMEMCHR, ECF_PURE | ECF_LEAF | ECF_NOTHROW, NULL)
8ab78162
NS
480
481/* An unduplicable, uncombinable function. Generally used to preserve
482 a CFG property in the face of jump threading, tail merging or
483 other such optimizations. The first argument distinguishes
484 between uses. See internal-fn.h for usage. */
485DEF_INTERNAL_FN (UNIQUE, ECF_NOTHROW, NULL)
1ee62b92 486DEF_INTERNAL_FN (PHI, 0, NULL)
8ab78162 487
a25e0b5e 488/* A function to represent an artifical initialization to an uninitialized
489 automatic variable. */
490DEF_INTERNAL_FN (DEFERRED_INIT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
491
9bd46bc9
NS
492/* DIM_SIZE and DIM_POS return the size of a particular compute
493 dimension and the executing thread's position within that
494 dimension. DIM_POS is pure (and not const) so that it isn't
495 thought to clobber memory and can be gcse'd within a single
496 parallel region, but not across FORK/JOIN boundaries. They take a
02889d23 497 single INTEGER_CST argument. This might be overly conservative. */
762cca00
JH
498DEF_INTERNAL_FN (GOACC_DIM_SIZE, ECF_CONST | ECF_NOTHROW | ECF_LEAF, NULL)
499DEF_INTERNAL_FN (GOACC_DIM_POS, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL)
9bd46bc9
NS
500
501/* OpenACC looping abstraction. See internal-fn.h for usage. */
502DEF_INTERNAL_FN (GOACC_LOOP, ECF_PURE | ECF_NOTHROW, NULL)
e5014671
NS
503
504/* OpenACC reduction abstraction. See internal-fn.h for usage. */
505DEF_INTERNAL_FN (GOACC_REDUCTION, ECF_NOTHROW | ECF_LEAF, NULL)
46e343b8 506
02889d23
CLT
507/* Openacc tile abstraction. Describes the spans of the element loop.
508 GOACC_TILE (num-loops, loop-no, tile-arg, tile-mask, element-mask). */
509DEF_INTERNAL_FN (GOACC_TILE, ECF_NOTHROW | ECF_LEAF, NULL)
510
883cabde
RS
511/* Set errno to EDOM, if GCC knows how to do that directly for the
512 current target. */
513DEF_INTERNAL_FN (SET_EDOM, ECF_LEAF | ECF_NOTHROW, NULL)
514
cc195d46
JJ
515/* Atomic functions. These don't have ECF_NOTHROW because for
516 -fnon-call-exceptions they can throw, otherwise we set
517 gimple_call_nothrow_p on it. */
518DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_SET, ECF_LEAF, NULL)
519DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_COMPLEMENT, ECF_LEAF, NULL)
520DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_RESET, ECF_LEAF, NULL)
521DEF_INTERNAL_FN (ATOMIC_COMPARE_EXCHANGE, ECF_LEAF, NULL)
6362627b
JJ
522DEF_INTERNAL_FN (ATOMIC_ADD_FETCH_CMP_0, ECF_LEAF, NULL)
523DEF_INTERNAL_FN (ATOMIC_SUB_FETCH_CMP_0, ECF_LEAF, NULL)
524DEF_INTERNAL_FN (ATOMIC_AND_FETCH_CMP_0, ECF_LEAF, NULL)
525DEF_INTERNAL_FN (ATOMIC_OR_FETCH_CMP_0, ECF_LEAF, NULL)
526DEF_INTERNAL_FN (ATOMIC_XOR_FETCH_CMP_0, ECF_LEAF, NULL)
adedd5c1 527
81fea426
MP
528/* To implement [[fallthrough]]. */
529DEF_INTERNAL_FN (FALLTHROUGH, ECF_LEAF | ECF_NOTHROW, NULL)
530
e16f1cc7
JJ
531/* To implement __builtin_launder. */
532DEF_INTERNAL_FN (LAUNDER, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
533
e72531b9
PK
534/* Divmod function. */
535DEF_INTERNAL_FN (DIVMOD, ECF_CONST | ECF_LEAF, NULL)
536
49789fd0
IS
537/* For coroutines. */
538DEF_INTERNAL_FN (CO_ACTOR, ECF_NOTHROW | ECF_LEAF, NULL)
539DEF_INTERNAL_FN (CO_YIELD, ECF_NOTHROW, NULL)
540DEF_INTERNAL_FN (CO_SUSPN, ECF_NOTHROW, NULL)
541DEF_INTERNAL_FN (CO_FRAME, ECF_PURE | ECF_NOTHROW | ECF_LEAF, NULL)
542
87a5e0e8
RB
543/* A NOP function with arbitrary arguments and return value. */
544DEF_INTERNAL_FN (NOP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
545
ef8176e0
RB
546/* Temporary vehicle for __builtin_shufflevector. */
547DEF_INTERNAL_FN (SHUFFLEVECTOR, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
548
463d9108
JJ
549/* <=> optimization. */
550DEF_INTERNAL_FN (SPACESHIP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
551
08b51bad
JJ
552/* [[assume (cond)]]. */
553DEF_INTERNAL_FN (ASSUME, ECF_CONST | ECF_LEAF | ECF_NOTHROW
554 | ECF_LOOPING_CONST_OR_PURE, NULL)
555
3da77f21
AS
556/* For if-conversion of inbranch SIMD clones. */
557DEF_INTERNAL_FN (MASK_CALL, ECF_NOVOPS, NULL)
558
4959a752 559#undef DEF_INTERNAL_INT_FN
686ee971 560#undef DEF_INTERNAL_FLT_FN
ee5fd23a 561#undef DEF_INTERNAL_FLT_FLOATN_FN
16d24520 562#undef DEF_INTERNAL_SIGNED_OPTAB_FN
ab23f5d9 563#undef DEF_INTERNAL_OPTAB_FN
46e343b8 564#undef DEF_INTERNAL_FN