|
clang 23.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/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 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 2884 of file ARM.cpp.
References ARMMVEVectorSplat(), clang::cast(), and uint32_t.
|
static |
Definition at line 2926 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and V.
|
static |
Definition at line 2934 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and V.
|
static |
Definition at line 2910 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and V.
|
static |
Definition at line 2918 of file ARM.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and V.
|
static |
|
static |
Definition at line 2832 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 3054 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(), and packTBLDVectorList().
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 344 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 1054 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 2018 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 1952 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 401 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 2791 of file ARM.cpp.
References clang::Expr::getIntegerConstantExpr(), and Integer.
|
static |
Definition at line 361 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 3336 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 2073 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), and clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
|
static |
Definition at line 3855 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr().
|
static |
Definition at line 3849 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr().
|
static |
Definition at line 2802 of file ARM.cpp.
References clang::cast(), uint32_t, clang::Unsigned, and V.
|
static |
Definition at line 1870 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 4422 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 2795 of file ARM.cpp.
References clang::Unsigned, and V.
|
static |
Definition at line 4322 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SMEBuiltinExpr().
|
static |
Definition at line 33 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 192 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
|
static |
Definition at line 2858 of file ARM.cpp.
References clang::cast(), and V.
|
static |
Definition at line 2869 of file ARM.cpp.
References clang::cast().
Definition at line 985 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
Definition at line 986 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr().
|
static |
Definition at line 974 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SMEBuiltinExpr().
Definition at line 988 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SMEBuiltinExpr().
|
static |
Definition at line 959 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr().
Definition at line 987 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr().
|
static |
Definition at line 540 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
Definition at line 860 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), and clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
Definition at line 983 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
|
constexpr |
Definition at line 3334 of file ARM.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr(), and getSVEVectorForElementType().