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