15#ifndef LLVM_CLANG_BASIC_TARGETBUILTINS_H
16#define LLVM_CLANG_BASIC_TARGETBUILTINS_H
21#include "llvm/Support/MathExtras.h"
29#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
30#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
31#include "clang/Basic/BuiltinsNEON.def"
41#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
42#include "clang/Basic/BuiltinsARM.def"
50#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
51#include "clang/Basic/BuiltinsSVE.def"
63 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
64 #include "clang/Basic/BuiltinsAArch64.def"
73 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
74 #include "clang/Basic/BuiltinsBPF.def"
83#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
84#include "clang/Basic/BuiltinsPPC.def"
93#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
94#include "clang/Basic/BuiltinsNVPTX.def"
103 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
104 #include "clang/Basic/BuiltinsAMDGPU.def"
113#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
114#include "clang/Basic/BuiltinsX86.def"
117#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
118#include "clang/Basic/BuiltinsX86_64.def"
127#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
128#include "clang/Basic/BuiltinsVE.def"
133 namespace RISCVVector {
136#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
137#include "clang/Basic/BuiltinsRISCVVector.def"
148#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
149#include "clang/Basic/BuiltinsRISCV.def"
155 namespace LoongArch {
158#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
159#include "clang/Basic/BuiltinsLoongArch.def"
194 Flags |= UnsignedFlag;
204 bool isUnsigned()
const {
return (Flags & UnsignedFlag) != 0; }
205 bool isQuad()
const {
return (Flags & QuadFlag) != 0; }
211 unsigned EltTypeShift;
212 unsigned MemEltTypeShift;
213 unsigned MergeTypeShift;
214 unsigned SplatOperandMaskShift;
217#define LLVM_GET_SVE_TYPEFLAGS
218#include "clang/Basic/arm_sve_typeflags.inc"
219#undef LLVM_GET_SVE_TYPEFLAGS
222#define LLVM_GET_SVE_ELTTYPES
223#include "clang/Basic/arm_sve_typeflags.inc"
224#undef LLVM_GET_SVE_ELTTYPES
228#define LLVM_GET_SVE_MEMELTTYPES
229#include "clang/Basic/arm_sve_typeflags.inc"
230#undef LLVM_GET_SVE_MEMELTTYPES
234#define LLVM_GET_SVE_MERGETYPES
235#include "clang/Basic/arm_sve_typeflags.inc"
236#undef LLVM_GET_SVE_MERGETYPES
240#define LLVM_GET_SVE_IMMCHECKTYPES
241#include "clang/Basic/arm_sve_typeflags.inc"
242#undef LLVM_GET_SVE_IMMCHECKTYPES
246 EltTypeShift = llvm::countr_zero(EltTypeMask);
247 MemEltTypeShift = llvm::countr_zero(MemEltTypeMask);
248 MergeTypeShift = llvm::countr_zero(MergeTypeMask);
249 SplatOperandMaskShift = llvm::countr_zero(SplatOperandMask);
253 return (
EltType)((Flags & EltTypeMask) >> EltTypeShift);
257 return (
MemEltType)((Flags & MemEltTypeMask) >> MemEltTypeShift);
261 return (
MergeType)((Flags & MergeTypeMask) >> MergeTypeShift);
265 return ((Flags & SplatOperandMask) >> SplatOperandMaskShift) - 1;
269 return Flags & SplatOperandMask;
272 bool isLoad()
const {
return Flags & IsLoad; }
273 bool isStore()
const {
return Flags & IsStore; }
292 bool isUndef()
const {
return Flags & IsUndef; }
298 bool isFlagSet(uint64_t Flag)
const {
return Flags & Flag; }
305#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
306#include "clang/Basic/BuiltinsHexagon.def"
315#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
316#include "clang/Basic/BuiltinsMips.def"
325#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
326#include "clang/Basic/BuiltinsXCore.def"
335#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
336#include "clang/Basic/BuiltinsSystemZ.def"
342 namespace WebAssembly {
345#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
346#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)
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 isFlagSet(uint64_t Flag) const
bool isInsertOp1SVALL() const
bool isOverloadWhile() 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
unsigned getSplatOperand() const
bool isScatterStore() const
bool isReverseCompare() const
static constexpr uint64_t LargestBuiltinID