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