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