15#ifndef LLVM_CLANG_BASIC_TARGETBUILTINS_H
16#define LLVM_CLANG_BASIC_TARGETBUILTINS_H
21#include "llvm/Support/MathExtras.h"
29#define GET_NEON_BUILTIN_ENUMERATORS
30#include "clang/Basic/arm_neon.inc"
33#include "clang/Basic/arm_fp16.inc"
34#undef GET_NEON_BUILTIN_ENUMERATORS
44#define GET_MVE_BUILTIN_ENUMERATORS
45#include "clang/Basic/arm_mve_builtins.inc"
46#undef GET_MVE_BUILTIN_ENUMERATORS
49#define GET_CDE_BUILTIN_ENUMERATORS
50#include "clang/Basic/arm_cde_builtins.inc"
51#undef GET_CDE_BUILTIN_ENUMERATORS
54#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
55#include "clang/Basic/BuiltinsARM.def"
63#define GET_SVE_BUILTIN_ENUMERATORS
64#include "clang/Basic/arm_sve_builtins.inc"
65#undef GET_SVE_BUILTIN_ENUMERATORS
68#define GET_SVE_BUILTINS
69#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
70#include "clang/Basic/BuiltinsAArch64NeonSVEBridge.def"
72#undef GET_SVE_BUILTINS
80#define GET_SME_BUILTIN_ENUMERATORS
81#include "clang/Basic/arm_sme_builtins.inc"
82#undef GET_SME_BUILTIN_ENUMERATORS
96 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
97 #include "clang/Basic/BuiltinsAArch64.def"
106#define GET_BUILTIN_ENUMERATORS
107#include "clang/Basic/BuiltinsBPF.inc"
108#undef GET_BUILTIN_ENUMERATORS
117#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
118#include "clang/Basic/BuiltinsPPC.def"
127#define GET_BUILTIN_ENUMERATORS
128#include "clang/Basic/BuiltinsNVPTX.inc"
129#undef GET_BUILTIN_ENUMERATORS
138 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
139 #include "clang/Basic/BuiltinsAMDGPU.def"
148#define GET_BUILTIN_ENUMERATORS
149#include "clang/Basic/BuiltinsDirectX.inc"
150#undef GET_BUILTIN_ENUMERATORS
159#define GET_BUILTIN_ENUMERATORS
160#include "clang/Basic/BuiltinsSPIRVCommon.inc"
161#undef GET_BUILTIN_ENUMERATORS
164#define GET_BUILTIN_ENUMERATORS
165#include "clang/Basic/BuiltinsSPIRVVK.inc"
166#undef GET_BUILTIN_ENUMERATORS
169#define GET_BUILTIN_ENUMERATORS
170#include "clang/Basic/BuiltinsSPIRVCL.inc"
171#undef GET_BUILTIN_ENUMERATORS
180#define GET_BUILTIN_ENUMERATORS
181#include "clang/Basic/BuiltinsX86.inc"
182#undef GET_BUILTIN_ENUMERATORS
185#define GET_BUILTIN_ENUMERATORS
186#include "clang/Basic/BuiltinsX86_64.inc"
187#undef GET_BUILTIN_ENUMERATORS
196#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
197#include "clang/Basic/BuiltinsVE.def"
202 namespace RISCVVector {
205#define GET_RISCVV_BUILTIN_ENUMERATORS
206#include "clang/Basic/riscv_vector_builtins.inc"
209#include "clang/Basic/riscv_sifive_vector_builtins.inc"
212#include "clang/Basic/riscv_andes_vector_builtins.inc"
213#undef GET_RISCVV_BUILTIN_ENUMERATORS
224#define GET_BUILTIN_ENUMERATORS
225#include "clang/Basic/BuiltinsRISCV.inc"
226#undef GET_BUILTIN_ENUMERATORS
232 namespace LoongArch {
235#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
236#include "clang/Basic/BuiltinsLoongArchBase.def"
239#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
240#include "clang/Basic/BuiltinsLoongArchLSX.def"
243#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
244#include "clang/Basic/BuiltinsLoongArchLASX.def"
280 Flags |= UnsignedFlag;
294 bool isUnsigned()
const {
return (Flags & UnsignedFlag) != 0; }
295 bool isQuad()
const {
return (Flags & QuadFlag) != 0; }
317 llvm_unreachable(
"Invalid NeonTypeFlag!");
323#define LLVM_GET_ARM_INTRIN_IMMCHECKTYPES
324#include "clang/Basic/arm_immcheck_types.inc"
325#undef LLVM_GET_ARM_INTRIN_IMMCHECKTYPES
331 unsigned EltTypeShift;
332 unsigned MemEltTypeShift;
333 unsigned MergeTypeShift;
334 unsigned SplatOperandMaskShift;
337#define LLVM_GET_SVE_TYPEFLAGS
338#include "clang/Basic/arm_sve_typeflags.inc"
339#undef LLVM_GET_SVE_TYPEFLAGS
342#define LLVM_GET_SVE_ELTTYPES
343#include "clang/Basic/arm_sve_typeflags.inc"
344#undef LLVM_GET_SVE_ELTTYPES
348#define LLVM_GET_SVE_MEMELTTYPES
349#include "clang/Basic/arm_sve_typeflags.inc"
350#undef LLVM_GET_SVE_MEMELTTYPES
354#define LLVM_GET_SVE_MERGETYPES
355#include "clang/Basic/arm_sve_typeflags.inc"
356#undef LLVM_GET_SVE_MERGETYPES
360 EltTypeShift = llvm::countr_zero(EltTypeMask);
361 MemEltTypeShift = llvm::countr_zero(MemEltTypeMask);
362 MergeTypeShift = llvm::countr_zero(MergeTypeMask);
363 SplatOperandMaskShift = llvm::countr_zero(SplatOperandMask);
367 return (
EltType)((Flags & EltTypeMask) >> EltTypeShift);
371 return (
MemEltType)((Flags & MemEltTypeMask) >> MemEltTypeShift);
375 return (
MergeType)((Flags & MergeTypeMask) >> MergeTypeShift);
379 return ((Flags & SplatOperandMask) >> SplatOperandMaskShift) - 1;
383 return Flags & SplatOperandMask;
386 bool isLoad()
const {
return Flags & IsLoad; }
387 bool isStore()
const {
return Flags & IsStore; }
396 return Flags & IsOverloadWhileOrMultiVecCvt;
409 bool isUndef()
const {
return Flags & IsUndef; }
418 bool isFlagSet(uint64_t Flag)
const {
return Flags & Flag; }
425#define GET_BUILTIN_ENUMERATORS
426#include "clang/Basic/BuiltinsHexagon.inc"
427#undef GET_BUILTIN_ENUMERATORS
436#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
437#include "clang/Basic/BuiltinsMips.def"
446#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
447#include "clang/Basic/BuiltinsXCore.def"
456#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
457#include "clang/Basic/BuiltinsSystemZ.def"
463 namespace WebAssembly {
466#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
467#include "clang/Basic/BuiltinsWebAssembly.def"
Defines enum values for all the target-independent builtin functions.
Flags to identify the types for overloaded Neon builtins.
NeonTypeFlags(unsigned F)
bool isFloatingPoint() const
unsigned getEltSizeInBits() const
EltType getEltType() const
NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad)
Flags to identify the types for overloaded SVE builtins.
bool isZExtReturn() const
bool isReverseUSDOT() const
bool isOverloadNone() const
MemEltType getMemEltType() const
bool isGatherLoad() const
bool isOverloadCvt() const
EltType getEltType() const
bool isOverloadDefault() const
bool isOverloadWhileRW() const
bool isReverseMergeAnyAccOp() const
bool isReductionQV() const
bool isFlagSet(uint64_t Flag) const
bool isInsertOp1SVALL() const
bool isAppendSVALL() const
bool isReverseMergeAnyBinOp() const
bool isStructStore() const
bool isTupleCreate() const
bool isGatherPrefetch() const
bool hasSplatOperand() const
MergeType getMergeType() const
bool isByteIndexed() const
bool isStructLoad() const
bool isOverloadWhileOrMultiVecCvt() const
unsigned getSplatOperand() const
bool isScatterStore() const
bool isReverseCompare() const
The JSON file list parser is used to communicate input to InstallAPI.
static constexpr uint64_t LargestBuiltinID