|
clang 24.0.0git
|
#include "ABIInfo.h"#include "CGBuiltin.h"#include "CGDebugInfo.h"#include "TargetInfo.h"#include "clang/Basic/AArch64CodeGenUtils.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/Support/AArch64MemoryHints.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 | 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 | 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) |
| template<typename IntrinsicInfo> | |
| static const IntrinsicInfo * | findARMVectorIntrinsicInMap (ArrayRef< IntrinsicInfo > IntrinsicMap, unsigned BuiltinID, bool &MapProvenSorted) |
| static Value * | EmitCommonNeonSISDBuiltinExpr (CodeGenFunction &CGF, const ARMNeonVectorIntrinsicInfo &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 Value * | EmitAtomicStoreWithHintBuiltin (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 ARMNeonVectorIntrinsicInfo | ARMSIMDIntrinsicMap [] |
| static const std::pair< unsigned, unsigned > | NEONEquivalentIntrinsicMap [] |
| static const AArch64SVEAndSMEVectorIntrinsicInfo | AArch64SVEIntrinsicMap [] |
| static const AArch64SVEAndSMEVectorIntrinsicInfo | 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 SMEMAP1 | ( | NameBase, | |
| LLVMIntrinsic, | |||
| TypeModifier ) |
| #define SMEMAP2 | ( | NameBase, | |
| TypeModifier ) |
| #define SVEMAP1 | ( | NameBase, | |
| LLVMIntrinsic, | |||
| TypeModifier ) |
| #define SVEMAP2 | ( | NameBase, | |
| TypeModifier ) |
|
static |
Definition at line 2941 of file ARM.cpp.
References ARMMVEVectorSplat(), clang::cast(), clang::T, and uint32_t.
|
static |
Definition at line 2983 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and V.
|
static |
Definition at line 2991 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and V.
|
static |
Definition at line 2967 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and V.
|
static |
Definition at line 2975 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and V.
|
static |
|
static |
Definition at line 2889 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 3111 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(), Int, and packTBLDVectorList().
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 2069 of file ARM.cpp.
References clang::Addr, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::Data, clang::CodeGen::CodeGenFunction::EmitPointerWithAlignment(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CodeGen::CodeGenFunction::EmitToMemory(), clang::Expr::EvaluateAsInt(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenModule::getContext(), and clang::CodeGen::CodeGenModule::getLLVMContext().
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 345 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 1055 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::aarch64::ARMNeonVectorIntrinsicInfo::BuiltinID, clang::cast(), clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CodeGenFunction::EmitNeonCall(), clang::CallExpr::getArg(), clang::Expr::getType(), getType(), clang::aarch64::ARMNeonVectorIntrinsicInfo::LLVMIntrinsic, clang::CodeGen::CodeGenFunction::LookupNeonLLVMIntrinsic(), clang::aarch64::ARMNeonVectorIntrinsicInfo::NameHint, clang::CodeGen::CodeGenTypeCache::SizeTy, and clang::aarch64::ARMNeonVectorIntrinsicInfo::TypeModifier.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 2019 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 1953 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 402 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 2848 of file ARM.cpp.
References clang::Expr::getIntegerConstantExpr(), and Integer.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 362 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 3393 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 2135 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), and clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
|
static |
Definition at line 3912 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr().
|
static |
Definition at line 3906 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr().
|
static |
Definition at line 2859 of file ARM.cpp.
References clang::cast(), uint32_t, clang::Unsigned, and V.
|
static |
Definition at line 1871 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 4459 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 2852 of file ARM.cpp.
References clang::T, clang::Unsigned, and V.
|
static |
Definition at line 4359 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SMEBuiltinExpr().
|
static |
Definition at line 34 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 193 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
|
static |
Definition at line 2915 of file ARM.cpp.
References clang::cast(), and V.
|
static |
Definition at line 2926 of file ARM.cpp.
References clang::cast().
Definition at line 986 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
Definition at line 987 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 975 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SMEBuiltinExpr().
Definition at line 989 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SMEBuiltinExpr().
|
static |
Definition at line 960 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr().
Definition at line 988 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr().
|
static |
Definition at line 541 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
Definition at line 861 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), and clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
Definition at line 984 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
|
constexpr |
Definition at line 3391 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr(), and getSVEVectorForElementType().