|
clang 23.0.0git
|
#include "CIRGenBuilder.h"#include "CIRGenFunction.h"#include "clang/Basic/TargetBuiltins.h"#include "clang/CIR/MissingFeatures.h"#include "llvm/IR/Intrinsics.h"#include "llvm/IR/IntrinsicsAArch64.h"#include "mlir/IR/Value.h"#include "clang/AST/GlobalDecl.h"#include "clang/Basic/Builtins.h"#include "clang/Basic/arm_sve_builtin_cg.inc"#include "clang/Basic/arm_fp16.inc"#include "clang/Basic/arm_neon.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 | 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 } |
Functions | |
| static mlir::Value | genVscaleTimesFactor (mlir::Location loc, CIRGenBuilderTy builder, mlir::Type cirTy, int32_t scalingFactor) |
| static const ARMVectorIntrinsicInfo * | findARMVectorIntrinsicInMap (ArrayRef< ARMVectorIntrinsicInfo > intrinsicMap, unsigned builtinID, bool &mapProvenSorted) |
| static mlir::Value | emitAArch64CompareBuiltinExpr (CIRGenFunction &cgf, CIRGenBuilderTy &builder, mlir::Location loc, mlir::Value src, mlir::Type retTy, const cir::CmpOpKind kind) |
| static cir::VectorType | getNeonType (CIRGenFunction *cgf, NeonTypeFlags typeFlags, mlir::Location loc, bool hasLegalHalfType=true, bool v1Ty=false, bool allowBFloatArgsAndRet=true) |
| static mlir::Value | emitCommonNeonBuiltinExpr (CIRGenFunction &cgf, unsigned builtinID, unsigned llvmIntrinsic, unsigned altLLVMIntrinsic, const char *nameHint, unsigned modifier, const CallExpr *expr, llvm::SmallVectorImpl< mlir::Value > &ops) |
| static mlir::Value | emitCallMaybeConstrainedBuiltin (CIRGenBuilderTy &builder, mlir::Location loc, StringRef intrName, mlir::Type retTy, llvm::SmallVector< mlir::Value > &ops) |
| static llvm::StringRef | getLLVMIntrNameNoPrefix (llvm::Intrinsic::ID intrID) |
| static unsigned | getSVEMinEltCount (clang::SVETypeFlags::EltType sveType) |
| static cir::VectorType | getSVEVectorForElementType (CIRGenModule &cgm, mlir::Type eltTy) |
| 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 Operation> | |
| static mlir::Value | emitNeonCallToOp (CIRGenModule &cgm, CIRGenBuilderTy &builder, llvm::SmallVector< mlir::Type > argTypes, llvm::SmallVectorImpl< mlir::Value > &args, std::optional< llvm::StringRef > intrinsicName, mlir::Type funcResTy, mlir::Location loc, bool isConstrainedFPIntrinsic=false, unsigned shift=0, bool rightshift=false) |
| static mlir::Value | emitNeonCall (CIRGenModule &cgm, CIRGenBuilderTy &builder, llvm::SmallVector< mlir::Type > argTypes, llvm::SmallVectorImpl< mlir::Value > &args, llvm::StringRef intrinsicName, mlir::Type funcResTy, mlir::Location loc, bool isConstrainedFPIntrinsic=false, unsigned shift=0, bool rightshift=false) |
Variables | |
| static const ARMVectorIntrinsicInfo | AArch64SIMDIntrinsicMap [] |
| static const ARMVectorIntrinsicInfo | aarch64SVEIntrinsicMap [] |
| static bool | aarch64SIMDIntrinsicsProvenSorted = false |
| static bool | aarch64SVEIntrinsicsProvenSorted = false |
| constexpr unsigned | sveBitsPerBlock = 128 |
| static const std::pair< unsigned, unsigned > | neonEquivalentIntrinsicMap [] |
| #define GET_NEON_OVERLOAD_CHECK |
| #define GET_SVE_LLVM_INTRINSIC_MAP |
| #define NEONMAP0 | ( | NameBase | ) |
Definition at line 89 of file CIRGenBuiltinAArch64.cpp.
| #define NEONMAP1 | ( | NameBase, | |
| LLVMIntrinsic, | |||
| TypeModifier ) |
Definition at line 92 of file CIRGenBuiltinAArch64.cpp.
| #define NEONMAP2 | ( | NameBase, | |
| LLVMIntrinsic, | |||
| AltLLVMIntrinsic, | |||
| TypeModifier ) |
Definition at line 96 of file CIRGenBuiltinAArch64.cpp.
| #define SVEMAP1 | ( | NameBase, | |
| LLVMIntrinsic, | |||
| TypeModifier ) |
Definition at line 412 of file CIRGenBuiltinAArch64.cpp.
| #define SVEMAP2 | ( | NameBase, | |
| TypeModifier ) |
Definition at line 416 of file CIRGenBuiltinAArch64.cpp.
| anonymous enum |
Definition at line 50 of file CIRGenBuiltinAArch64.cpp.
|
static |
Definition at line 453 of file CIRGenBuiltinAArch64.cpp.
References clang::cast(), cir::CIRBaseBuilderTy::createBitcast(), cir::CIRBaseBuilderTy::createCast(), cir::CIRBaseBuilderTy::createCompare(), cir::CIRBaseBuilderTy::createVecCompare(), cir::CIRBaseBuilderTy::getNullValue(), clang::CIRGen::CIRGenBuilderTy::getSIntNTy(), clang::isa(), and kind.
Referenced by clang::CIRGen::CIRGenFunction::emitAArch64BuiltinExpr(), and emitCommonNeonBuiltinExpr().
|
static |
Definition at line 841 of file CIRGenBuiltinAArch64.cpp.
References cir::MissingFeatures::emitConstrainedFPCall(), and clang::CIRGen::CIRGenBuilderTy::emitIntrinsicCallOp().
Referenced by clang::CIRGen::CIRGenFunction::emitAArch64BuiltinExpr().
|
static |
Definition at line 538 of file CIRGenBuiltinAArch64.cpp.
References clang::ASTContext::BuiltinInfo, clang::CIRGen::CIRGenFunction::cgm, emitAArch64CompareBuiltinExpr(), clang::CIRGen::CIRGenModule::errorNYI(), clang::ast_matchers::expr, clang::CIRGen::CIRGenFunction::getBuilder(), clang::CIRGen::CIRGenFunction::getContext(), clang::CIRGen::CIRGenFunction::getLoc(), clang::Builtin::Context::getName(), getNeonType(), clang::CIRGen::CIRGenFunction::getTarget(), and clang::TargetInfo::hasFastHalfType().
Referenced by clang::CIRGen::CIRGenFunction::emitAArch64BuiltinExpr().
|
static |
Definition at line 1046 of file CIRGenBuiltinAArch64.cpp.
References emitNeonCallToOp().
Referenced by clang::CIRGen::CIRGenFunction::emitAArch64BuiltinExpr().
|
static |
Definition at line 1008 of file CIRGenBuiltinAArch64.cpp.
References cir::CIRBaseBuilderTy::createBitcast(), cir::MissingFeatures::emitConstrainedFPCall(), and clang::CIRGen::CIRGenModule::errorNYI().
Referenced by emitNeonCall().
|
static |
Definition at line 430 of file CIRGenBuiltinAArch64.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), clang::CIRGen::CIRGenFunction::emitAArch64BuiltinExpr(), clang::CodeGen::CodeGenFunction::EmitAArch64SMEBuiltinExpr(), clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr(), clang::CIRGen::CIRGenFunction::emitAArch64SVEBuiltinExpr(), and clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr().
|
static |
Definition at line 34 of file CIRGenBuiltinAArch64.cpp.
References cir::CIRBaseBuilderTy::createNUWAMul(), clang::CIRGen::CIRGenBuilderTy::emitIntrinsicCallOp(), and clang::CIRGen::CIRGenBuilderTy::getUInt64().
Referenced by clang::CIRGen::CIRGenFunction::emitAArch64SVEBuiltinExpr().
|
static |
Definition at line 876 of file CIRGenBuiltinAArch64.cpp.
Referenced by clang::CIRGen::CIRGenFunction::emitAArch64SVEBuiltinExpr(), and clang::CIRGen::CIRGenFunction::emitSVEPredicateCast().
|
static |
Definition at line 481 of file CIRGenBuiltinAArch64.cpp.
References clang::NeonTypeFlags::BFloat16, clang::CIRGen::CIRGenTypeCache::doubleTy, clang::CIRGen::CIRGenModule::errorNYI(), clang::NeonTypeFlags::Float16, clang::NeonTypeFlags::Float32, clang::NeonTypeFlags::Float64, clang::CIRGen::CIRGenTypeCache::floatTy, clang::CIRGen::CIRGenFunction::getCIRGenModule(), clang::NeonTypeFlags::getEltType(), clang::NeonTypeFlags::Int16, clang::NeonTypeFlags::Int32, clang::NeonTypeFlags::Int64, clang::NeonTypeFlags::Int8, clang::NeonTypeFlags::isQuad(), clang::NeonTypeFlags::isUnsigned(), clang::NeonTypeFlags::MFloat8, clang::NeonTypeFlags::Poly128, clang::NeonTypeFlags::Poly16, clang::NeonTypeFlags::Poly64, clang::NeonTypeFlags::Poly8, clang::CIRGen::CIRGenTypeCache::sInt16Ty, clang::CIRGen::CIRGenTypeCache::sInt32Ty, clang::CIRGen::CIRGenTypeCache::sInt64Ty, clang::CIRGen::CIRGenTypeCache::sInt8Ty, clang::CIRGen::CIRGenTypeCache::uInt16Ty, clang::CIRGen::CIRGenTypeCache::uInt32Ty, clang::CIRGen::CIRGenTypeCache::uInt64Ty, and clang::CIRGen::CIRGenTypeCache::uInt8Ty.
Referenced by clang::CIRGen::CIRGenFunction::emitAArch64BuiltinExpr(), and emitCommonNeonBuiltinExpr().
|
static |
Definition at line 923 of file CIRGenBuiltinAArch64.cpp.
Referenced by clang::CIRGen::CIRGenFunction::emitAArch64SVEBuiltinExpr().
|
static |
Definition at line 961 of file CIRGenBuiltinAArch64.cpp.
References clang::CIRGen::CIRGenModule::getDataLayout(), cir::CIRDataLayout::getTypeSizeInBits(), and sveBitsPerBlock.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64SVEBuiltinExpr(), clang::CIRGen::CIRGenFunction::emitAArch64SVEBuiltinExpr(), clang::CodeGen::CodeGenFunction::EmitSMELd1St1(), and clang::CodeGen::CodeGenFunction::EmitSVEPrefetchLoad().
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. TODO(cir): Share this with ARM.cpp
Definition at line 977 of file CIRGenBuiltinAArch64.cpp.
Referenced by clang::CIRGen::CIRGenFunction::emitAArch64BuiltinExpr().
|
static |
Definition at line 100 of file CIRGenBuiltinAArch64.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), and clang::CIRGen::CIRGenFunction::emitAArch64BuiltinExpr().
Definition at line 424 of file CIRGenBuiltinAArch64.cpp.
Referenced by clang::CIRGen::CIRGenFunction::emitAArch64BuiltinExpr().
|
static |
Definition at line 418 of file CIRGenBuiltinAArch64.cpp.
Referenced by clang::CIRGen::CIRGenFunction::emitAArch64SVEBuiltinExpr().
Definition at line 425 of file CIRGenBuiltinAArch64.cpp.
Referenced by clang::CIRGen::CIRGenFunction::emitAArch64SVEBuiltinExpr().
Definition at line 1345 of file CIRGenBuiltinAArch64.cpp.
Referenced by clang::CIRGen::CIRGenFunction::emitAArch64BuiltinExpr().
|
constexpr |
Definition at line 959 of file CIRGenBuiltinAArch64.cpp.
Referenced by getSVEVectorForElementType().