clang
9.0.0
|
#include "CGCXXABI.h"
#include "CGObjCRuntime.h"
#include "CGOpenCLRuntime.h"
#include "CGRecordLayout.h"
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
#include "ConstantEmitter.h"
#include "PatternInit.h"
#include "TargetInfo.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.h"
#include "clang/AST/OSLog.h"
#include "clang/Basic/TargetBuiltins.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/CodeGen/CGFunctionInfo.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/Support/ConvertUTF.h"
#include "llvm/Support/ScopedPrinter.h"
#include "llvm/Support/TargetParser.h"
#include <sstream>
#include "llvm/Support/X86TargetParser.def"
Go to the source code of this file.
Macros | |
#define | NEONMAP0(NameBase) { #NameBase, NEON::BI__builtin_neon_ ## NameBase, 0, 0, 0 } |
#define | NEONMAP1(NameBase, LLVMIntrinsic, TypeModifier) |
#define | NEONMAP2(NameBase, LLVMIntrinsic, AltLLVMIntrinsic, TypeModifier) |
#define | X86_VENDOR(ENUM, STRING) .Case(STRING, {0u, static_cast<unsigned>(llvm::X86::ENUM)}) |
#define | X86_CPU_TYPE_COMPAT_WITH_ALIAS(ARCHNAME, ENUM, STR, ALIAS) .Cases(STR, ALIAS, {1u, static_cast<unsigned>(llvm::X86::ENUM)}) |
#define | X86_CPU_TYPE_COMPAT(ARCHNAME, ENUM, STR) .Case(STR, {1u, static_cast<unsigned>(llvm::X86::ENUM)}) |
#define | X86_CPU_SUBTYPE_COMPAT(ARCHNAME, ENUM, STR) .Case(STR, {2u, static_cast<unsigned>(llvm::X86::ENUM)}) |
#define | X86_FEATURE_COMPAT(VAL, ENUM, STR) .Case(STR, VAL) |
#define | INTRINSIC_X86_XSAVE_ID(NAME) |
#define | INTRINSIC_WITH_CC(NAME) |
#define | MMA_INTR(geom_op_type, layout) Intrinsic::nvvm_wmma_##geom_op_type##_##layout##_stride |
#define | MMA_LDST(n, geom_op_type) { n, MMA_INTR(geom_op_type, col), MMA_INTR(geom_op_type, row) } |
#define | MMA_VARIANTS(geom, type) |
#define | MMA_VARIANTS_I4(geom, type) |
#define | MMA_VARIANTS_B1(geom, type) |
Enumerations | |
enum | MSVCSetJmpKind |
enum | MSVCIntrin |
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 int64_t | clamp (int64_t Value, int64_t Low, int64_t High) |
static void | initializeAlloca (CodeGenFunction &CGF, AllocaInst *AI, Value *Size, unsigned AlignmentInBytes) |
static Value * | EmitToInt (CodeGenFunction &CGF, llvm::Value *V, QualType T, llvm::IntegerType *IntType) |
Emit the conversions required to turn the given value into an integer of the given size. More... | |
static Value * | EmitFromInt (CodeGenFunction &CGF, llvm::Value *V, QualType T, llvm::Type *ResultType) |
static Value * | MakeBinaryAtomicValue (CodeGenFunction &CGF, llvm::AtomicRMWInst::BinOp Kind, const CallExpr *E, AtomicOrdering Ordering=AtomicOrdering::SequentiallyConsistent) |
Utility to insert an atomic instruction based on Intrinsic::ID and the expression node. More... | |
static Value * | EmitNontemporalStore (CodeGenFunction &CGF, const CallExpr *E) |
static Value * | EmitNontemporalLoad (CodeGenFunction &CGF, const CallExpr *E) |
static RValue | EmitBinaryAtomic (CodeGenFunction &CGF, llvm::AtomicRMWInst::BinOp Kind, const CallExpr *E) |
static RValue | EmitBinaryAtomicPost (CodeGenFunction &CGF, llvm::AtomicRMWInst::BinOp Kind, const CallExpr *E, Instruction::BinaryOps Op, bool Invert=false) |
Utility to insert an atomic instruction based Intrinsic::ID and the expression node, where the return value is the result of the operation. More... | |
static Value * | MakeAtomicCmpXchgValue (CodeGenFunction &CGF, const CallExpr *E, bool ReturnBool) |
Utility to insert an atomic cmpxchg instruction. More... | |
static Value * | EmitAtomicCmpXchgForMSIntrin (CodeGenFunction &CGF, const CallExpr *E, AtomicOrdering SuccessOrdering=AtomicOrdering::SequentiallyConsistent) |
This function should be invoked to emit atomic cmpxchg for Microsoft's _InterlockedCompareExchange* intrinsics which have the following signature: T _InterlockedCompareExchange(T volatile *Destination, T Exchange, T Comparand);. More... | |
static Value * | EmitAtomicIncrementValue (CodeGenFunction &CGF, const CallExpr *E, AtomicOrdering Ordering=AtomicOrdering::SequentiallyConsistent) |
static Value * | EmitAtomicDecrementValue (CodeGenFunction &CGF, const CallExpr *E, AtomicOrdering Ordering=AtomicOrdering::SequentiallyConsistent) |
static Value * | EmitISOVolatileLoad (CodeGenFunction &CGF, const CallExpr *E) |
static Value * | EmitISOVolatileStore (CodeGenFunction &CGF, const CallExpr *E) |
static Value * | emitUnaryBuiltin (CodeGenFunction &CGF, const CallExpr *E, unsigned IntrinsicID) |
static Value * | emitBinaryBuiltin (CodeGenFunction &CGF, const CallExpr *E, unsigned IntrinsicID) |
static Value * | emitTernaryBuiltin (CodeGenFunction &CGF, const CallExpr *E, unsigned IntrinsicID) |
static Value * | emitFPIntBuiltin (CodeGenFunction &CGF, const CallExpr *E, unsigned IntrinsicID) |
static Value * | emitFPToIntRoundBuiltin (CodeGenFunction &CGF, const CallExpr *E, unsigned IntrinsicID) |
static Value * | EmitFAbs (CodeGenFunction &CGF, Value *V) |
EmitFAbs - Emit a call to .fabs(). More... | |
static Value * | EmitSignBit (CodeGenFunction &CGF, Value *V) |
Emit the computation of the sign bit for a floating point value. More... | |
static RValue | emitLibraryCall (CodeGenFunction &CGF, const FunctionDecl *FD, const CallExpr *E, llvm::Constant *calleeValue) |
static llvm::Value * | EmitOverflowIntrinsic (CodeGenFunction &CGF, const llvm::Intrinsic::ID IntrinsicID, llvm::Value *X, llvm::Value *Y, llvm::Value *&Carry) |
Emit a call to llvm. More... | |
static Value * | emitRangedBuiltin (CodeGenFunction &CGF, unsigned IntrinsicID, int low, int high) |
static WidthAndSignedness | getIntegerWidthAndSignedness (const clang::ASTContext &context, const clang::QualType Type) |
static struct WidthAndSignedness | EncompassingIntegerType (ArrayRef< struct WidthAndSignedness > Types) |
static bool | areBOSTypesCompatible (int From, int To) |
Checks if using the result of __builtin_object_size(p, From ) in place of __builtin_object_size(p, To ) is correct. More... | |
static llvm::Value * | getDefaultBuiltinObjectSizeResult (unsigned Type, llvm::IntegerType *ResType) |
static char | bitActionToX86BTCode (BitTest::ActionKind A) |
static llvm::Value * | EmitX86BitTestIntrinsic (CodeGenFunction &CGF, BitTest BT, const CallExpr *E, Value *BitBase, Value *BitPos) |
static llvm::AtomicOrdering | getBitTestAtomicOrdering (BitTest::InterlockingKind I) |
static llvm::Value * | EmitBitTestIntrinsic (CodeGenFunction &CGF, unsigned BuiltinID, const CallExpr *E) |
Emit a _bittest* intrinsic. More... | |
static RValue | EmitMSVCRTSetJmp (CodeGenFunction &CGF, MSVCSetJmpKind SJKind, const CallExpr *E) |
MSVC handles setjmp a bit differently on different platforms. More... | |
static CanQualType | getOSLogArgType (ASTContext &C, int Size) |
Get the argument type for arguments to os_log_helper. More... | |
static bool | isSpecialMixedSignMultiply (unsigned BuiltinID, WidthAndSignedness Op1Info, WidthAndSignedness Op2Info, WidthAndSignedness ResultInfo) |
Determine if a binop is a checked mixed-sign multiply we can specialize. More... | |
static RValue | EmitCheckedMixedSignMultiply (CodeGenFunction &CGF, const clang::Expr *Op1, WidthAndSignedness Op1Info, const clang::Expr *Op2, WidthAndSignedness Op2Info, const clang::Expr *ResultArg, QualType ResultQTy, WidthAndSignedness ResultInfo) |
Emit a checked mixed-sign multiply. More... | |
static llvm::Value * | dumpRecord (CodeGenFunction &CGF, QualType RType, Value *&RecordPtr, CharUnits Align, llvm::FunctionCallee Func, int Lvl) |
static bool | TypeRequiresBuiltinLaunderImp (const ASTContext &Ctx, QualType Ty, llvm::SmallPtrSetImpl< const Decl *> &Seen) |
static bool | TypeRequiresBuiltinLaunder (CodeGenModule &CGM, QualType Ty) |
Determine if the specified type requires laundering by checking if it is a dynamic class type or contains a subobject which is a dynamic class type. More... | |
static Value * | EmitTargetArchBuiltinExpr (CodeGenFunction *CGF, unsigned BuiltinID, const CallExpr *E, llvm::Triple::ArchType Arch) |
static llvm::VectorType * | GetNeonType (CodeGenFunction *CGF, NeonTypeFlags TypeFlags, bool HasLegalHalfType=true, bool V1Ty=false) |
static llvm::VectorType * | GetFloatNeonType (CodeGenFunction *CGF, NeonTypeFlags IntTypeFlags) |
static const NeonIntrinsicInfo * | findNeonIntrinsicInMap (ArrayRef< NeonIntrinsicInfo > IntrinsicMap, unsigned BuiltinID, bool &MapProvenSorted) |
static Value * | EmitCommonNeonSISDBuiltinExpr (CodeGenFunction &CGF, const NeonIntrinsicInfo &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, bool IsRead, StringRef SysReg="") |
static bool | HasExtraNeonArgument (unsigned BuiltinID) |
Return true if BuiltinID is an overloaded Neon intrinsic with an extra argument that specifies the vector type. More... | |
static Value * | EmitAArch64TblBuiltinExpr (CodeGenFunction &CGF, unsigned BuiltinID, const CallExpr *E, SmallVectorImpl< Value *> &Ops, llvm::Triple::ArchType Arch) |
static Value * | getMaskVecValue (CodeGenFunction &CGF, Value *Mask, unsigned NumElts) |
static Value * | EmitX86MaskedStore (CodeGenFunction &CGF, ArrayRef< Value *> Ops, unsigned Align) |
static Value * | EmitX86MaskedLoad (CodeGenFunction &CGF, ArrayRef< Value *> Ops, unsigned Align) |
static Value * | EmitX86ExpandLoad (CodeGenFunction &CGF, ArrayRef< Value *> Ops) |
static Value * | EmitX86CompressExpand (CodeGenFunction &CGF, ArrayRef< Value *> Ops, bool IsCompress) |
static Value * | EmitX86CompressStore (CodeGenFunction &CGF, ArrayRef< Value *> Ops) |
static Value * | EmitX86MaskLogic (CodeGenFunction &CGF, Instruction::BinaryOps Opc, ArrayRef< Value *> Ops, bool InvertLHS=false) |
static Value * | EmitX86FunnelShift (CodeGenFunction &CGF, Value *Op0, Value *Op1, Value *Amt, bool IsRight) |
static Value * | EmitX86vpcom (CodeGenFunction &CGF, ArrayRef< Value *> Ops, bool IsSigned) |
static Value * | EmitX86Select (CodeGenFunction &CGF, Value *Mask, Value *Op0, Value *Op1) |
static Value * | EmitX86ScalarSelect (CodeGenFunction &CGF, Value *Mask, Value *Op0, Value *Op1) |
static Value * | EmitX86MaskedCompareResult (CodeGenFunction &CGF, Value *Cmp, unsigned NumElts, Value *MaskIn) |
static Value * | EmitX86MaskedCompare (CodeGenFunction &CGF, unsigned CC, bool Signed, ArrayRef< Value *> Ops) |
static Value * | EmitX86ConvertToMask (CodeGenFunction &CGF, Value *In) |
static Value * | EmitX86ConvertIntToFp (CodeGenFunction &CGF, ArrayRef< Value *> Ops, bool IsSigned) |
static Value * | EmitX86Abs (CodeGenFunction &CGF, ArrayRef< Value *> Ops) |
static Value * | EmitX86MinMax (CodeGenFunction &CGF, ICmpInst::Predicate Pred, ArrayRef< Value *> Ops) |
static Value * | EmitX86FMAExpr (CodeGenFunction &CGF, ArrayRef< Value *> Ops, unsigned BuiltinID, bool IsAddSub) |
static Value * | EmitScalarFMAExpr (CodeGenFunction &CGF, MutableArrayRef< Value *> Ops, Value *Upper, bool ZeroMask=false, unsigned PTIdx=0, bool NegAcc=false) |
static Value * | EmitX86Muldq (CodeGenFunction &CGF, bool IsSigned, ArrayRef< Value *> Ops) |
static Value * | EmitX86Ternlog (CodeGenFunction &CGF, bool ZeroMask, ArrayRef< Value *> Ops) |
static Value * | EmitX86SExtMask (CodeGenFunction &CGF, Value *Op, llvm::Type *DstTy) |
static Value * | EmitX86AddSubSatExpr (CodeGenFunction &CGF, ArrayRef< Value *> Ops, bool IsSigned, bool IsAddition) |
static Value * | EmitX86CvtBF16ToFloatExpr (CodeGenFunction &CGF, const CallExpr *E, ArrayRef< Value *> Ops) |
static Value * | EmitSystemZIntrinsicWithCC (CodeGenFunction &CGF, unsigned IntrinsicID, const CallExpr *E) |
Handle a SystemZ function in which the final argument is a pointer to an int that receives the post-instruction CC value. More... | |
Variables | |
static const NeonIntrinsicInfo | ARMSIMDIntrinsicMap [] |
static const NeonIntrinsicInfo | AArch64SIMDIntrinsicMap [] |
static const NeonIntrinsicInfo | AArch64SISDIntrinsicMap [] |
static bool | NEONSIMDIntrinsicsProvenSorted = false |
static bool | AArch64SIMDIntrinsicsProvenSorted = false |
static bool | AArch64SISDIntrinsicsProvenSorted = false |
#define INTRINSIC_WITH_CC | ( | NAME | ) |
#define INTRINSIC_X86_XSAVE_ID | ( | NAME | ) |
#define MMA_INTR | ( | geom_op_type, | |
layout | |||
) | Intrinsic::nvvm_wmma_##geom_op_type##_##layout##_stride |
Definition at line 13195 of file CGBuiltin.cpp.
#define MMA_LDST | ( | n, | |
geom_op_type | |||
) | { n, MMA_INTR(geom_op_type, col), MMA_INTR(geom_op_type, row) } |
Definition at line 13197 of file CGBuiltin.cpp.
#define MMA_VARIANTS | ( | geom, | |
type | |||
) |
#define MMA_VARIANTS_B1 | ( | geom, | |
type | |||
) |
#define MMA_VARIANTS_I4 | ( | geom, | |
type | |||
) |
#define NEONMAP0 | ( | NameBase | ) | { #NameBase, NEON::BI__builtin_neon_ ## NameBase, 0, 0, 0 } |
Definition at line 4407 of file CGBuiltin.cpp.
#define NEONMAP1 | ( | NameBase, | |
LLVMIntrinsic, | |||
TypeModifier | |||
) |
Definition at line 4410 of file CGBuiltin.cpp.
#define NEONMAP2 | ( | NameBase, | |
LLVMIntrinsic, | |||
AltLLVMIntrinsic, | |||
TypeModifier | |||
) |
Definition at line 4414 of file CGBuiltin.cpp.
#define X86_CPU_SUBTYPE_COMPAT | ( | ARCHNAME, | |
ENUM, | |||
STR | |||
) | .Case(STR, {2u, static_cast<unsigned>(llvm::X86::ENUM)}) |
#define X86_CPU_TYPE_COMPAT | ( | ARCHNAME, | |
ENUM, | |||
STR | |||
) | .Case(STR, {1u, static_cast<unsigned>(llvm::X86::ENUM)}) |
#define X86_CPU_TYPE_COMPAT_WITH_ALIAS | ( | ARCHNAME, | |
ENUM, | |||
STR, | |||
ALIAS | |||
) | .Cases(STR, ALIAS, {1u, static_cast<unsigned>(llvm::X86::ENUM)}) |
#define X86_FEATURE_COMPAT | ( | VAL, | |
ENUM, | |||
STR | |||
) | .Case(STR, VAL) |
Referenced by clang::CodeGen::CodeGenFunction::GetX86CpuSupportsMask().
#define X86_VENDOR | ( | ENUM, | |
STRING | |||
) | .Case(STRING, {0u, static_cast<unsigned>(llvm::X86::ENUM)}) |
anonymous enum |
Definition at line 4368 of file CGBuiltin.cpp.
|
strong |
Definition at line 871 of file CGBuiltin.cpp.
|
strong |
Definition at line 821 of file CGBuiltin.cpp.
|
static |
Checks if using the result of __builtin_object_size(p, From
) in place of __builtin_object_size(p, To
) is correct.
Definition at line 542 of file CGBuiltin.cpp.
Referenced by getDefaultBuiltinObjectSizeResult().
|
static |
Definition at line 685 of file CGBuiltin.cpp.
Referenced by EmitX86BitTestIntrinsic().
|
static |
Definition at line 44 of file CGBuiltin.cpp.
|
static |
Definition at line 1394 of file CGBuiltin.cpp.
References clang::Type::getAs().
|
static |
Definition at line 6749 of file CGBuiltin.cpp.
References clang::CallExpr::getArg(), clang::CodeGen::CodeGenFunction::getContext(), GetNeonType(), clang::CallExpr::getNumArgs(), clang::Expr::isIntegerConstantExpr(), and clang::CodeGen::Type.
|
static |
This function should be invoked to emit atomic cmpxchg for Microsoft's _InterlockedCompareExchange* intrinsics which have the following signature: T _InterlockedCompareExchange(T volatile *Destination, T Exchange, T Comparand);.
Whereas the llvm 'cmpxchg' instruction has the following syntax: cmpxchg *Destination, Comparand, Exchange. So we need to swap Comparand and Exchange when invoking CreateAtomicCmpXchg. That is the reason we could not use the above utility function MakeAtomicCmpXchgValue since it expects the arguments to be already swapped.
Definition at line 269 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenFunction::getContext(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::ASTContext::hasSameUnqualifiedType(), and clang::Type::isPointerType().
|
static |
|
static |
|
static |
Definition at line 167 of file CGBuiltin.cpp.
References clang::CodeGen::RValue::get(), and MakeBinaryAtomicValue().
|
static |
Utility to insert an atomic instruction based Intrinsic::ID and the expression node, where the return value is the result of the operation.
Definition at line 176 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitFromInt(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), EmitToInt(), clang::CodeGen::RValue::get(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::ASTContext::getTypeSize(), clang::ASTContext::hasSameUnqualifiedType(), clang::Type::isPointerType(), and clang::CodeGen::Type.
|
static |
Definition at line 361 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CallExpr::getArg(), and clang::CodeGen::CodeGenModule::getIntrinsic().
Referenced by clang::CodeGen::CodeGenFunction::EmitBuiltinExpr().
|
static |
Emit a _bittest* intrinsic.
These intrinsics take a pointer to an array of bits and a bit position and read and optionally modify the bit at that position. The position index can be arbitrarily large, i.e. it can be larger than 31 or 63, so we need an indexed load in the general case.
Definition at line 742 of file CGBuiltin.cpp.
References clang::prec::And, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), EmitX86BitTestIntrinsic(), clang::CallExpr::getArg(), getBitTestAtomicOrdering(), clang::CodeGen::CodeGenFunction::getTarget(), clang::TargetInfo::getTriple(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::Int8Ty, and clang::CharUnits::One().
|
static |
Emit a checked mixed-sign multiply.
This is a cheaper specialization of the generic checked-binop irgen.
Definition at line 1307 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateStore(), EmitOverflowIntrinsic(), clang::CodeGen::CodeGenFunction::EmitPointerWithAlignment(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CodeGen::CodeGenFunction::EmitToMemory(), clang::CodeGen::RValue::get(), clang::CodeGen::Address::getElementType(), clang::Type::getPointeeType(), clang::Expr::getType(), isSpecialMixedSignMultiply(), clang::QualType::isVolatileQualified(), max(), and clang::CodeGen::Type.
|
static |
Definition at line 5147 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenFunction::EmitNeonCall(), clang::CallExpr::getArg(), clang::Expr::getType(), clang::CodeGen::CodeGenFunction::LookupNeonLLVMIntrinsic(), Modifier, clang::CodeGen::CodeGenTypeCache::SizeTy, and clang::CodeGen::Type.
|
static |
EmitFAbs - Emit a call to .fabs().
Definition at line 407 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, fabs, and clang::CodeGen::CodeGenModule::getIntrinsic().
|
static |
Definition at line 384 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CallExpr::getArg(), and clang::CodeGen::CodeGenModule::getIntrinsic().
|
static |
Definition at line 395 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::Expr::getType(), and clang::CodeGen::Type.
|
static |
Definition at line 104 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::EmitFromMemory(), and V.
Referenced by EmitBinaryAtomicPost(), MakeAtomicCmpXchgValue(), and MakeBinaryAtomicValue().
|
static |
Definition at line 322 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateAlignedLoad(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::Type::getPointeeType(), clang::CharUnits::getQuantity(), clang::Expr::getType(), clang::ASTContext::getTypeSizeInChars(), and clang::CodeGen::Type.
|
static |
Definition at line 335 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateAlignedStore(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::Type::getPointeeType(), clang::CharUnits::getQuantity(), clang::Expr::getType(), clang::ASTContext::getTypeSizeInChars(), and clang::CodeGen::Type.
|
static |
Definition at line 445 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CGCallee::forDirect(), clang::CallExpr::getCallee(), and clang::Expr::getType().
|
static |
MSVC handles setjmp a bit differently on different platforms.
On every architecture except 32-bit x86, the frame address is passed. On x86, extra parameters can be passed as variadic arguments, but we always pass none.
Definition at line 831 of file CGBuiltin.cpp.
References clang::CodeGen::Type.
|
static |
Definition at line 159 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::EmitLoadOfScalar(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CallExpr::getArg(), clang::Expr::getExprLoc(), clang::Expr::getType(), clang::CodeGen::CodeGenFunction::MakeNaturalAlignAddrLValue(), and clang::CodeGen::LValue::setNontemporal().
|
static |
Definition at line 145 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CodeGen::CodeGenFunction::EmitStoreOfScalar(), clang::CodeGen::CodeGenFunction::EmitToMemory(), clang::CallExpr::getArg(), clang::Expr::getType(), clang::CodeGen::CodeGenFunction::MakeNaturalAlignAddrLValue(), and clang::CodeGen::LValue::setNontemporal().
|
static |
Emit a call to llvm.
{sadd,uadd,ssub,usub,smul,umul}.with.overflow.* depending on IntrinsicID.
Definition at line 460 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and X.
Referenced by EmitCheckedMixedSignMultiply().
|
static |
Definition at line 475 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and clang::CodeGen::CodeGenFunction::getLLVMContext().
|
static |
Definition at line 9705 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, EmitX86ScalarSelect(), fma, and clang::CodeGen::CodeGenModule::getIntrinsic().
|
static |
Emit the computation of the sign bit for a floating point value.
Returns the i1 sign bit value.
Definition at line 416 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::CodeGen::CodeGenFunction::getTarget(), clang::TargetInfo::isBigEndian(), and clang::CodeGen::Type.
|
static |
Definition at line 5885 of file CGBuiltin.cpp.
|
static |
Handle a SystemZ function in which the final argument is a pointer to an int that receives the post-instruction CC value.
At the LLVM level this is represented as a function that returns a {result, cc} pair.
Definition at line 12833 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CodeGenFunction::EmitPointerWithAlignment(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenModule::getIntrinsic(), and clang::CallExpr::getNumArgs().
|
static |
Definition at line 4210 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::EmitAArch64BuiltinExpr(), clang::CodeGen::CodeGenFunction::EmitAMDGPUBuiltinExpr(), clang::CodeGen::CodeGenFunction::EmitARMBuiltinExpr(), clang::CodeGen::CodeGenFunction::EmitHexagonBuiltinExpr(), clang::CodeGen::CodeGenFunction::EmitNVPTXBuiltinExpr(), clang::CodeGen::CodeGenFunction::EmitPPCBuiltinExpr(), clang::CodeGen::CodeGenFunction::EmitSystemZBuiltinExpr(), clang::CodeGen::CodeGenFunction::EmitWebAssemblyBuiltinExpr(), and clang::CodeGen::CodeGenFunction::EmitX86BuiltinExpr().
Referenced by clang::CodeGen::CodeGenFunction::EmitTargetBuiltinExpr().
|
static |
Definition at line 372 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CallExpr::getArg(), and clang::CodeGen::CodeGenModule::getIntrinsic().
Referenced by clang::CodeGen::CodeGenFunction::EmitBuiltinExpr().
|
static |
Emit the conversions required to turn the given value into an integer of the given size.
Definition at line 93 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::EmitToMemory(), and V.
Referenced by EmitBinaryAtomicPost(), MakeAtomicCmpXchgValue(), and MakeBinaryAtomicValue().
|
static |
Definition at line 351 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CallExpr::getArg(), and clang::CodeGen::CodeGenModule::getIntrinsic().
Referenced by clang::CodeGen::CodeGenFunction::EmitBuiltinExpr().
|
static |
Definition at line 9580 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, and clang::CodeGen::Type.
|
static |
Definition at line 9810 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CallExpr::getArg(), clang::CodeGen::CodeGenModule::getIntrinsic(), and clang::Expr::IgnoreParenCasts().
|
static |
Definition at line 695 of file CGBuiltin.cpp.
References bitActionToX86BTCode(), clang::CodeGen::CodeGenFunction::Builder, clang::CallExpr::getArg(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::Expr::getType(), clang::ASTContext::getTypeSize(), clang::CodeGen::CodeGenTypeCache::Int8Ty, and clang::CodeGen::Type.
Referenced by EmitBitTestIntrinsic().
|
static |
Definition at line 9368 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), getMaskVecValue(), and clang::CodeGen::Type.
|
static |
Definition at line 9382 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenModule::getIntrinsic(), getMaskVecValue(), and clang::CodeGen::Type.
|
static |
Definition at line 9561 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, EmitX86Select(), clang::CodeGen::CodeGenModule::getIntrinsic(), and clang::CodeGen::Type.
|
static |
Definition at line 9556 of file CGBuiltin.cpp.
References EmitX86MaskedCompare().
|
static |
Definition at line 9827 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::Expr::getType(), and clang::CodeGen::Type.
|
static |
Definition at line 9351 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenModule::getIntrinsic(), getMaskVecValue(), and clang::CodeGen::Type.
|
static |
Definition at line 9600 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, EmitX86Select(), fma, clang::CodeGen::CodeGenModule::getIntrinsic(), i, and clang::CodeGen::Type.
|
static |
Definition at line 9413 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), and clang::CodeGen::Type.
|
static |
Definition at line 9522 of file CGBuiltin.cpp.
Referenced by EmitX86ConvertToMask().
|
static |
Definition at line 9499 of file CGBuiltin.cpp.
|
static |
Definition at line 9339 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), and getMaskVecValue().
|
static |
Definition at line 9326 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), and getMaskVecValue().
|
static |
Definition at line 9399 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), and getMaskVecValue().
|
static |
Definition at line 9590 of file CGBuiltin.cpp.
|
static |
Definition at line 9745 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenTypeCache::Int64Ty, and clang::CodeGen::Type.
|
static |
Definition at line 9484 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, and clang::CodeGen::CGBuilderTy::CreateBitCast().
Referenced by EmitScalarFMAExpr().
|
static |
Definition at line 9471 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, and getMaskVecValue().
Referenced by EmitX86ConvertIntToFp(), EmitX86FMAExpr(), and EmitX86Ternlog().
|
static |
Definition at line 9802 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, and getMaskVecValue().
|
static |
Definition at line 9774 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, EmitX86Select(), clang::CodeGen::CodeGenModule::getIntrinsic(), and clang::CodeGen::Type.
|
static |
Definition at line 9431 of file CGBuiltin.cpp.
References clang::CodeGen::Type.
|
static |
Definition at line 506 of file CGBuiltin.cpp.
|
static |
Definition at line 5090 of file CGBuiltin.cpp.
|
static |
Definition at line 727 of file CGBuiltin.cpp.
Referenced by EmitBitTestIntrinsic().
|
static |
Definition at line 550 of file CGBuiltin.cpp.
References areBOSTypesCompatible(), clang::Decl::getAttr(), clang::Stmt::getBeginLoc(), clang::Expr::HasSideEffects(), clang::Expr::IgnoreParenImpCasts(), clang::Expr::tryEvaluateObjectSize(), and clang::CodeGen::Type.
|
static |
Definition at line 4295 of file CGBuiltin.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().
|
static |
Definition at line 494 of file CGBuiltin.cpp.
References clang::ASTContext::getTypeInfo(), clang::Type::isBooleanType(), clang::Type::isIntegerType(), clang::Type::isSignedIntegerType(), and clang::TypeInfo::Width.
|
static |
Definition at line 9306 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), and i.
Referenced by EmitX86CompressExpand(), EmitX86CompressStore(), EmitX86ExpandLoad(), EmitX86MaskedLoad(), EmitX86MaskedStore(), EmitX86MaskLogic(), EmitX86Select(), and EmitX86SExtMask().
|
static |
Definition at line 4260 of file CGBuiltin.cpp.
References 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::Poly128, clang::NeonTypeFlags::Poly16, clang::NeonTypeFlags::Poly64, and clang::NeonTypeFlags::Poly8.
Referenced by EmitAArch64TblBuiltinExpr(), and clang::CodeGen::CodeGenFunction::EmitCommonNeonBuiltinExpr().
|
static |
Get the argument type for arguments to os_log_helper.
Definition at line 1111 of file CGBuiltin.cpp.
References clang::ASTContext::getCanonicalType(), and clang::ASTContext::getIntTypeForBitwidth().
|
static |
Return true if BuiltinID is an overloaded Neon intrinsic with an extra argument that specifies the vector type.
Definition at line 5948 of file CGBuiltin.cpp.
|
static |
Definition at line 48 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateMemSet(), clang::CodeGen::CodeGenFunction::getLangOpts(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::CodeGen::initializationPatternFor(), clang::LangOptions::Pattern, clang::CodeGen::Type, clang::LangOptions::Uninitialized, and clang::LangOptions::Zero.
|
static |
Determine if a binop is a checked mixed-sign multiply we can specialize.
Definition at line 1295 of file CGBuiltin.cpp.
References max().
Referenced by EmitCheckedMixedSignMultiply().
|
static |
Utility to insert an atomic cmpxchg instruction.
CGF | The current codegen function. |
E | Builtin call expression to convert to cmpxchg. arg0 - address to operate on arg1 - value to compare with arg2 - new value |
ReturnBool | Specifies whether to return success flag of cmpxchg result or the old value. |
Note: In order to lower Microsoft's _InterlockedCompareExchange* intrinsics invoke the function EmitAtomicCmpXchgForMSIntrin.
Definition at line 225 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitFromInt(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), EmitToInt(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::Expr::getType(), clang::ASTContext::getTypeSize(), and clang::CodeGen::Type.
|
static |
Utility to insert an atomic instruction based on Intrinsic::ID and the expression node.
Definition at line 117 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitFromInt(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), EmitToInt(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::ASTContext::getTypeSize(), clang::ASTContext::hasSameUnqualifiedType(), clang::Type::isPointerType(), and clang::CodeGen::Type.
Referenced by EmitBinaryAtomic().
|
static |
Definition at line 5809 of file CGBuiltin.cpp.
|
static |
Determine if the specified type requires laundering by checking if it is a dynamic class type or contains a subobject which is a dynamic class type.
Definition at line 1508 of file CGBuiltin.cpp.
References clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getContext(), and TypeRequiresBuiltinLaunderImp().
|
static |
Definition at line 1480 of file CGBuiltin.cpp.
References clang::ASTContext::getAsArrayType(), clang::Type::getAsCXXRecordDecl(), and clang::ASTContext::getBaseElementType().
Referenced by TypeRequiresBuiltinLaunder().
|
static |
Definition at line 4696 of file CGBuiltin.cpp.
Definition at line 5085 of file CGBuiltin.cpp.
|
static |
Definition at line 4853 of file CGBuiltin.cpp.
Definition at line 5086 of file CGBuiltin.cpp.
|
static |
Definition at line 4419 of file CGBuiltin.cpp.
Definition at line 5083 of file CGBuiltin.cpp.