Lines Matching refs:llvm
48 namespace llvm {
122 typedef llvm::PointerIntPair<llvm::Value *, 1, bool> saved_type;
125 static bool needsSaving(llvm::Value *value) { in needsSaving()
130 if (!isa<llvm::Instruction>(value)) in needsSaving()
134 llvm::BasicBlock *block = cast<llvm::Instruction>(value)->getParent(); in needsSaving()
138 static saved_type save(CodeGenFunction &CGF, llvm::Value *value);
139 static llvm::Value *restore(CodeGenFunction &CGF, saved_type value);
157 llvm::Type *ElementType;
160 llvm::PointerType *EffectiveType;
258 JumpDest(llvm::BasicBlock *Block, EHScopeStack::stable_iterator Depth,
263 llvm::BasicBlock *getBlock() const { return Block; }
273 llvm::BasicBlock *Block;
284 typedef std::pair<llvm::Value *, llvm::Value *> ComplexPairTy;
304 SmallVector<llvm::CanonicalLoopInfo *, 4> OMPLoopNestStack;
310 SmallVector<llvm::ConvergenceControlInst *, 4> ConvergenceTokenStack;
317 typedef llvm::function_ref<void(CodeGenFunction &, const OMPLoopDirective &,
320 typedef llvm::function_ref<void(CodeGenFunction &, SourceLocation,
325 typedef llvm::function_ref<std::pair<LValue, LValue>(
330 typedef llvm::function_ref<std::pair<llvm::Value *, llvm::Value *>(
337 void InsertHelper(llvm::Instruction *I, const llvm::Twine &Name,
338 llvm::BasicBlock::iterator InsertPt) const;
347 llvm::Function *CurFn = nullptr;
350 llvm::SmallVector<const ParmVarDecl *, 4> FnArgs;
373 llvm::Value *FramePtr = nullptr;
384 llvm::Function *generateAwaitSuspendWrapper(Twine const &CoroName,
419 llvm::AssertingVH<llvm::Instruction> AllocaInsertPt;
430 llvm::AssertingVH<llvm::Instruction> PostAllocaInsertPt = nullptr;
435 llvm::Instruction *getPostAllocaInsertPoint() {
476 virtual void setContextValue(llvm::Value *V) { ThisValue = V; }
478 virtual llvm::Value *getContextValue() const { return ThisValue; }
500 llvm::SmallDenseMap<const VarDecl *, FieldDecl *> getCaptureFields() {
509 llvm::SmallDenseMap<const VarDecl *, FieldDecl *> CaptureFields;
513 llvm::Value *ThisValue;
640 llvm::Value *BlockPointer = nullptr;
642 llvm::DenseMap<const ValueDecl *, FieldDecl *> LambdaCaptureFields;
647 llvm::DenseMap<const VarDecl *, llvm::Value *> NRVOFlags;
650 llvm::SmallVector<char, 256> LifetimeExtendedCleanupStack;
662 llvm::Instruction *DominatingIP;
664 llvm::SmallVector<DeferredDeactivateCleanup> DeferredDeactivationCleanupStack;
696 llvm::SmallVector<const JumpDest *, 2> SEHTryEpilogueStack;
698 llvm::Instruction *CurrentFuncletPad = nullptr;
703 llvm::Value *Addr;
704 llvm::Value *Size;
707 CallLifetimeEnd(RawAddress addr, llvm::Value *size)
751 llvm::BasicBlock *EHResumeBlock = nullptr;
755 llvm::Value *ExceptionSlot = nullptr;
759 llvm::AllocaInst *EHSelectorSlot = nullptr;
767 llvm::Value *SEHInfo = nullptr;
770 llvm::BasicBlock *EmitLandingPad();
772 llvm::BasicBlock *getInvokeDestImpl();
776 llvm::BasicBlock *OMPBeforeScanBlock = nullptr;
777 llvm::BasicBlock *OMPAfterScanBlock = nullptr;
778 llvm::BasicBlock *OMPScanExitBlock = nullptr;
779 llvm::BasicBlock *OMPScanDispatch = nullptr;
815 llvm::fp::ExceptionBehavior OldExcept;
816 llvm::RoundingMode OldRounding;
869 SmallVector<llvm::Value *, 8> ObjCEHValueStack;
877 llvm::FunctionCallee BeginCatchFn;
881 llvm::AllocaInst *ForEHVar = nullptr;
885 llvm::AllocaInst *SavedExnVar = nullptr;
889 llvm::FunctionCallee beginCatchFn,
890 llvm::FunctionCallee endCatchFn, llvm::FunctionCallee rethrowFn);
899 return CurrentFuncletPad && isa<llvm::CleanupPadInst>(CurrentFuncletPad);
968 llvm::Instruction *DominatingIP =
969 Builder.CreateFlagLoad(llvm::Constant::getNullValue(Int8PtrTy));
1010 llvm::Instruction *DominatingIP);
1020 llvm::Instruction *DominatingIP);
1071 ForceCleanup(std::initializer_list<llvm::Value **> ValuesToReload = {}) {
1122 typedef llvm::DenseMap<const Decl *, Address> DeclMapTy;
1268 std::initializer_list<llvm::Value **> ValuesToReload = {});
1276 std::initializer_list<llvm::Value **> ValuesToReload = {});
1278 void ResolveBranchFixups(llvm::BasicBlock *Target);
1283 JumpDest getJumpDestInCurrentScope(llvm::BasicBlock *Target) {
1310 llvm::BasicBlock *getEHResumeBlock(bool isCleanup);
1311 llvm::BasicBlock *getEHDispatchBlock(EHScopeStack::stable_iterator scope);
1312 llvm::BasicBlock *
1317 llvm::BasicBlock *StartBB;
1337 llvm::BasicBlock *getStartingBlock() const { return StartBB; }
1344 void setBeforeOutermostConditional(llvm::Value *value, Address addr,
1347 llvm::BasicBlock *block = OutermostConditional->getStartingBlock();
1348 auto store = new llvm::StoreInst(value, addr.emitRawPointer(CGF),
1379 llvm::Instruction *Inst = nullptr;
1530 llvm::IndirectBrInst *IndirectBranch = nullptr;
1538 llvm::DenseMap<const ParmVarDecl *, EHScopeStack::stable_iterator>
1544 llvm::SmallDenseMap<const ParmVarDecl *, const ImplicitParamDecl *, 2>
1549 llvm::DenseMap<llvm::AllocaInst *, int> EscapedLocals;
1552 llvm::DenseMap<const LabelDecl *, JumpDest> LabelMap;
1574 OpenMPDirectiveKind Kind = llvm::omp::OMPD_unknown;
1592 const llvm::function_ref<void(CodeGenFunction &)> CodeGen) {
1641 llvm::Value *emitCondLikelihoodViaExpectIntrinsic(llvm::Value *Cond,
1650 llvm::MDNode *createProfileWeights(uint64_t TrueCount,
1652 llvm::MDNode *createProfileWeights(ArrayRef<uint64_t> Weights) const;
1653 llvm::MDNode *createProfileWeightsForLoop(const Stmt *Cond,
1663 void incrementProfileCounter(const Stmt *S, llvm::Value *StepV = nullptr);
1668 !CurFn->hasFnAttribute(llvm::Attribute::NoProfile));
1688 void maybeUpdateMCDCCondBitmap(const Expr *E, llvm::Value *Val);
1701 void addInstToCurrentSourceAtom(llvm::Instruction *KeyInstruction,
1702 llvm::Value *Backup);
1705 void addInstToSpecificSourceAtom(llvm::Instruction *KeyInstruction,
1706 llvm::Value *Backup, uint64_t Atom);
1710 void addInstToNewSourceAtom(llvm::Instruction *KeyInstruction,
1711 llvm::Value *Backup);
1716 llvm::SwitchInst *SwitchInsn = nullptr;
1725 llvm::BasicBlock *CaseRangeBlock = nullptr;
1729 llvm::DenseMap<const OpaqueValueExpr *, LValue> OpaqueLValues;
1730 llvm::DenseMap<const OpaqueValueExpr *, RValue> OpaqueRValues;
1738 llvm::DenseMap<const Expr *, llvm::Value *> VLASizeMap;
1742 llvm::BasicBlock *UnreachableBlock = nullptr;
1796 llvm::Value *OldCXXThisValue;
1810 ArrayInitLoopExprScope(CodeGenFunction &CGF, llvm::Value *Index)
1818 llvm::Value *OldArrayInitIndex;
1867 llvm::Value *OldCXXABIThisValue;
1868 llvm::Value *OldCXXThisValue;
1893 using InsertPointTy = llvm::OpenMPIRBuilder::InsertPointTy;
1899 llvm::CallInst *RTLFnCI;
1902 OMPAllocateCleanupTy(llvm::CallInst *RLFnCI) : RTLFnCI(RLFnCI) {
1943 llvm::BasicBlock *IPBB = IP.getBlock();
1944 llvm::BasicBlock *DestBB = IPBB->getUniqueSuccessor();
1968 llvm::BasicBlock &FiniBB, llvm::Function *Fn,
1969 ArrayRef<llvm::Value *> Args) {
1970 llvm::BasicBlock *CodeGenIPBB = CodeGenIP.getBlock();
1971 if (llvm::Instruction *CodeGenIPBBTI = CodeGenIPBB->getTerminator())
2002 llvm::AssertingVH<llvm::Instruction> OldAllocaIP;
2008 llvm::BasicBlock &RetBB)
2028 llvm::AssertingVH<llvm::Instruction> OldAllocaIP;
2033 llvm::BasicBlock &FiniBB)
2063 llvm::Value *CXXABIThisValue = nullptr;
2064 llvm::Value *CXXThisValue = nullptr;
2074 llvm::Value *ArrayInitIndex = nullptr;
2083 llvm::Value *CXXStructorImplicitParamValue = nullptr;
2099 llvm::DenseMap<const ValueDecl *, BlockByrefInfo> BlockByrefInfos;
2103 llvm::Value *RetValNullabilityPrecondition = nullptr;
2121 llvm::BasicBlock *TerminateLandingPad = nullptr;
2122 llvm::BasicBlock *TerminateHandler = nullptr;
2123 llvm::SmallVector<llvm::BasicBlock *, 2> TrapBBs;
2126 llvm::MapVector<llvm::Value *, llvm::BasicBlock *> TerminateFunclets;
2138 void EmitKernelMetadata(const FunctionDecl *FD, llvm::Function *Fn);
2167 llvm::Value *getExceptionFromSlot();
2168 llvm::Value *getSelectorFromSlot();
2172 llvm::BasicBlock *getUnreachableBlock() {
2175 new llvm::UnreachableInst(getLLVMContext(), UnreachableBlock);
2180 llvm::BasicBlock *getInvokeDest() {
2189 llvm::LLVMContext &getLLVMContext() { return CGM.getLLVMContext(); }
2200 void pushIrregularPartialArrayCleanup(llvm::Value *arrayBegin,
2205 void pushRegularPartialArrayCleanup(llvm::Value *arrayBegin,
2206 llvm::Value *arrayEnd,
2228 llvm::Value *CompletePtr,
2232 std::pair<llvm::Value *, llvm::Value *> AddrSizePair);
2235 llvm::Function *generateDestroyHelper(Address addr, QualType type,
2239 void emitArrayDestroy(llvm::Value *begin, llvm::Value *end,
2281 llvm::Constant *AtomicHelperFn);
2292 llvm::Constant *AtomicHelperFn);
2302 llvm::Value *EmitBlockLiteral(const BlockExpr *);
2304 llvm::Function *GenerateBlockFunction(GlobalDecl GD, const CGBlockInfo &Info,
2312 llvm::Constant *GenerateCopyHelperFunction(const CGBlockInfo &blockInfo);
2313 llvm::Constant *GenerateDestroyHelperFunction(const CGBlockInfo &blockInfo);
2314 llvm::Constant *
2316 llvm::Constant *
2318 llvm::Value *EmitBlockCopyAndAutorelease(llvm::Value *Block, QualType Ty);
2320 void BuildBlockRelease(llvm::Value *DeclPtr, BlockFieldFlags flags,
2347 llvm::Value *ptr);
2357 bool followForward, const llvm::Twine &name);
2363 void GenerateCode(GlobalDecl GD, llvm::Function *Fn,
2368 void markAsIgnoreThreadCheckingAtRuntime(llvm::Function *Fn);
2373 void StartFunction(GlobalDecl GD, QualType RetTy, llvm::Function *Fn,
2384 void EmitBlockWithFallThrough(llvm::BasicBlock *BB, const Stmt *S);
2389 llvm::Constant *CallOpFn = nullptr);
2396 llvm::Function **ImplFn);
2407 llvm::DebugLoc EmitReturnBlock();
2413 void StartThunk(llvm::Function *Fn, GlobalDecl GD,
2416 void EmitCallAndReturnForThunk(llvm::FunctionCallee Callee,
2422 void EmitMustTailThunk(GlobalDecl GD, llvm::Value *AdjustedThisPtr,
2423 llvm::FunctionCallee Callee);
2426 void generateThunk(llvm::Function *Fn, const CGFunctionInfo &FnInfo,
2430 llvm::Function *GenerateVarArgsThunk(llvm::Function *Fn,
2450 typedef llvm::SmallVector<VPtr, 4> VPtrsVector;
2452 typedef llvm::SmallPtrSet<const CXXRecordDecl *, 4> VisitedVirtualBasesSetTy;
2473 llvm::Value *
2474 GetVTablePtr(Address This, llvm::Type *VTableTy,
2496 void EmitVTablePtrCheckForCall(const CXXRecordDecl *RD, llvm::Value *VTable,
2501 void EmitVTablePtrCheck(const CXXRecordDecl *RD, llvm::Value *VTable,
2508 llvm::Value *VTable, SourceLocation Loc);
2516 llvm::Value *EmitVTableTypeCheckedLoad(const CXXRecordDecl *RD,
2517 llvm::Value *VTable,
2518 llvm::Type *VTableTy,
2549 llvm::ConstantInt *getUBSanFunctionTypeHash(QualType T) const;
2554 void EmitFunctionProlog(const CGFunctionInfo &FI, llvm::Function *Fn,
2566 void EmitReturnValueCheck(llvm::Value *RV);
2575 llvm::BasicBlock *getTerminateLandingPad();
2579 llvm::BasicBlock *getTerminateFunclet();
2584 llvm::BasicBlock *getTerminateHandler();
2586 llvm::Type *ConvertTypeForMem(QualType T);
2587 llvm::Type *ConvertType(QualType T);
2588 llvm::Type *convertTypeForLoadStore(QualType ASTTy,
2589 llvm::Type *LLVMTy = nullptr);
2590 llvm::Type *ConvertType(const TypeDecl *T) {
2596 llvm::Value *LoadObjCSelf();
2613 llvm::BasicBlock *createBasicBlock(const Twine &name = "",
2614 llvm::Function *parent = nullptr,
2615 llvm::BasicBlock *before = nullptr) {
2616 return llvm::BasicBlock::Create(getLLVMContext(), name, parent, before);
2626 void SimplifyForwardingBlocks(llvm::BasicBlock *BB);
2636 void EmitBlock(llvm::BasicBlock *BB, bool IsFinished = false);
2640 void EmitBlockAfterUses(llvm::BasicBlock *BB);
2650 void EmitBranch(llvm::BasicBlock *Block);
2674 llvm::BasicBlock *LHSBlock,
2675 llvm::BasicBlock *RHSBlock,
2676 llvm::BasicBlock *MergeBlock,
2679 llvm::PHINode *PtrPhi = Builder.CreatePHI(LHS.getType(), 2, "cond");
2692 llvm::Value *Ptr, QualType T, CharUnits Alignment = CharUnits::Zero(),
2715 LValue MakeAddrLValue(llvm::Value *V, QualType T, CharUnits Alignment,
2723 LValue MakeRawAddrLValue(llvm::Value *V, QualType T, CharUnits Alignment,
2739 LValue MakeNaturalAlignPointeeAddrLValue(llvm::Value *V, QualType T);
2742 MakeNaturalAlignAddrLValue(llvm::Value *V, QualType T,
2747 LValue MakeNaturalAlignPointeeRawAddrLValue(llvm::Value *V, QualType T);
2749 LValue MakeNaturalAlignRawAddrLValue(llvm::Value *V, QualType T);
2773 void Add(llvm::AllocaInst *I) { Allocas.push_back(I); }
2774 llvm::SmallVector<llvm::AllocaInst *> Take() { return std::move(Allocas); }
2777 llvm::SmallVector<llvm::AllocaInst *> Allocas;
2783 llvm::Constant *constant, bool IsAutoInit);
2789 void emitStoresForInitAfterBZero(llvm::Constant *Init, Address Loc,
2801 llvm::SmallVector<llvm::AllocaInst *> Take() { return Tracker.Take(); }
2835 llvm::AllocaInst *CreateTempAlloca(llvm::Type *Ty, const Twine &Name = "tmp",
2836 llvm::Value *ArraySize = nullptr);
2841 RawAddress CreateTempAlloca(llvm::Type *Ty, LangAS UseAddrSpace,
2843 llvm::Value *ArraySize = nullptr,
2851 RawAddress CreateTempAlloca(llvm::Type *Ty, CharUnits align,
2853 llvm::Value *ArraySize = nullptr,
2859 RawAddress CreateTempAllocaWithoutCast(llvm::Type *Ty, CharUnits align,
2861 llvm::Value *ArraySize = nullptr);
2873 RawAddress CreateDefaultAlignTempAlloca(llvm::Type *Ty,
2913 llvm::Value *EvaluateExprAsBool(const Expr *E);
2919 llvm::Value *EmitWithOriginalRHSBitfieldAssignment(const BinaryOperator *E,
2920 llvm::Value **Previous,
2925 void EmitBitfieldConversionCheck(llvm::Value *Src, QualType SrcType,
2926 llvm::Value *Dst, QualType DstType,
3045 llvm::Value *getArrayInitIndex() { return ArrayInitIndex; }
3049 static unsigned getAccessedFieldNo(unsigned Idx, const llvm::Constant *Elts);
3051 llvm::BlockAddress *GetAddrOfLabel(const LabelDecl *L);
3052 llvm::BasicBlock *GetIndirectGotoBlock();
3068 llvm::Value *EmitVAStartEnd(llvm::Value *ArgValue, bool IsStart);
3083 llvm::Value *emitArrayLength(const ArrayType *arrayType, QualType &baseType,
3093 llvm::Value *NumElts;
3096 VlaSizePair(llvm::Value *NE, QualType T) : NumElts(NE), Type(T) {}
3113 llvm::Value *LoadCXXThis() {
3123 llvm::Value *LoadCXXVTT() {
3153 llvm::Value *GetVTTParameter(GlobalDecl GD, bool ForVirtualBase,
3194 llvm::CallBase **CallOrInvoke = nullptr);
3213 llvm::Value *NumElements, Address ArrayPtr,
3225 llvm::Type *ElementTy, Address NewPtr,
3226 llvm::Value *NumElements,
3227 llvm::Value *AllocSizeWithoutCookie);
3237 llvm::Value *EmitLifetimeStart(llvm::TypeSize Size, llvm::Value *Addr);
3238 void EmitLifetimeEnd(llvm::Value *Size, llvm::Value *Addr);
3240 llvm::Value *EmitCXXNewExpr(const CXXNewExpr *E);
3243 void EmitDeleteCall(const FunctionDecl *DeleteFD, llvm::Value *Ptr,
3244 QualType DeleteTy, llvm::Value *NumElements = nullptr,
3250 llvm::Value *EmitCXXTypeidExpr(const CXXTypeidExpr *E);
3251 llvm::Value *EmitDynamicCast(Address V, const CXXDynamicCastExpr *DCE);
3305 llvm::Value *ArraySize = nullptr) {
3315 llvm::Value *ArraySize = nullptr) {
3325 void EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc, llvm::Value *V,
3328 llvm::Value *ArraySize = nullptr);
3333 void EmitBoundsCheck(const Expr *E, const Expr *Base, llvm::Value *Index,
3335 void EmitBoundsCheckImpl(const Expr *E, llvm::Value *Bound,
3336 llvm::Value *Index, QualType IndexType,
3342 llvm::DILocation *
3346 llvm::Value *GetCountedByFieldExprGEP(const Expr *Base, const FieldDecl *FD,
3350 llvm::Value *EmitLoadOfCountedByField(const Expr *Base, const FieldDecl *FD,
3355 void EmitCountedByBoundsChecking(const Expr *E, llvm::Value *Idx,
3360 llvm::Value *EmitScalarPrePostIncDec(const UnaryOperator *E, LValue LV,
3366 llvm::DebugLoc SourceLocToDebugLoc(SourceLocation Location);
3389 llvm::Value *Address);
3411 llvm::Value *NRVOFlag;
3422 llvm::Value *SizeForLifetimeMarkers;
3446 llvm::Value *getSizeForLifetimeMarkers() const {
3486 llvm::GlobalValue::LinkageTypes Linkage);
3491 llvm::Value *Value;
3496 ParamValue(llvm::Value *V) : Value(V), IsIndirect(false) {}
3500 static ParamValue forDirect(llvm::Value *value) {
3509 llvm::Value *getAnyValue() const {
3516 llvm::Value *getDirectValue() const {
3542 void emitAlignmentAssumptionCheck(llvm::Value *Ptr, QualType Ty,
3545 llvm::Value *Alignment,
3546 llvm::Value *OffsetValue,
3547 llvm::Value *TheCheck,
3548 llvm::Instruction *Assumption);
3550 void emitAlignmentAssumption(llvm::Value *PtrValue, QualType Ty,
3552 llvm::Value *Alignment,
3553 llvm::Value *OffsetValue = nullptr);
3555 void emitAlignmentAssumption(llvm::Value *PtrValue, const Expr *E,
3557 llvm::Value *Alignment,
3558 llvm::Value *OffsetValue = nullptr);
3638 void VolatilizeTryBlocks(llvm::BasicBlock *BB,
3639 llvm::SmallPtrSet<llvm::BasicBlock *, 10> &V);
3641 void pushSEHCleanup(CleanupKind kind, llvm::Function *FinallyFunc);
3645 llvm::Function *GenerateSEHFilterFunction(CodeGenFunction &ParentCGF,
3648 llvm::Function *GenerateSEHFinallyFunction(CodeGenFunction &ParentCGF,
3652 llvm::Value *ParentFP, llvm::Value *EntryEBP);
3653 llvm::Value *EmitSEHExceptionCode();
3654 llvm::Value *EmitSEHExceptionInfo();
3655 llvm::Value *EmitSEHAbnormalTermination();
3672 Address ParentVar, llvm::Value *ParentFP);
3691 llvm::Value *getTypeSize(QualType Ty);
3693 llvm::Function *EmitCapturedStmt(const CapturedStmt &S, CapturedRegionKind K);
3694 llvm::Function *GenerateCapturedStmtFunction(const CapturedStmt &S);
3696 llvm::Function *GenerateOpenMPCapturedStmtFunction(const CapturedStmt &S,
3699 SmallVectorImpl<llvm::Value *> &CapturedVars);
3713 const llvm::function_ref<void(Address, Address)> CopyGen);
3743 llvm::AtomicOrdering AO, SourceLocation Loc,
3744 const llvm::function_ref<RValue(RValue)> CommonGen);
3751 const llvm::DenseMap<const ValueDecl *, llvm::Value *>
3755 const llvm::DenseMap<const ValueDecl *, llvm::Value *>
3791 llvm::Value *IsLastIterCond = nullptr);
3800 const llvm::function_ref<llvm::Value *(CodeGenFunction &)> CondGen);
3826 typedef const llvm::function_ref<void(CodeGenFunction & /*CGF*/,
3827 llvm::Function * /*OutlinedFn*/,
4007 llvm::CanonicalLoopInfo *EmitOMPCollapsedCanonicalLoopNest(const Stmt *S,
4026 const llvm::function_ref<void(CodeGenFunction &)> BodyGen,
4027 const llvm::function_ref<void(CodeGenFunction &)> PostIncGen);
4052 const llvm::function_ref<llvm::Value *(CodeGenFunction &)> CondGen);
4059 llvm::Value *EmitBlockLiteral(const CGBlockInfo &Info);
4072 llvm::Value *Chunk = nullptr;
4086 OpenMPDirectiveKind DKind = llvm::omp::OMPD_unknown;
4089 llvm::Value *Chunk = nullptr, Expr *EUB = nullptr,
4205 llvm::Value *EmitNonNullRValueCheck(RValue RV, QualType T);
4257 llvm::AtomicOrdering AO, bool IsVolatile = false,
4262 void EmitAtomicStore(RValue rvalue, LValue lvalue, llvm::AtomicOrdering AO,
4265 std::pair<RValue, llvm::Value *> EmitAtomicCompareExchange(
4267 llvm::AtomicOrdering Success =
4268 llvm::AtomicOrdering::SequentiallyConsistent,
4269 llvm::AtomicOrdering Failure =
4270 llvm::AtomicOrdering::SequentiallyConsistent,
4275 llvm::AtomicRMWInst *emitAtomicRMWInst(
4276 llvm::AtomicRMWInst::BinOp Op, Address Addr, llvm::Value *Val,
4277 llvm::AtomicOrdering Order = llvm::AtomicOrdering::SequentiallyConsistent,
4278 llvm::SyncScope::ID SSID = llvm::SyncScope::System,
4281 void EmitAtomicUpdate(LValue LVal, llvm::AtomicOrdering AO,
4282 const llvm::function_ref<RValue(RValue)> &UpdateOp,
4287 llvm::Value *EmitToMemory(llvm::Value *Value, QualType Ty);
4291 llvm::Value *EmitFromMemory(llvm::Value *Value, QualType Ty);
4297 bool EmitScalarRangeCheck(llvm::Value *Value, QualType Ty,
4303 llvm::Value *EmitLoadOfScalar(Address Addr, bool Volatile, QualType Ty,
4311 llvm::Value *EmitLoadOfScalar(Address Addr, bool Volatile, QualType Ty,
4320 llvm::Value *EmitLoadOfScalar(LValue lvalue, SourceLocation Loc);
4325 void EmitStoreOfScalar(llvm::Value *Value, Address Addr, bool Volatile,
4333 void EmitStoreOfScalar(llvm::Value *Value, Address Addr, bool Volatile,
4343 void EmitStoreOfScalar(llvm::Value *value, LValue lvalue,
4373 llvm::Value **Result = nullptr);
4379 llvm::Value *&Result);
4386 llvm::CallBase **CallOrInvoke = nullptr);
4396 llvm::Value *EmitMatrixIndexExpr(const Expr *E);
4426 llvm::PointerIntPair<llvm::Constant *, 1, bool> ValueAndIsReference;
4427 ConstantEmission(llvm::Constant *C, bool isReference)
4432 static ConstantEmission forReference(llvm::Constant *C) {
4435 static ConstantEmission forValue(llvm::Constant *C) {
4450 llvm::Constant *getValue() const {
4458 llvm::Value *emitScalarConstant(const ConstantEmission &Constant, Expr *E);
4466 SmallVectorImpl<std::pair<Address, llvm::Value *>> &AccessList,
4469 llvm::Value *EmitIvarOffset(const ObjCInterfaceDecl *Interface,
4471 llvm::Value *EmitIvarOffsetAsPointerDiff(const ObjCInterfaceDecl *Interface,
4477 llvm::Value *ThisValue);
4484 LValue EmitLValueForIvar(QualType ObjectTy, llvm::Value *Base,
4508 llvm::CallBase **CallOrInvoke, bool IsMustTail,
4513 llvm::CallBase **CallOrInvoke = nullptr,
4519 ReturnValueSlot ReturnValue, llvm::Value *Chain = nullptr,
4520 llvm::CallBase **CallOrInvoke = nullptr,
4527 llvm::CallBase **CallOrInvoke = nullptr);
4529 llvm::CallBase **CallOrInvoke = nullptr);
4535 llvm::CallInst *EmitRuntimeCall(llvm::FunctionCallee callee,
4537 llvm::CallInst *EmitRuntimeCall(llvm::FunctionCallee callee,
4538 ArrayRef<llvm::Value *> args,
4540 llvm::CallInst *EmitNounwindRuntimeCall(llvm::FunctionCallee callee,
4542 llvm::CallInst *EmitNounwindRuntimeCall(llvm::FunctionCallee callee,
4545 llvm::CallInst *EmitNounwindRuntimeCall(llvm::FunctionCallee callee,
4546 ArrayRef<llvm::Value *> args,
4549 SmallVector<llvm::OperandBundleDef, 1>
4550 getBundlesForFunclet(llvm::Value *Callee);
4552 llvm::CallBase *EmitCallOrInvoke(llvm::FunctionCallee Callee,
4553 ArrayRef<llvm::Value *> Args,
4555 llvm::CallBase *EmitRuntimeCallOrInvoke(llvm::FunctionCallee callee,
4556 ArrayRef<llvm::Value *> args,
4558 llvm::CallBase *EmitRuntimeCallOrInvoke(llvm::FunctionCallee callee,
4560 void EmitNoreturnRuntimeCallOrInvoke(llvm::FunctionCallee callee,
4561 ArrayRef<llvm::Value *> args);
4564 NestedNameSpecifier *Qual, llvm::Type *Ty);
4575 llvm::Value *EmitPointerAuthBlendDiscriminator(llvm::Value *StorageAddress,
4576 llvm::Value *Discriminator);
4578 llvm::Value *StorageAddress,
4582 llvm::Value *EmitPointerAuthSign(const CGPointerAuthInfo &Info,
4583 llvm::Value *Pointer);
4585 llvm::Value *EmitPointerAuthAuth(const CGPointerAuthInfo &Info,
4586 llvm::Value *Pointer);
4588 llvm::Value *emitPointerAuthResign(llvm::Value *Pointer, QualType PointerType,
4592 llvm::Value *emitPointerAuthResignCall(llvm::Value *Pointer,
4598 SmallVectorImpl<llvm::OperandBundleDef> &Bundles);
4602 llvm::Value *EmitPointerAuthQualify(PointerAuthQualifier Qualifier,
4603 llvm::Value *Pointer, QualType ValueType,
4606 llvm::Value *EmitPointerAuthQualify(PointerAuthQualifier Qualifier,
4609 llvm::Value *EmitPointerAuthUnqualify(PointerAuthQualifier Qualifier,
4610 llvm::Value *Pointer,
4617 std::pair<llvm::Value *, CGPointerAuthInfo>
4620 llvm::Value *authPointerToPointerCast(llvm::Value *ResultPtr,
4627 llvm::Value *getAsNaturalPointerTo(Address Addr, QualType PointeeType) {
4656 ReturnValueSlot ReturnValue, llvm::Value *This,
4657 llvm::Value *ImplicitParam, QualType ImplicitParamTy, const CallExpr *E,
4658 CallArgList *RtlArgs, llvm::CallBase **CallOrInvoke);
4660 llvm::Value *This, QualType ThisTy,
4661 llvm::Value *ImplicitParam,
4663 llvm::CallBase **CallOrInvoke = nullptr);
4666 llvm::CallBase **CallOrInvoke = nullptr);
4670 const Expr *Base, llvm::CallBase **CallOrInvoke);
4673 const Expr *E, Address base, llvm::Value *memberPtr,
4678 llvm::CallBase **CallOrInvoke);
4683 llvm::CallBase **CallOrInvoke);
4688 llvm::CallBase **CallOrInvoke);
4706 llvm::Function *generateBuiltinOSLogHelperFunction(
4711 llvm::CallBase **CallOrInvoke);
4715 llvm::Value *EmitTargetBuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4718 llvm::Value *
4719 EmitAArch64CompareBuiltinExpr(llvm::Value *Op, llvm::Type *Ty,
4720 const llvm::CmpInst::Predicate Pred,
4721 const llvm::Twine &Name = "");
4722 llvm::Value *EmitARMBuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4724 llvm::Triple::ArchType Arch);
4725 llvm::Value *EmitARMMVEBuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4727 llvm::Triple::ArchType Arch);
4728 llvm::Value *EmitARMCDEBuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4730 llvm::Triple::ArchType Arch);
4731 llvm::Value *EmitCMSEClearRecord(llvm::Value *V, llvm::IntegerType *ITy,
4733 llvm::Value *EmitCMSEClearRecord(llvm::Value *V, llvm::ArrayType *ATy,
4736 llvm::Value *
4740 SmallVectorImpl<llvm::Value *> &Ops, Address PtrOp0,
4741 Address PtrOp1, llvm::Triple::ArchType Arch);
4743 llvm::Function *LookupNeonLLVMIntrinsic(unsigned IntrinsicID,
4744 unsigned Modifier, llvm::Type *ArgTy,
4746 llvm::Value *EmitNeonCall(llvm::Function *F,
4747 SmallVectorImpl<llvm::Value *> &O, const char *name,
4749 llvm::Value *EmitFP8NeonCall(unsigned IID, ArrayRef<llvm::Type *> Tys,
4750 SmallVectorImpl<llvm::Value *> &O,
4752 llvm::Value *EmitFP8NeonCvtCall(unsigned IID, llvm::Type *Ty0,
4753 llvm::Type *Ty1, bool Extract,
4754 SmallVectorImpl<llvm::Value *> &Ops,
4756 llvm::Value *EmitFP8NeonFDOTCall(unsigned IID, bool ExtendLaneArg,
4757 llvm::Type *RetTy,
4758 SmallVectorImpl<llvm::Value *> &Ops,
4760 llvm::Value *EmitFP8NeonFMLACall(unsigned IID, bool ExtendLaneArg,
4761 llvm::Type *RetTy,
4762 SmallVectorImpl<llvm::Value *> &Ops,
4764 llvm::Value *EmitNeonSplat(llvm::Value *V, llvm::Constant *Idx,
4765 const llvm::ElementCount &Count);
4766 llvm::Value *EmitNeonSplat(llvm::Value *V, llvm::Constant *Idx);
4767 llvm::Value *EmitNeonShiftVector(llvm::Value *V, llvm::Type *Ty,
4769 llvm::Value *EmitNeonRShiftImm(llvm::Value *Vec, llvm::Value *Amt,
4770 llvm::Type *Ty, bool usgn, const char *name);
4771 llvm::Value *vectorWrapScalar16(llvm::Value *Op);
4775 llvm::Type *SVEBuiltinMemEltTy(const SVETypeFlags &TypeFlags);
4777 SmallVector<llvm::Type *, 2>
4778 getSVEOverloadTypes(const SVETypeFlags &TypeFlags, llvm::Type *ReturnType,
4779 ArrayRef<llvm::Value *> Ops);
4780 llvm::Type *getEltType(const SVETypeFlags &TypeFlags);
4781 llvm::ScalableVectorType *getSVEType(const SVETypeFlags &TypeFlags);
4782 llvm::ScalableVectorType *getSVEPredType(const SVETypeFlags &TypeFlags);
4783 llvm::Value *EmitSVETupleSetOrGet(const SVETypeFlags &TypeFlags,
4784 ArrayRef<llvm::Value *> Ops);
4785 llvm::Value *EmitSVETupleCreate(const SVETypeFlags &TypeFlags,
4786 llvm::Type *ReturnType,
4787 ArrayRef<llvm::Value *> Ops);
4788 llvm::Value *EmitSVEAllTruePred(const SVETypeFlags &TypeFlags);
4789 llvm::Value *EmitSVEDupX(llvm::Value *Scalar);
4790 llvm::Value *EmitSVEDupX(llvm::Value *Scalar, llvm::Type *Ty);
4791 llvm::Value *EmitSVEReinterpret(llvm::Value *Val, llvm::Type *Ty);
4792 llvm::Value *EmitSVEPMull(const SVETypeFlags &TypeFlags,
4793 llvm::SmallVectorImpl<llvm::Value *> &Ops,
4795 llvm::Value *EmitSVEMovl(const SVETypeFlags &TypeFlags,
4796 llvm::ArrayRef<llvm::Value *> Ops,
4798 llvm::Value *EmitSVEPredicateCast(llvm::Value *Pred,
4799 llvm::ScalableVectorType *VTy);
4800 llvm::Value *EmitSVEPredicateTupleCast(llvm::Value *PredTuple,
4801 llvm::StructType *Ty);
4802 llvm::Value *EmitSVEGatherLoad(const SVETypeFlags &TypeFlags,
4803 llvm::SmallVectorImpl<llvm::Value *> &Ops,
4805 llvm::Value *EmitSVEScatterStore(const SVETypeFlags &TypeFlags,
4806 llvm::SmallVectorImpl<llvm::Value *> &Ops,
4808 llvm::Value *EmitSVEMaskedLoad(const CallExpr *, llvm::Type *ReturnTy,
4809 SmallVectorImpl<llvm::Value *> &Ops,
4811 llvm::Value *EmitSVEMaskedStore(const CallExpr *,
4812 SmallVectorImpl<llvm::Value *> &Ops,
4814 llvm::Value *EmitSVEPrefetchLoad(const SVETypeFlags &TypeFlags,
4815 SmallVectorImpl<llvm::Value *> &Ops,
4817 llvm::Value *EmitSVEGatherPrefetch(const SVETypeFlags &TypeFlags,
4818 SmallVectorImpl<llvm::Value *> &Ops,
4820 llvm::Value *EmitSVEStructLoad(const SVETypeFlags &TypeFlags,
4821 SmallVectorImpl<llvm::Value *> &Ops,
4823 llvm::Value *EmitSVEStructStore(const SVETypeFlags &TypeFlags,
4824 SmallVectorImpl<llvm::Value *> &Ops,
4826 llvm::Value *EmitAArch64SVEBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
4828 llvm::Value *EmitSMELd1St1(const SVETypeFlags &TypeFlags,
4829 llvm::SmallVectorImpl<llvm::Value *> &Ops,
4831 llvm::Value *EmitSMEReadWrite(const SVETypeFlags &TypeFlags,
4832 llvm::SmallVectorImpl<llvm::Value *> &Ops,
4834 llvm::Value *EmitSMEZero(const SVETypeFlags &TypeFlags,
4835 llvm::SmallVectorImpl<llvm::Value *> &Ops,
4837 llvm::Value *EmitSMELdrStr(const SVETypeFlags &TypeFlags,
4838 llvm::SmallVectorImpl<llvm::Value *> &Ops,
4842 SmallVectorImpl<llvm::Value *> &Ops,
4845 llvm::Value *EmitAArch64SMEBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
4847 llvm::Value *EmitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4848 llvm::Triple::ArchType Arch);
4849 llvm::Value *EmitBPFBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
4851 llvm::Value *BuildVector(ArrayRef<llvm::Value *> Ops);
4852 llvm::Value *EmitX86BuiltinExpr(unsigned BuiltinID, const CallExpr *E);
4853 llvm::Value *EmitPPCBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
4854 llvm::Value *EmitAMDGPUBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
4855 llvm::Value *EmitHLSLBuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4860 llvm::Function *
4863 llvm::Value *EmitDirectXBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
4864 llvm::Value *EmitSPIRVBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
4865 llvm::Value *EmitScalarOrConstFoldImmArg(unsigned ICEArguments, unsigned Idx,
4867 llvm::Value *EmitSystemZBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
4868 llvm::Value *EmitNVPTXBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
4869 llvm::Value *EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
4871 llvm::Value *EmitHexagonBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
4872 llvm::Value *EmitRISCVBuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4875 llvm::Value *EmitRISCVCpuSupports(const CallExpr *E);
4876 llvm::Value *EmitRISCVCpuSupports(ArrayRef<StringRef> FeaturesStrs);
4877 llvm::Value *EmitRISCVCpuInit();
4878 llvm::Value *EmitRISCVCpuIs(const CallExpr *E);
4879 llvm::Value *EmitRISCVCpuIs(StringRef CPUStr);
4881 void AddAMDGPUFenceAddressSpaceMMRA(llvm::Instruction *Inst,
4883 void ProcessOrderScopeAMDGCN(llvm::Value *Order, llvm::Value *Scope,
4884 llvm::AtomicOrdering &AO,
4885 llvm::SyncScope::ID &SSID);
4888 llvm::Value *EmitMSVCBuiltinExpr(MSVCIntrin BuiltinID, const CallExpr *E);
4890 llvm::Value *EmitBuiltinAvailable(const VersionTuple &Version);
4892 llvm::Value *EmitObjCProtocolExpr(const ObjCProtocolExpr *E);
4893 llvm::Value *EmitObjCStringLiteral(const ObjCStringLiteral *E);
4894 llvm::Value *EmitObjCBoxedExpr(const ObjCBoxedExpr *E);
4895 llvm::Value *EmitObjCArrayLiteral(const ObjCArrayLiteral *E);
4896 llvm::Value *EmitObjCDictionaryLiteral(const ObjCDictionaryLiteral *E);
4897 llvm::Value *
4900 llvm::Value *EmitObjCSelectorExpr(const ObjCSelectorExpr *E);
4912 void EmitARCInitWeak(Address addr, llvm::Value *value);
4914 llvm::Value *EmitARCLoadWeak(Address addr);
4915 llvm::Value *EmitARCLoadWeakRetained(Address addr);
4916 llvm::Value *EmitARCStoreWeak(Address addr, llvm::Value *value, bool ignored);
4921 llvm::Value *EmitARCRetainAutorelease(QualType type, llvm::Value *value);
4922 llvm::Value *EmitARCRetainAutoreleaseNonBlock(llvm::Value *value);
4923 llvm::Value *EmitARCStoreStrong(LValue lvalue, llvm::Value *value,
4925 llvm::Value *EmitARCStoreStrongCall(Address addr, llvm::Value *value,
4927 llvm::Value *EmitARCRetain(QualType type, llvm::Value *value);
4928 llvm::Value *EmitARCRetainNonBlock(llvm::Value *value);
4929 llvm::Value *EmitARCRetainBlock(llvm::Value *value, bool mandatory);
4931 void EmitARCRelease(llvm::Value *value, ARCPreciseLifetime_t precise);
4932 llvm::Value *EmitARCAutorelease(llvm::Value *value);
4933 llvm::Value *EmitARCAutoreleaseReturnValue(llvm::Value *value);
4934 llvm::Value *EmitARCRetainAutoreleaseReturnValue(llvm::Value *value);
4935 llvm::Value *EmitARCRetainAutoreleasedReturnValue(llvm::Value *value);
4936 llvm::Value *EmitARCUnsafeClaimAutoreleasedReturnValue(llvm::Value *value);
4938 llvm::Value *EmitObjCAutorelease(llvm::Value *value, llvm::Type *returnType);
4939 llvm::Value *EmitObjCRetainNonBlock(llvm::Value *value,
4940 llvm::Type *returnType);
4941 void EmitObjCRelease(llvm::Value *value, ARCPreciseLifetime_t precise);
4943 std::pair<LValue, llvm::Value *>
4945 std::pair<LValue, llvm::Value *> EmitARCStoreStrong(const BinaryOperator *e,
4947 std::pair<LValue, llvm::Value *>
4950 llvm::Value *EmitObjCAlloc(llvm::Value *value, llvm::Type *returnType);
4951 llvm::Value *EmitObjCAllocWithZone(llvm::Value *value,
4952 llvm::Type *returnType);
4953 llvm::Value *EmitObjCAllocInit(llvm::Value *value, llvm::Type *resultType);
4955 llvm::Value *EmitObjCThrowOperand(const Expr *expr);
4956 llvm::Value *EmitObjCConsumeObject(QualType T, llvm::Value *Ptr);
4957 llvm::Value *EmitObjCExtendObjectLifetime(QualType T, llvm::Value *Ptr);
4959 llvm::Value *EmitARCExtendBlockObject(const Expr *expr);
4960 llvm::Value *EmitARCReclaimReturnedObject(const Expr *e,
4962 llvm::Value *EmitARCRetainScalarExpr(const Expr *expr);
4963 llvm::Value *EmitARCRetainAutoreleaseScalarExpr(const Expr *expr);
4964 llvm::Value *EmitARCUnsafeUnretainedScalarExpr(const Expr *expr);
4966 void EmitARCIntrinsicUse(ArrayRef<llvm::Value *> values);
4968 void EmitARCNoopIntrinsicUse(ArrayRef<llvm::Value *> values);
4976 void EmitObjCAutoreleasePoolPop(llvm::Value *Ptr);
4977 llvm::Value *EmitObjCAutoreleasePoolPush();
4978 llvm::Value *EmitObjCMRRAutoreleasePoolPush();
4979 void EmitObjCAutoreleasePoolCleanup(llvm::Value *Ptr);
4980 void EmitObjCMRRAutoreleasePoolPop(llvm::Value *Ptr);
4993 llvm::Value *EmitScalarExpr(const Expr *E, bool IgnoreResultAssign = false);
4997 llvm::Value *EmitScalarConversion(llvm::Value *Src, QualType SrcTy,
5002 llvm::Value *EmitComplexToScalarConversion(ComplexPairTy Src, QualType SrcTy,
5024 void CreateCoercedStore(llvm::Value *Src, Address Dst, llvm::TypeSize DstSize,
5029 void EmitExtendGCLifetime(llvm::Value *object);
5047 llvm::Value *EmitPromotedScalarExpr(const Expr *E, QualType PromotionType);
5059 llvm::GlobalVariable *AddInitializerToStaticVarDecl(const VarDecl &D,
5060 llvm::GlobalVariable *GV);
5063 void EmitInvariantStart(llvm::Constant *Addr, CharUnits Size);
5067 void EmitCXXGlobalVarDeclInit(const VarDecl &D, llvm::GlobalVariable *GV,
5070 llvm::Constant *createAtExitStub(const VarDecl &VD, llvm::FunctionCallee Dtor,
5071 llvm::Constant *Addr);
5073 llvm::Function *createTLSAtExitStub(const VarDecl &VD,
5074 llvm::FunctionCallee Dtor,
5075 llvm::Constant *Addr,
5076 llvm::FunctionCallee &AtExit);
5080 void registerGlobalDtorWithAtExit(const VarDecl &D, llvm::FunctionCallee fn,
5081 llvm::Constant *addr);
5085 void registerGlobalDtorWithLLVM(const VarDecl &D, llvm::FunctionCallee fn,
5086 llvm::Constant *addr);
5089 void registerGlobalDtorWithAtExit(llvm::Constant *dtorStub);
5092 llvm::Value *unregisterGlobalDtorWithUnAtExit(llvm::Constant *dtorStub);
5099 void EmitCXXGuardedInit(const VarDecl &D, llvm::GlobalVariable *DeclPtr,
5105 void EmitCXXGuardedInitBranch(llvm::Value *NeedsInit,
5106 llvm::BasicBlock *InitBlock,
5107 llvm::BasicBlock *NoInitBlock, GuardKind Kind,
5113 GenerateCXXGlobalInitFunc(llvm::Function *Fn,
5114 ArrayRef<llvm::Function *> CXXThreadLocals,
5120 llvm::Function *Fn,
5121 ArrayRef<std::tuple<llvm::FunctionType *, llvm::WeakTrackingVH,
5122 llvm::Constant *>>
5125 void GenerateCXXGlobalVarDeclInitFunc(llvm::Function *Fn, const VarDecl *D,
5126 llvm::GlobalVariable *Addr,
5144 llvm::Value *EmitAnnotationCall(llvm::Function *AnnotationFn,
5145 llvm::Value *AnnotatedVal,
5151 void EmitVarAnnotations(const VarDecl *D, llvm::Value *V);
5184 bool ConstantFoldsToSimpleInteger(const Expr *Cond, llvm::APSInt &Result,
5199 llvm::BasicBlock *TrueBlock,
5200 llvm::BasicBlock *FalseBlock,
5210 void EmitBranchOnBoolExpr(const Expr *Cond, llvm::BasicBlock *TrueBlock,
5211 llvm::BasicBlock *FalseBlock, uint64_t TrueCount,
5218 void EmitNullabilityCheck(LValue LHS, llvm::Value *RHS, SourceLocation Loc);
5229 llvm::Value *EmitCheckedInBoundsGEP(llvm::Type *ElemTy, llvm::Value *Ptr,
5230 ArrayRef<llvm::Value *> IdxList,
5235 Address EmitCheckedInBoundsGEP(Address Addr, ArrayRef<llvm::Value *> IdxList,
5236 llvm::Type *elementType, bool SignedIndices,
5250 llvm::Value *EmitCheckedArgForBuiltin(const Expr *E, BuiltinCheckKind Kind);
5254 llvm::Value *EmitCheckedArgForAssume(const Expr *E);
5258 llvm::Constant *EmitCheckTypeDescriptor(QualType T);
5262 llvm::Value *EmitCheckValue(llvm::Value *V);
5266 llvm::Constant *EmitCheckSourceLocation(SourceLocation Loc);
5269 SmallVectorImpl<llvm::OperandBundleDef> &Bundles);
5275 EmitCheck(ArrayRef<std::pair<llvm::Value *, SanitizerKind::SanitizerOrdinal>>
5277 SanitizerHandler Check, ArrayRef<llvm::Constant *> StaticArgs,
5278 ArrayRef<llvm::Value *> DynamicArgs);
5283 llvm::Value *Cond, llvm::ConstantInt *TypeId,
5284 llvm::Value *Ptr,
5285 ArrayRef<llvm::Constant *> StaticArgs);
5293 void EmitTrapCheck(llvm::Value *Checked, SanitizerHandler CheckHandlerID,
5298 llvm::CallInst *EmitTrapCall(llvm::Intrinsic::ID IntrID);
5329 void SetFPAccuracy(llvm::Value *Val, float Accuracy);
5333 void SetSqrtFPAccuracy(llvm::Value *Val);
5337 void SetDivFPAccuracy(llvm::Value *Val);
5343 llvm::Value *emitBoolVecConversion(llvm::Value *SrcVec,
5345 const llvm::Twine &Name = "");
5347 void maybeAttachRangeForLoad(llvm::LoadInst *Load, QualType Ty,
5353 llvm::ConvergenceControlInst *emitConvergenceLoopToken(llvm::BasicBlock *BB);
5357 llvm::CallBase *addConvergenceControlToken(llvm::CallBase *Input);
5361 llvm::ConvergenceControlInst *
5362 getOrEmitConvergenceEntryToken(llvm::Function *F);
5365 llvm::MDNode *getRangeForLoadFromType(QualType Ty);
5368 void deferPlaceholderReplacement(llvm::Instruction *Old, llvm::Value *New);
5370 llvm::SmallVector<std::pair<llvm::WeakTrackingVH, llvm::Value *>, 4>
5384 llvm::Function::arg_iterator &AI);
5389 void ExpandTypeToArgs(QualType Ty, CallArg Arg, llvm::FunctionType *IRFuncTy,
5390 SmallVectorImpl<llvm::Value *> &IRCallArgs,
5393 std::pair<llvm::Value *, llvm::Type *>
5397 std::pair<llvm::Value *, llvm::Type *>
5407 llvm::Value *evaluateOrEmitBuiltinObjectSize(const Expr *E, unsigned Type,
5408 llvm::IntegerType *ResType,
5409 llvm::Value *EmittedE,
5415 llvm::Value *emitBuiltinObjectSize(const Expr *E, unsigned Type,
5416 llvm::IntegerType *ResType,
5417 llvm::Value *EmittedE, bool IsDynamic);
5419 llvm::Value *emitCountedBySize(const Expr *E, llvm::Value *EmittedE,
5420 unsigned Type, llvm::IntegerType *ResType);
5422 llvm::Value *emitCountedByMemberSize(const MemberExpr *E, const Expr *Idx,
5423 llvm::Value *EmittedE,
5426 llvm::IntegerType *ResType);
5428 llvm::Value *emitCountedByPointerSize(const ImplicitCastExpr *E,
5429 const Expr *Idx, llvm::Value *EmittedE,
5432 llvm::IntegerType *ResType);
5450 llvm::PointerUnion<const FunctionProtoType *, const ObjCMethodDecl *> P;
5457 llvm::iterator_range<CallExpr::const_arg_iterator> ArgRange,
5487 llvm::Value *LoadPassedObjectSize(const Expr *E, QualType EltTy);
5489 void EmitSanitizerStatReport(llvm::SanitizerStatKind SSK);
5492 llvm::Function *Function;
5493 llvm::SmallVector<StringRef, 8> Features;
5496 FMVResolverOption(llvm::Function *F, ArrayRef<StringRef> Feats,
5504 void EmitMultiVersionResolver(llvm::Function *Resolver,
5506 void EmitX86MultiVersionResolver(llvm::Function *Resolver,
5508 void EmitAArch64MultiVersionResolver(llvm::Function *Resolver,
5510 void EmitRISCVMultiVersionResolver(llvm::Function *Resolver,
5518 BlockByrefHelpers *buildByrefHelpers(llvm::StructType &byrefType,
5521 void AddObjCARCExceptionMetadata(llvm::Instruction *Inst);
5523 llvm::Value *GetValueForARMHint(unsigned BuiltinID);
5524 llvm::Value *EmitX86CpuIs(const CallExpr *E);
5525 llvm::Value *EmitX86CpuIs(StringRef CPUStr);
5526 llvm::Value *EmitX86CpuSupports(const CallExpr *E);
5527 llvm::Value *EmitX86CpuSupports(ArrayRef<StringRef> FeatureStrs);
5528 llvm::Value *EmitX86CpuSupports(std::array<uint32_t, 4> FeatureMask);
5529 llvm::Value *EmitX86CpuInit();
5530 llvm::Value *FormX86ResolverCondition(const FMVResolverOption &RO);
5531 llvm::Value *EmitAArch64CpuInit();
5532 llvm::Value *FormAArch64ResolverCondition(const FMVResolverOption &RO);
5533 llvm::Value *EmitAArch64CpuSupports(const CallExpr *E);
5534 llvm::Value *EmitAArch64CpuSupports(ArrayRef<StringRef> FeatureStrs);
5538 DominatingLLVMValue::save(CodeGenFunction &CGF, llvm::Value *value) {
5552 inline llvm::Value *DominatingLLVMValue::restore(CodeGenFunction &CGF,
5559 auto alloca = cast<llvm::AllocaInst>(value.getPointer());
5568 llvm::fp::ExceptionBehavior