|
clang 23.0.0git
|
#include "ABIInfo.h"#include "CGBuiltin.h"#include "CGDebugInfo.h"#include "TargetInfo.h"#include "clang/Basic/TargetBuiltins.h"#include "llvm/IR/InlineAsm.h"#include "llvm/IR/IntrinsicsAArch64.h"#include "llvm/IR/IntrinsicsARM.h"#include "llvm/IR/IntrinsicsBPF.h"#include "llvm/TargetParser/AArch64TargetParser.h"#include <numeric>#include "clang/Basic/arm_sve_builtin_cg.inc"#include "clang/Basic/BuiltinsAArch64NeonSVEBridge_cg.def"#include "clang/Basic/arm_sme_builtin_cg.inc"#include "clang/Basic/arm_fp16.inc"#include "clang/Basic/arm_neon.inc"#include "clang/Basic/arm_mve_builtin_cg.inc"#include "clang/Basic/arm_cde_builtin_cg.inc"Go to the source code of this file.
Macros | |
| #define | NEONMAP0(NameBase) |
| #define | NEONMAP1(NameBase, LLVMIntrinsic, TypeModifier) |
| #define | NEONMAP2(NameBase, LLVMIntrinsic, AltLLVMIntrinsic, TypeModifier) |
| #define | SVEMAP1(NameBase, LLVMIntrinsic, TypeModifier) |
| #define | SVEMAP2(NameBase, TypeModifier) |
| #define | GET_SVE_LLVM_INTRINSIC_MAP |
| #define | SMEMAP1(NameBase, LLVMIntrinsic, TypeModifier) |
| #define | SMEMAP2(NameBase, TypeModifier) |
| #define | GET_SME_LLVM_INTRINSIC_MAP |
| #define | GET_NEON_OVERLOAD_CHECK |
Enumerations | |
| enum | { AddRetType = (1 << 0) , Add1ArgType = (1 << 1) , Add2ArgTypes = (1 << 2) , VectorizeRetType = (1 << 3) , VectorizeArgTypes = (1 << 4) , InventFloatType = (1 << 5) , UnsignedAlts = (1 << 6) , Use64BitVectors = (1 << 7) , Use128BitVectors = (1 << 8) , Vectorize1ArgType = Add1ArgType | VectorizeArgTypes , VectorRet = AddRetType | VectorizeRetType , VectorRetGetArgs01 , FpCmpzModifiers } |
| enum | SpecialRegisterAccessKind { NormalRead , VolatileRead , Write } |
Functions | |
| static std::optional< CodeGenFunction::MSVCIntrin > | translateAarch64ToMsvcIntrin (unsigned BuiltinID) |
| static std::optional< CodeGenFunction::MSVCIntrin > | translateArmToMsvcIntrin (unsigned BuiltinID) |
| static Value * | emitCallMaybeConstrainedFPBuiltin (CodeGenFunction &CGF, unsigned IntrinsicID, unsigned ConstrainedIntrinsicID, llvm::Type *Ty, ArrayRef< Value * > Args) |
| static llvm::FixedVectorType * | GetNeonType (CodeGenFunction *CGF, NeonTypeFlags TypeFlags, bool HasFastHalfType=true, bool V1Ty=false, bool AllowBFloatArgsAndRet=true) |
| static llvm::VectorType * | GetFloatNeonType (CodeGenFunction *CGF, NeonTypeFlags IntTypeFlags) |
| static const ARMVectorIntrinsicInfo * | findARMVectorIntrinsicInMap (ArrayRef< ARMVectorIntrinsicInfo > IntrinsicMap, unsigned BuiltinID, bool &MapProvenSorted) |
| static Value * | EmitCommonNeonSISDBuiltinExpr (CodeGenFunction &CGF, const ARMVectorIntrinsicInfo &SISDInfo, SmallVectorImpl< Value * > &Ops, const CallExpr *E) |
| static Value * | packTBLDVectorList (CodeGenFunction &CGF, ArrayRef< Value * > Ops, Value *ExtOp, Value *IndexOp, llvm::Type *ResTy, unsigned IntID, const char *Name) |
| static Value * | EmitSpecialRegisterBuiltin (CodeGenFunction &CGF, const CallExpr *E, llvm::Type *RegisterType, llvm::Type *ValueType, SpecialRegisterAccessKind AccessKind, StringRef SysReg="") |
| static Value * | EmitRangePrefetchBuiltin (CodeGenFunction &CGF, unsigned BuiltinID, const CallExpr *E) |
| static bool | HasExtraNeonArgument (unsigned BuiltinID) |
| Return true if BuiltinID is an overloaded Neon intrinsic with an extra argument that specifies the vector type. | |
| template<typename Integer> | |
| static Integer | GetIntegerConstantValue (const Expr *E, ASTContext &Context) |
| static llvm::Value * | SignOrZeroExtend (CGBuilderTy &Builder, llvm::Value *V, llvm::Type *T, bool Unsigned) |
| static llvm::Value * | MVEImmediateShr (CGBuilderTy &Builder, llvm::Value *V, uint32_t Shift, bool Unsigned) |
| static llvm::Value * | ARMMVEVectorSplat (CGBuilderTy &Builder, llvm::Value *V) |
| static llvm::Value * | ARMMVEVectorReinterpret (CGBuilderTy &Builder, CodeGenFunction *CGF, llvm::Value *V, llvm::Type *DestType) |
| static llvm::Value * | VectorUnzip (CGBuilderTy &Builder, llvm::Value *V, bool Odd) |
| static llvm::Value * | VectorZip (CGBuilderTy &Builder, llvm::Value *V0, llvm::Value *V1) |
| template<unsigned HighBit, unsigned OtherBits> | |
| static llvm::Value * | ARMMVEConstantSplat (CGBuilderTy &Builder, llvm::Type *VT) |
| static llvm::Value * | ARMMVEVectorElementReverse (CGBuilderTy &Builder, llvm::Value *V, unsigned ReverseWidth) |
| static llvm::Value * | ARMMVECreateSIToFP (CGBuilderTy &Builder, CodeGenFunction *CGF, llvm::Value *V, llvm::Type *Ty) |
| static llvm::Value * | ARMMVECreateUIToFP (CGBuilderTy &Builder, CodeGenFunction *CGF, llvm::Value *V, llvm::Type *Ty) |
| static llvm::Value * | ARMMVECreateFPToSI (CGBuilderTy &Builder, CodeGenFunction *CGF, llvm::Value *V, llvm::Type *Ty) |
| static llvm::Value * | ARMMVECreateFPToUI (CGBuilderTy &Builder, CodeGenFunction *CGF, llvm::Value *V, llvm::Type *Ty) |
| static Value * | EmitAArch64TblBuiltinExpr (CodeGenFunction &CGF, unsigned BuiltinID, const CallExpr *E, SmallVectorImpl< Value * > &Ops, llvm::Triple::ArchType Arch) |
| static llvm::ScalableVectorType * | getSVEVectorForElementType (llvm::Type *EltTy) |
| static void | InsertExplicitZeroOperand (CGBuilderTy &Builder, llvm::Type *Ty, SmallVectorImpl< Value * > &Ops) |
| static void | InsertExplicitUndefOperand (CGBuilderTy &Builder, llvm::Type *Ty, SmallVectorImpl< Value * > &Ops) |
| static void | swapCommutativeSMEOperands (unsigned BuiltinID, SmallVectorImpl< Value * > &Ops) |
| Value * | readX18AsPtr (CodeGenFunction &CGF) |
| Helper for the read/write/add/inc X18 builtins: read the X18 register and return it as an i8 pointer. | |
Variables | |
| static const ARMVectorIntrinsicInfo | ARMSIMDIntrinsicMap [] |
| static const ARMVectorIntrinsicInfo | AArch64SIMDIntrinsicMap [] |
| static const ARMVectorIntrinsicInfo | AArch64SISDIntrinsicMap [] |
| static const std::pair< unsigned, unsigned > | NEONEquivalentIntrinsicMap [] |
| static const ARMVectorIntrinsicInfo | AArch64SVEIntrinsicMap [] |
| static const ARMVectorIntrinsicInfo | AArch64SMEIntrinsicMap [] |
| static bool | NEONSIMDIntrinsicsProvenSorted = false |
| static bool | AArch64SIMDIntrinsicsProvenSorted = false |
| static bool | AArch64SISDIntrinsicsProvenSorted = false |
| static bool | AArch64SVEIntrinsicsProvenSorted = false |
| static bool | AArch64SMEIntrinsicsProvenSorted = false |
| constexpr unsigned | SVEBitsPerBlock = 128 |
| #define GET_NEON_OVERLOAD_CHECK |
| #define GET_SME_LLVM_INTRINSIC_MAP |
| #define GET_SVE_LLVM_INTRINSIC_MAP |
| #define NEONMAP0 | ( | NameBase | ) |
| #define NEONMAP1 | ( | NameBase, | |
| LLVMIntrinsic, | |||
| TypeModifier ) |
| #define NEONMAP2 | ( | NameBase, | |
| LLVMIntrinsic, | |||
| AltLLVMIntrinsic, | |||
| TypeModifier ) |
| #define SMEMAP1 | ( | NameBase, | |
| LLVMIntrinsic, | |||
| TypeModifier ) |
| #define SMEMAP2 | ( | NameBase, | |
| TypeModifier ) |
| #define SVEMAP1 | ( | NameBase, | |
| LLVMIntrinsic, | |||
| TypeModifier ) |
| #define SVEMAP2 | ( | NameBase, | |
| TypeModifier ) |
| anonymous enum |
|
static |
Definition at line 3545 of file ARM.cpp.
References ARMMVEVectorSplat(), and clang::cast().
|
static |
Definition at line 3587 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and V.
|
static |
Definition at line 3595 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and V.
|
static |
Definition at line 3571 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and V.
|
static |
Definition at line 3579 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and V.
|
static |
|
static |
Definition at line 3493 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::CodeGenFunction::getTarget(), clang::TargetInfo::isBigEndian(), and V.
|
static |
|
static |
Definition at line 3715 of file ARM.cpp.
References Arch, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitNeonCall(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenFunction::getContext(), clang::Expr::getIntegerConstantExpr(), clang::CodeGen::CodeGenModule::getIntrinsic(), GetNeonType(), clang::CallExpr::getNumArgs(), packTBLDVectorList(), and s.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 342 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, and clang::CodeGen::CodeGenModule::getIntrinsic().
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), and clang::CodeGen::CodeGenFunction::EmitCommonNeonBuiltinExpr().
|
static |
Definition at line 1743 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::cast(), clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CodeGenFunction::EmitNeonCall(), clang::CallExpr::getArg(), clang::Expr::getType(), getType(), clang::CodeGen::CodeGenFunction::LookupNeonLLVMIntrinsic(), and clang::CodeGen::CodeGenTypeCache::SizeTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 2684 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::Expr::EvaluateAsInt(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenModule::getContext(), and clang::CodeGen::CodeGenModule::getIntrinsic().
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 2618 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::Call, clang::cast(), clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::Expr::IgnoreParenCasts(), NormalRead, VolatileRead, and Write.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), and clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
|
static |
Definition at line 399 of file ARM.cpp.
References clang::CodeGen::CodeGenTypeCache::DoubleTy, clang::CodeGen::CodeGenTypeCache::FloatTy, clang::NeonTypeFlags::getEltType(), clang::CodeGen::CodeGenTypeCache::HalfTy, clang::NeonTypeFlags::Int16, clang::NeonTypeFlags::Int32, clang::NeonTypeFlags::Int64, and clang::NeonTypeFlags::isQuad().
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), and clang::CodeGen::CodeGenFunction::EmitCommonNeonBuiltinExpr().
|
static |
Definition at line 3452 of file ARM.cpp.
References clang::Expr::getIntegerConstantExpr(), and Integer.
|
static |
Definition at line 359 of file ARM.cpp.
References clang::NeonTypeFlags::BFloat16, clang::CodeGen::CodeGenTypeCache::BFloatTy, clang::CodeGen::CodeGenTypeCache::DoubleTy, clang::NeonTypeFlags::Float16, clang::NeonTypeFlags::Float32, clang::NeonTypeFlags::Float64, clang::CodeGen::CodeGenTypeCache::FloatTy, clang::NeonTypeFlags::getEltType(), clang::CodeGen::CodeGenTypeCache::HalfTy, clang::NeonTypeFlags::Int16, clang::CodeGen::CodeGenTypeCache::Int16Ty, clang::NeonTypeFlags::Int32, clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::NeonTypeFlags::Int64, clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::NeonTypeFlags::Int8, clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::NeonTypeFlags::isQuad(), clang::NeonTypeFlags::MFloat8, clang::NeonTypeFlags::Poly128, clang::NeonTypeFlags::Poly16, clang::NeonTypeFlags::Poly64, and clang::NeonTypeFlags::Poly8.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), EmitAArch64TblBuiltinExpr(), clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr(), and clang::CodeGen::CodeGenFunction::EmitCommonNeonBuiltinExpr().
|
static |
Definition at line 4004 of file ARM.cpp.
References SVEBitsPerBlock.
Return true if BuiltinID is an overloaded Neon intrinsic with an extra argument that specifies the vector type.
The additional argument is meant for Sema checking (see CheckNeonBuiltinFunctionCall) and this function should be kept consistent with the logic in Sema. TODO: Make this return false for SISD builtins.
Definition at line 2739 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), and clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
|
static |
Definition at line 4543 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr().
|
static |
Definition at line 4537 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr().
|
static |
Definition at line 3463 of file ARM.cpp.
References clang::cast(), clang::Unsigned, and V.
|
static |
Definition at line 2536 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::cast(), clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitNeonCall(), clang::CodeGen::CodeGenModule::getIntrinsic(), and getType().
Referenced by EmitAArch64TblBuiltinExpr().
| Value * readX18AsPtr | ( | CodeGenFunction & | CGF | ) |
Helper for the read/write/add/inc X18 builtins: read the X18 register and return it as an i8 pointer.
Definition at line 5100 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::CodeGen::CodeGenTypeCache::Int64Ty, and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 3456 of file ARM.cpp.
References clang::Unsigned, and V.
|
static |
Definition at line 5007 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SMEBuiltinExpr().
|
static |
Definition at line 31 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 190 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
|
static |
Definition at line 3519 of file ARM.cpp.
References clang::cast(), and V.
|
static |
Definition at line 3530 of file ARM.cpp.
References clang::cast().
|
static |
Definition at line 1674 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 1675 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 1663 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SMEBuiltinExpr().
Definition at line 1677 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SMEBuiltinExpr().
|
static |
Definition at line 1645 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr().
Definition at line 1676 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr().
|
static |
Definition at line 600 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
Definition at line 1487 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), and clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
Definition at line 1672 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
|
constexpr |
Definition at line 4002 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr(), and getSVEVectorForElementType().