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#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
52#include "clang/Basic/BuiltinsSVE.def"
60#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
61#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
62#include "clang/Basic/BuiltinsSME.def"
76 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
77 #include "clang/Basic/BuiltinsAArch64.def"
86 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
87 #include "clang/Basic/BuiltinsBPF.inc"
96#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
97#include "clang/Basic/BuiltinsPPC.def"
106#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
107#include "clang/Basic/BuiltinsNVPTX.inc"
116 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
117 #include "clang/Basic/BuiltinsAMDGPU.def"
126#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
127#include "clang/Basic/BuiltinsSPIRV.inc"
136#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
137#include "clang/Basic/BuiltinsX86.inc"
140#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
141#include "clang/Basic/BuiltinsX86_64.inc"
150#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
151#include "clang/Basic/BuiltinsVE.def"
156 namespace RISCVVector {
159#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
160#include "clang/Basic/BuiltinsRISCVVector.def"
171#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
172#include "clang/Basic/BuiltinsRISCV.inc"
178 namespace LoongArch {
181#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
182#include "clang/Basic/BuiltinsLoongArch.def"
218 Flags |= UnsignedFlag;
228 bool isUnsigned()
const {
return (Flags & UnsignedFlag) != 0; }
229 bool isQuad()
const {
return (Flags & QuadFlag) != 0; }
251 llvm_unreachable(
"Invalid NeonTypeFlag!");
257#define LLVM_GET_ARM_INTRIN_IMMCHECKTYPES
258#include "clang/Basic/arm_immcheck_types.inc"
259#undef LLVM_GET_ARM_INTRIN_IMMCHECKTYPES
265 unsigned EltTypeShift;
266 unsigned MemEltTypeShift;
267 unsigned MergeTypeShift;
268 unsigned SplatOperandMaskShift;
271#define LLVM_GET_SVE_TYPEFLAGS
272#include "clang/Basic/arm_sve_typeflags.inc"
273#undef LLVM_GET_SVE_TYPEFLAGS
276#define LLVM_GET_SVE_ELTTYPES
277#include "clang/Basic/arm_sve_typeflags.inc"
278#undef LLVM_GET_SVE_ELTTYPES
282#define LLVM_GET_SVE_MEMELTTYPES
283#include "clang/Basic/arm_sve_typeflags.inc"
284#undef LLVM_GET_SVE_MEMELTTYPES
288#define LLVM_GET_SVE_MERGETYPES
289#include "clang/Basic/arm_sve_typeflags.inc"
290#undef LLVM_GET_SVE_MERGETYPES
294 EltTypeShift = llvm::countr_zero(EltTypeMask);
295 MemEltTypeShift = llvm::countr_zero(MemEltTypeMask);
296 MergeTypeShift = llvm::countr_zero(MergeTypeMask);
297 SplatOperandMaskShift = llvm::countr_zero(SplatOperandMask);
301 return (
EltType)((Flags & EltTypeMask) >> EltTypeShift);
305 return (
MemEltType)((Flags & MemEltTypeMask) >> MemEltTypeShift);
309 return (
MergeType)((Flags & MergeTypeMask) >> MergeTypeShift);
313 return ((Flags & SplatOperandMask) >> SplatOperandMaskShift) - 1;
317 return Flags & SplatOperandMask;
320 bool isLoad()
const {
return Flags & IsLoad; }
321 bool isStore()
const {
return Flags & IsStore; }
330 return Flags & IsOverloadWhileOrMultiVecCvt;
343 bool isUndef()
const {
return Flags & IsUndef; }
352 bool isFlagSet(uint64_t Flag)
const {
return Flags & Flag; }
359#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
360#include "clang/Basic/BuiltinsHexagon.def"
369#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
370#include "clang/Basic/BuiltinsMips.def"
379#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
380#include "clang/Basic/BuiltinsXCore.def"
389#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
390#include "clang/Basic/BuiltinsSystemZ.def"
396 namespace WebAssembly {
399#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
400#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)
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