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 GET_BUILTIN_ENUMERATORS
55#include "clang/Basic/BuiltinsARM.inc"
56#undef GET_BUILTIN_ENUMERATORS
64#define GET_SVE_BUILTIN_ENUMERATORS
65#include "clang/Basic/arm_sve_builtins.inc"
66#undef GET_SVE_BUILTIN_ENUMERATORS
69#define GET_SVE_BUILTINS
70#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
71#include "clang/Basic/BuiltinsAArch64NeonSVEBridge.def"
73#undef GET_SVE_BUILTINS
81#define GET_SME_BUILTIN_ENUMERATORS
82#include "clang/Basic/arm_sme_builtins.inc"
83#undef GET_SME_BUILTIN_ENUMERATORS
96#define GET_BUILTIN_ENUMERATORS
97#include "clang/Basic/BuiltinsAArch64.inc"
98#undef GET_BUILTIN_ENUMERATORS
107#define GET_BUILTIN_ENUMERATORS
108#include "clang/Basic/BuiltinsBPF.inc"
109#undef GET_BUILTIN_ENUMERATORS
118#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
119#include "clang/Basic/BuiltinsPPC.def"
128#define GET_BUILTIN_ENUMERATORS
129#include "clang/Basic/BuiltinsNVPTX.inc"
130#undef GET_BUILTIN_ENUMERATORS
139#define GET_BUILTIN_ENUMERATORS
140#include "clang/Basic/BuiltinsAMDGPU.inc"
141#undef GET_BUILTIN_ENUMERATORS
150#define GET_BUILTIN_ENUMERATORS
151#include "clang/Basic/BuiltinsDirectX.inc"
152#undef GET_BUILTIN_ENUMERATORS
161#define GET_BUILTIN_ENUMERATORS
162#include "clang/Basic/BuiltinsSPIRVCommon.inc"
163#undef GET_BUILTIN_ENUMERATORS
166#define GET_BUILTIN_ENUMERATORS
167#include "clang/Basic/BuiltinsSPIRVVK.inc"
168#undef GET_BUILTIN_ENUMERATORS
171#define GET_BUILTIN_ENUMERATORS
172#include "clang/Basic/BuiltinsSPIRVCL.inc"
173#undef GET_BUILTIN_ENUMERATORS
182#define GET_BUILTIN_ENUMERATORS
183#include "clang/Basic/BuiltinsX86.inc"
184#undef GET_BUILTIN_ENUMERATORS
187#define GET_BUILTIN_ENUMERATORS
188#include "clang/Basic/BuiltinsX86_64.inc"
189#undef GET_BUILTIN_ENUMERATORS
198#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
199#include "clang/Basic/BuiltinsVE.def"
207#define GET_RISCVV_BUILTIN_ENUMERATORS
208#include "clang/Basic/riscv_vector_builtins.inc"
211#include "clang/Basic/riscv_sifive_vector_builtins.inc"
214#include "clang/Basic/riscv_andes_vector_builtins.inc"
215#undef GET_RISCVV_BUILTIN_ENUMERATORS
226#define GET_BUILTIN_ENUMERATORS
227#include "clang/Basic/BuiltinsRISCV.inc"
228#undef GET_BUILTIN_ENUMERATORS
237#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
238#include "clang/Basic/BuiltinsLoongArchBase.def"
241#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
242#include "clang/Basic/BuiltinsLoongArchLSX.def"
245#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
246#include "clang/Basic/BuiltinsLoongArchLASX.def"
282 Flags |= UnsignedFlag;
296 bool isUnsigned()
const {
return (Flags & UnsignedFlag) != 0; }
297 bool isQuad()
const {
return (Flags & QuadFlag) != 0; }
319 llvm_unreachable(
"Invalid NeonTypeFlag!");
325#define LLVM_GET_ARM_INTRIN_IMMCHECKTYPES
326#include "clang/Basic/arm_immcheck_types.inc"
327#undef LLVM_GET_ARM_INTRIN_IMMCHECKTYPES
333 unsigned EltTypeShift;
334 unsigned MemEltTypeShift;
335 unsigned MergeTypeShift;
336 unsigned SplatOperandMaskShift;
339#define LLVM_GET_SVE_TYPEFLAGS
340#include "clang/Basic/arm_sve_typeflags.inc"
341#undef LLVM_GET_SVE_TYPEFLAGS
344#define LLVM_GET_SVE_ELTTYPES
345#include "clang/Basic/arm_sve_typeflags.inc"
346#undef LLVM_GET_SVE_ELTTYPES
350#define LLVM_GET_SVE_MEMELTTYPES
351#include "clang/Basic/arm_sve_typeflags.inc"
352#undef LLVM_GET_SVE_MEMELTTYPES
356#define LLVM_GET_SVE_MERGETYPES
357#include "clang/Basic/arm_sve_typeflags.inc"
358#undef LLVM_GET_SVE_MERGETYPES
362 EltTypeShift = llvm::countr_zero(EltTypeMask);
363 MemEltTypeShift = llvm::countr_zero(MemEltTypeMask);
364 MergeTypeShift = llvm::countr_zero(MergeTypeMask);
365 SplatOperandMaskShift = llvm::countr_zero(SplatOperandMask);
369 return (
EltType)((Flags & EltTypeMask) >> EltTypeShift);
373 return (
MemEltType)((Flags & MemEltTypeMask) >> MemEltTypeShift);
377 return (
MergeType)((Flags & MergeTypeMask) >> MergeTypeShift);
381 return ((Flags & SplatOperandMask) >> SplatOperandMaskShift) - 1;
385 return Flags & SplatOperandMask;
388 bool isLoad()
const {
return Flags & IsLoad; }
389 bool isStore()
const {
return Flags & IsStore; }
398 return Flags & IsOverloadWhileOrMultiVecCvt;
403 return Flags & IsOverloadFirstandLast;
406 return Flags & IsOverloadDefaultAndOp0;
416 bool isUndef()
const {
return Flags & IsUndef; }
425 bool isFlagSet(uint64_t Flag)
const {
return Flags & Flag; }
432#define GET_BUILTIN_ENUMERATORS
433#include "clang/Basic/BuiltinsHexagon.inc"
434#undef GET_BUILTIN_ENUMERATORS
443#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
444#include "clang/Basic/BuiltinsMips.def"
453#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
454#include "clang/Basic/BuiltinsXCore.def"
463#define GET_BUILTIN_ENUMERATORS
464#include "clang/Basic/BuiltinsSystemZ.inc"
465#undef GET_BUILTIN_ENUMERATORS
468#define GET_BUILTIN_ENUMERATORS
469#include "clang/Basic/BuiltinsZOS.inc"
470#undef GET_BUILTIN_ENUMERATORS
479#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
480#include "clang/Basic/BuiltinsWebAssembly.def"
489#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
490#include "clang/Basic/BuiltinsAVR.def"
Defines enum values for all the target-independent builtin functions.
NeonTypeFlags(unsigned F)
bool isFloatingPoint() const
unsigned getEltSizeInBits() const
EltType getEltType() const
NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad)
bool isZExtReturn() const
bool isReverseUSDOT() const
bool isOverloadNone() const
MemEltType getMemEltType() const
bool isGatherLoad() const
EltType getEltType() const
bool isOverloadFirstandLast() 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 isOverloadDefaultAndOp0() 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
Top level wrappers for InstallAPI frontend operations.
static constexpr uint64_t LargestBuiltinID
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 uint32_t