123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===--- TargetBuiltins.h - Target specific builtin IDs ---------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- ///
- /// \file
- /// Enumerates target-specific builtins in their own namespaces within
- /// namespace ::clang.
- ///
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_CLANG_BASIC_TARGETBUILTINS_H
- #define LLVM_CLANG_BASIC_TARGETBUILTINS_H
- #include <algorithm>
- #include <stdint.h>
- #include "clang/Basic/Builtins.h"
- #include "llvm/Support/MathExtras.h"
- #undef PPC
- namespace clang {
- namespace NEON {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsNEON.def"
- FirstTSBuiltin
- };
- }
- /// ARM builtins
- namespace ARM {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
- LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsARM.def"
- LastTSBuiltin
- };
- }
- namespace SVE {
- enum {
- LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsSVE.def"
- FirstTSBuiltin,
- };
- }
- /// AArch64 builtins
- namespace AArch64 {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
- LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
- FirstSVEBuiltin = NEON::FirstTSBuiltin,
- LastSVEBuiltin = SVE::FirstTSBuiltin - 1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsAArch64.def"
- LastTSBuiltin
- };
- }
- /// BPF builtins
- namespace BPF {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsBPF.def"
- LastTSBuiltin
- };
- }
- /// PPC builtins
- namespace PPC {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsPPC.def"
- LastTSBuiltin
- };
- }
- /// NVPTX builtins
- namespace NVPTX {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsNVPTX.def"
- LastTSBuiltin
- };
- }
- /// AMDGPU builtins
- namespace AMDGPU {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsAMDGPU.def"
- LastTSBuiltin
- };
- }
- /// X86 builtins
- namespace X86 {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsX86.def"
- FirstX86_64Builtin,
- LastX86CommonBuiltin = FirstX86_64Builtin - 1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsX86_64.def"
- LastTSBuiltin
- };
- }
- /// VE builtins
- namespace VE {
- enum { LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1, LastTSBuiltin };
- }
- namespace RISCVVector {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsRISCVVector.def"
- FirstTSBuiltin,
- };
- }
- /// RISCV builtins
- namespace RISCV {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
- FirstRVVBuiltin = clang::Builtin::FirstTSBuiltin,
- LastRVVBuiltin = RISCVVector::FirstTSBuiltin - 1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsRISCV.def"
- LastTSBuiltin
- };
- } // namespace RISCV
- /// Flags to identify the types for overloaded Neon builtins.
- ///
- /// These must be kept in sync with the flags in utils/TableGen/NeonEmitter.h.
- class NeonTypeFlags {
- enum {
- EltTypeMask = 0xf,
- UnsignedFlag = 0x10,
- QuadFlag = 0x20
- };
- uint32_t Flags;
- public:
- enum EltType {
- Int8,
- Int16,
- Int32,
- Int64,
- Poly8,
- Poly16,
- Poly64,
- Poly128,
- Float16,
- Float32,
- Float64,
- BFloat16
- };
- NeonTypeFlags(unsigned F) : Flags(F) {}
- NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad) : Flags(ET) {
- if (IsUnsigned)
- Flags |= UnsignedFlag;
- if (IsQuad)
- Flags |= QuadFlag;
- }
- EltType getEltType() const { return (EltType)(Flags & EltTypeMask); }
- bool isPoly() const {
- EltType ET = getEltType();
- return ET == Poly8 || ET == Poly16 || ET == Poly64;
- }
- bool isUnsigned() const { return (Flags & UnsignedFlag) != 0; }
- bool isQuad() const { return (Flags & QuadFlag) != 0; }
- };
- /// Flags to identify the types for overloaded SVE builtins.
- class SVETypeFlags {
- uint64_t Flags;
- unsigned EltTypeShift;
- unsigned MemEltTypeShift;
- unsigned MergeTypeShift;
- unsigned SplatOperandMaskShift;
- public:
- #define LLVM_GET_SVE_TYPEFLAGS
- #include "clang/Basic/arm_sve_typeflags.inc"
- #undef LLVM_GET_SVE_TYPEFLAGS
- enum EltType {
- #define LLVM_GET_SVE_ELTTYPES
- #include "clang/Basic/arm_sve_typeflags.inc"
- #undef LLVM_GET_SVE_ELTTYPES
- };
- enum MemEltType {
- #define LLVM_GET_SVE_MEMELTTYPES
- #include "clang/Basic/arm_sve_typeflags.inc"
- #undef LLVM_GET_SVE_MEMELTTYPES
- };
- enum MergeType {
- #define LLVM_GET_SVE_MERGETYPES
- #include "clang/Basic/arm_sve_typeflags.inc"
- #undef LLVM_GET_SVE_MERGETYPES
- };
- enum ImmCheckType {
- #define LLVM_GET_SVE_IMMCHECKTYPES
- #include "clang/Basic/arm_sve_typeflags.inc"
- #undef LLVM_GET_SVE_IMMCHECKTYPES
- };
- SVETypeFlags(uint64_t F) : Flags(F) {
- EltTypeShift = llvm::countTrailingZeros(EltTypeMask);
- MemEltTypeShift = llvm::countTrailingZeros(MemEltTypeMask);
- MergeTypeShift = llvm::countTrailingZeros(MergeTypeMask);
- SplatOperandMaskShift = llvm::countTrailingZeros(SplatOperandMask);
- }
- EltType getEltType() const {
- return (EltType)((Flags & EltTypeMask) >> EltTypeShift);
- }
- MemEltType getMemEltType() const {
- return (MemEltType)((Flags & MemEltTypeMask) >> MemEltTypeShift);
- }
- MergeType getMergeType() const {
- return (MergeType)((Flags & MergeTypeMask) >> MergeTypeShift);
- }
- unsigned getSplatOperand() const {
- return ((Flags & SplatOperandMask) >> SplatOperandMaskShift) - 1;
- }
- bool hasSplatOperand() const {
- return Flags & SplatOperandMask;
- }
- bool isLoad() const { return Flags & IsLoad; }
- bool isStore() const { return Flags & IsStore; }
- bool isGatherLoad() const { return Flags & IsGatherLoad; }
- bool isScatterStore() const { return Flags & IsScatterStore; }
- bool isStructLoad() const { return Flags & IsStructLoad; }
- bool isStructStore() const { return Flags & IsStructStore; }
- bool isZExtReturn() const { return Flags & IsZExtReturn; }
- bool isByteIndexed() const { return Flags & IsByteIndexed; }
- bool isOverloadNone() const { return Flags & IsOverloadNone; }
- bool isOverloadWhile() const { return Flags & IsOverloadWhile; }
- bool isOverloadDefault() const { return !(Flags & OverloadKindMask); }
- bool isOverloadWhileRW() const { return Flags & IsOverloadWhileRW; }
- bool isOverloadCvt() const { return Flags & IsOverloadCvt; }
- bool isPrefetch() const { return Flags & IsPrefetch; }
- bool isReverseCompare() const { return Flags & ReverseCompare; }
- bool isAppendSVALL() const { return Flags & IsAppendSVALL; }
- bool isInsertOp1SVALL() const { return Flags & IsInsertOp1SVALL; }
- bool isGatherPrefetch() const { return Flags & IsGatherPrefetch; }
- bool isReverseUSDOT() const { return Flags & ReverseUSDOT; }
- bool isUndef() const { return Flags & IsUndef; }
- bool isTupleCreate() const { return Flags & IsTupleCreate; }
- bool isTupleGet() const { return Flags & IsTupleGet; }
- bool isTupleSet() const { return Flags & IsTupleSet; }
- uint64_t getBits() const { return Flags; }
- bool isFlagSet(uint64_t Flag) const { return Flags & Flag; }
- };
- /// Hexagon builtins
- namespace Hexagon {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsHexagon.def"
- LastTSBuiltin
- };
- }
- /// MIPS builtins
- namespace Mips {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsMips.def"
- LastTSBuiltin
- };
- }
- /// XCore builtins
- namespace XCore {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsXCore.def"
- LastTSBuiltin
- };
- }
- /// SystemZ builtins
- namespace SystemZ {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsSystemZ.def"
- LastTSBuiltin
- };
- }
- /// WebAssembly builtins
- namespace WebAssembly {
- enum {
- LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
- #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
- #include "clang/Basic/BuiltinsWebAssembly.def"
- LastTSBuiltin
- };
- }
- static constexpr uint64_t LargestBuiltinID = std::max<uint64_t>(
- {ARM::LastTSBuiltin, AArch64::LastTSBuiltin, BPF::LastTSBuiltin,
- PPC::LastTSBuiltin, NVPTX::LastTSBuiltin, AMDGPU::LastTSBuiltin,
- X86::LastTSBuiltin, VE::LastTSBuiltin, RISCV::LastTSBuiltin,
- Hexagon::LastTSBuiltin, Mips::LastTSBuiltin, XCore::LastTSBuiltin,
- SystemZ::LastTSBuiltin, WebAssembly::LastTSBuiltin});
- } // end namespace clang.
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|