Lines Matching refs:CGF
225 ApplyNonVirtualAndVirtualOffset(CodeGenFunction &CGF, Address addr, in ApplyNonVirtualAndVirtualOffset() argument
236 baseOffset = llvm::ConstantInt::get(CGF.PtrDiffTy, in ApplyNonVirtualAndVirtualOffset()
239 baseOffset = CGF.Builder.CreateAdd(virtualOffset, baseOffset); in ApplyNonVirtualAndVirtualOffset()
247 ptr = CGF.Builder.CreateBitCast(ptr, CGF.Int8PtrTy); in ApplyNonVirtualAndVirtualOffset()
248 ptr = CGF.Builder.CreateInBoundsGEP(ptr, baseOffset, "add.ptr"); in ApplyNonVirtualAndVirtualOffset()
255 alignment = CGF.CGM.getVBaseAlignment(addr.getAlignment(), in ApplyNonVirtualAndVirtualOffset()
482 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
484 cast<CXXMethodDecl>(CGF.CurCodeDecl)->getParent(); in Emit()
488 CGF.GetAddressOfDirectBaseInCompleteClass(CGF.LoadCXXThisAddress(), in Emit()
491 CGF.EmitCXXDestructorCall(D, Dtor_Base, BaseIsVirtual, in Emit()
520 static void EmitBaseInitializer(CodeGenFunction &CGF, in EmitBaseInitializer() argument
527 Address ThisPtr = CGF.LoadCXXThisAddress(); in EmitBaseInitializer()
542 if (BaseInitializerUsesThis(CGF.getContext(), BaseInit->getInit())) in EmitBaseInitializer()
543 CGF.InitializeVTablePointers(ClassDecl); in EmitBaseInitializer()
548 CGF.GetAddressOfDirectBaseInCompleteClass(ThisPtr, ClassDecl, in EmitBaseInitializer()
557 CGF.EmitAggExpr(BaseInit->getInit(), AggSlot); in EmitBaseInitializer()
559 if (CGF.CGM.getLangOpts().Exceptions && in EmitBaseInitializer()
561 CGF.EHStack.pushCleanup<CallBaseDtor>(EHCleanup, BaseClassDecl, in EmitBaseInitializer()
565 static void EmitAggMemberInitializer(CodeGenFunction &CGF, in EmitAggMemberInitializer() argument
579 llvm::Value *ArrayIndex = CGF.Builder.CreateLoad(ArrayIndexVar); in EmitAggMemberInitializer()
580 Dest = CGF.Builder.CreateInBoundsGEP(Dest, ArrayIndex, "destaddress"); in EmitAggMemberInitializer()
582 Next = CGF.Builder.CreateAdd(ArrayIndex, Next, "inc"); in EmitAggMemberInitializer()
583 CGF.Builder.CreateStore(Next, ArrayIndexVar); in EmitAggMemberInitializer()
586 CharUnits EltSize = CGF.getContext().getTypeSizeInChars(T); in EmitAggMemberInitializer()
591 switch (CGF.getEvaluationKind(T)) { in EmitAggMemberInitializer()
593 CGF.EmitScalarInit(Init, /*decl*/ nullptr, LV, false); in EmitAggMemberInitializer()
596 CGF.EmitComplexExprIntoLValue(Init, LV, /*isInit*/ true); in EmitAggMemberInitializer()
605 CGF.EmitAggExpr(Init, Slot); in EmitAggMemberInitializer()
613 const ConstantArrayType *Array = CGF.getContext().getAsConstantArrayType(T); in EmitAggMemberInitializer()
615 Address IndexVar = CGF.GetAddrOfLocalVar(ArrayIndexes[Index]); in EmitAggMemberInitializer()
620 CGF.Builder.CreateStore(Zero, IndexVar); in EmitAggMemberInitializer()
623 llvm::BasicBlock *CondBlock = CGF.createBasicBlock("for.cond"); in EmitAggMemberInitializer()
624 llvm::BasicBlock *AfterFor = CGF.createBasicBlock("for.end"); in EmitAggMemberInitializer()
626 CGF.EmitBlock(CondBlock); in EmitAggMemberInitializer()
628 llvm::BasicBlock *ForBody = CGF.createBasicBlock("for.body"); in EmitAggMemberInitializer()
632 llvm::Value *Counter = CGF.Builder.CreateLoad(IndexVar); in EmitAggMemberInitializer()
635 llvm::Value *IsLess = CGF.Builder.CreateICmpULT(Counter, NumElementsPtr, in EmitAggMemberInitializer()
639 CGF.Builder.CreateCondBr(IsLess, ForBody, AfterFor); in EmitAggMemberInitializer()
641 CGF.EmitBlock(ForBody); in EmitAggMemberInitializer()
642 llvm::BasicBlock *ContinueBlock = CGF.createBasicBlock("for.inc"); in EmitAggMemberInitializer()
646 EmitAggMemberInitializer(CGF, LHS, Init, ArrayIndexVar, in EmitAggMemberInitializer()
649 CGF.EmitBlock(ContinueBlock); in EmitAggMemberInitializer()
653 Counter = CGF.Builder.CreateLoad(IndexVar); in EmitAggMemberInitializer()
654 NextVal = CGF.Builder.CreateAdd(Counter, NextVal, "inc"); in EmitAggMemberInitializer()
655 CGF.Builder.CreateStore(NextVal, IndexVar); in EmitAggMemberInitializer()
658 CGF.EmitBranch(CondBlock); in EmitAggMemberInitializer()
661 CGF.EmitBlock(AfterFor, true); in EmitAggMemberInitializer()
681 static void EmitLValueForAnyFieldInitialization(CodeGenFunction &CGF, in EmitLValueForAnyFieldInitialization() argument
689 LHS = CGF.EmitLValueForFieldInitialization(LHS, cast<FieldDecl>(I)); in EmitLValueForAnyFieldInitialization()
691 LHS = CGF.EmitLValueForFieldInitialization(LHS, Field); in EmitLValueForAnyFieldInitialization()
695 static void EmitMemberInitializer(CodeGenFunction &CGF, in EmitMemberInitializer() argument
700 ApplyDebugLocation Loc(CGF, MemberInit->getSourceLocation()); in EmitMemberInitializer()
709 llvm::Value *ThisPtr = CGF.LoadCXXThis(); in EmitMemberInitializer()
710 QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl); in EmitMemberInitializer()
711 LValue LHS = CGF.MakeNaturalAlignAddrLValue(ThisPtr, RecordTy); in EmitMemberInitializer()
713 EmitLValueForAnyFieldInitialization(CGF, MemberInit, LHS); in EmitMemberInitializer()
721 = CGF.getContext().getAsConstantArrayType(FieldType); in EmitMemberInitializer()
724 QualType BaseElementTy = CGF.getContext().getBaseElementType(Array); in EmitMemberInitializer()
726 if (BaseElementTy.isPODType(CGF.getContext()) || in EmitMemberInitializer()
729 CGF.CGM.getCXXABI().getSrcArgforCopyCtor(Constructor, Args); in EmitMemberInitializer()
731 = CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(Args[SrcArgIndex])); in EmitMemberInitializer()
732 LValue ThisRHSLV = CGF.MakeNaturalAlignAddrLValue(SrcPtr, RecordTy); in EmitMemberInitializer()
733 LValue Src = CGF.EmitLValueForFieldInitialization(ThisRHSLV, Field); in EmitMemberInitializer()
736 CGF.EmitAggregateCopy(LHS.getAddress(), Src.getAddress(), FieldType, in EmitMemberInitializer()
741 if (CGF.needsEHCleanup(dtorKind)) in EmitMemberInitializer()
742 CGF.pushEHDestroy(dtorKind, LHS.getAddress(), FieldType); in EmitMemberInitializer()
750 CGF.EmitInitializerForField(Field, LHS, MemberInit->getInit(), ArrayIndexes); in EmitMemberInitializer()
978 explicit CopyingValueRepresentation(CodeGenFunction &CGF) in CopyingValueRepresentation() argument
979 : CGF(CGF), OldSanOpts(CGF.SanOpts) { in CopyingValueRepresentation()
980 CGF.SanOpts.set(SanitizerKind::Bool, false); in CopyingValueRepresentation()
981 CGF.SanOpts.set(SanitizerKind::Enum, false); in CopyingValueRepresentation()
984 CGF.SanOpts = OldSanOpts; in ~CopyingValueRepresentation()
987 CodeGenFunction &CGF; member in __anon21e20edd0211::CopyingValueRepresentation
995 FieldMemcpyizer(CodeGenFunction &CGF, const CXXRecordDecl *ClassDecl, in FieldMemcpyizer() argument
997 : CGF(CGF), ClassDecl(ClassDecl), SrcRec(SrcRec), in FieldMemcpyizer()
998 RecLayout(CGF.getContext().getASTRecordLayout(ClassDecl)), in FieldMemcpyizer()
1004 if (CGF.getContext().getLangOpts().SanitizeAddressFieldPadding) in isMemcpyableField()
1022 LastField->getBitWidthValue(CGF.getContext()) : in getMemcpySize()
1023 CGF.getContext().getTypeSize(LastField->getType()); in getMemcpySize()
1026 CGF.getContext().getCharWidth() - 1; in getMemcpySize()
1028 CGF.getContext().toCharUnitsFromBits(MemcpySizeBits); in getMemcpySize()
1042 CGF.getTypes().getCGRecordLayout(FirstField->getParent()); in emitMemcpy()
1046 FirstByteOffset = CGF.getContext().toBits(BFInfo.StorageOffset); in emitMemcpy()
1052 QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl); in emitMemcpy()
1053 Address ThisPtr = CGF.LoadCXXThisAddress(); in emitMemcpy()
1054 LValue DestLV = CGF.MakeAddrLValue(ThisPtr, RecordTy); in emitMemcpy()
1055 LValue Dest = CGF.EmitLValueForFieldInitialization(DestLV, FirstField); in emitMemcpy()
1056 llvm::Value *SrcPtr = CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(SrcRec)); in emitMemcpy()
1057 LValue SrcLV = CGF.MakeNaturalAlignAddrLValue(SrcPtr, RecordTy); in emitMemcpy()
1058 LValue Src = CGF.EmitLValueForFieldInitialization(SrcLV, FirstField); in emitMemcpy()
1071 CodeGenFunction &CGF; member in __anon21e20edd0311::FieldMemcpyizer
1078 llvm::Type::getInt8PtrTy(CGF.getLLVMContext(), DPT->getAddressSpace()); in emitMemcpyIR()
1079 DestPtr = CGF.Builder.CreateBitCast(DestPtr, DBP); in emitMemcpyIR()
1083 llvm::Type::getInt8PtrTy(CGF.getLLVMContext(), SPT->getAddressSpace()); in emitMemcpyIR()
1084 SrcPtr = CGF.Builder.CreateBitCast(SrcPtr, SBP); in emitMemcpyIR()
1086 CGF.Builder.CreateMemCpy(DestPtr, SrcPtr, Size.getQuantity()); in emitMemcpyIR()
1131 static const VarDecl *getTrivialCopySource(CodeGenFunction &CGF, in getTrivialCopySource() argument
1135 return Args[CGF.CGM.getCXXABI().getSrcArgforCopyCtor(CD, Args)]; in getTrivialCopySource()
1151 !(FieldType.isTriviallyCopyableType(CGF.getContext()) || in isMemberInitMemcpyable()
1164 ConstructorMemcpyizer(CodeGenFunction &CGF, const CXXConstructorDecl *CD, in ConstructorMemcpyizer() argument
1166 : FieldMemcpyizer(CGF, CD->getParent(), getTrivialCopySource(CGF, CD, Args)), in ConstructorMemcpyizer()
1170 CGF.getLangOpts().getGC() == LangOptions::NonGC), in ConstructorMemcpyizer()
1179 EmitMemberInitializer(CGF, ConstructorDecl->getParent(), MemberInit, in addMemberInitializer()
1189 CopyingValueRepresentation CVR(CGF); in emitAggregatedInits()
1190 EmitMemberInitializer(CGF, ConstructorDecl->getParent(), in emitAggregatedInits()
1204 Address ThisPtr = CGF.LoadCXXThisAddress(); in pushEHDestructors()
1205 QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl); in pushEHDestructors()
1206 LValue LHS = CGF.MakeAddrLValue(ThisPtr, RecordTy); in pushEHDestructors()
1212 if (!CGF.needsEHCleanup(dtorKind)) in pushEHDestructors()
1215 EmitLValueForAnyFieldInitialization(CGF, MemberInit, FieldLHS); in pushEHDestructors()
1216 CGF.pushEHDestroy(dtorKind, FieldLHS.getAddress(), FieldType); in pushEHDestructors()
1306 AssignmentMemcpyizer(CodeGenFunction &CGF, const CXXMethodDecl *AD, in AssignmentMemcpyizer() argument
1308 : FieldMemcpyizer(CGF, AD->getParent(), Args[Args.size() - 1]), in AssignmentMemcpyizer()
1309 AssignmentsMemcpyable(CGF.getLangOpts().getGC() == LangOptions::NonGC) { in AssignmentMemcpyizer()
1320 CGF.EmitStmt(S); in emitAssignment()
1327 CopyingValueRepresentation CVR(CGF); in emitAggregatedStmts()
1328 CGF.EmitStmt(AggregatedStmts[0]); in emitAggregatedStmts()
1484 static bool CanSkipVTablePointerInitialization(CodeGenFunction &CGF, in CanSkipVTablePointerInitialization() argument
1495 if (!FieldHasTrivialDestructorBody(CGF.getContext(), Field)) in CanSkipVTablePointerInitialization()
1618 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1619 const CXXDestructorDecl *Dtor = cast<CXXDestructorDecl>(CGF.CurCodeDecl); in Emit()
1621 CGF.EmitDeleteCall(Dtor->getOperatorDelete(), CGF.LoadCXXThis(), in Emit()
1622 CGF.getContext().getTagDeclType(ClassDecl)); in Emit()
1635 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1636 llvm::BasicBlock *callDeleteBB = CGF.createBasicBlock("dtor.call_delete"); in Emit()
1637 llvm::BasicBlock *continueBB = CGF.createBasicBlock("dtor.continue"); in Emit()
1639 = CGF.Builder.CreateIsNull(ShouldDeleteCondition); in Emit()
1640 CGF.Builder.CreateCondBr(ShouldCallDelete, continueBB, callDeleteBB); in Emit()
1642 CGF.EmitBlock(callDeleteBB); in Emit()
1643 const CXXDestructorDecl *Dtor = cast<CXXDestructorDecl>(CGF.CurCodeDecl); in Emit()
1645 CGF.EmitDeleteCall(Dtor->getOperatorDelete(), CGF.LoadCXXThis(), in Emit()
1646 CGF.getContext().getTagDeclType(ClassDecl)); in Emit()
1647 CGF.Builder.CreateBr(continueBB); in Emit()
1649 CGF.EmitBlock(continueBB); in Emit()
1664 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1666 Address thisValue = CGF.LoadCXXThisAddress(); in Emit()
1667 QualType RecordTy = CGF.getContext().getTagDeclType(field->getParent()); in Emit()
1668 LValue ThisLV = CGF.MakeAddrLValue(thisValue, RecordTy); in Emit()
1669 LValue LV = CGF.EmitLValueForField(ThisLV, field); in Emit()
1672 CGF.emitDestroy(LV.getAddress(), field->getType(), destroyer, in Emit()
1677 static void EmitSanitizerDtorCallback(CodeGenFunction &CGF, llvm::Value *Ptr, in EmitSanitizerDtorCallback() argument
1681 llvm::Value *Args[] = {CGF.Builder.CreateBitCast(Ptr, CGF.VoidPtrTy), in EmitSanitizerDtorCallback()
1682 llvm::ConstantInt::get(CGF.SizeTy, PoisonSize)}; in EmitSanitizerDtorCallback()
1684 llvm::Type *ArgTypes[] = {CGF.VoidPtrTy, CGF.SizeTy}; in EmitSanitizerDtorCallback()
1687 llvm::FunctionType::get(CGF.VoidTy, ArgTypes, false); in EmitSanitizerDtorCallback()
1689 CGF.CGM.CreateRuntimeFunction(FnType, "__sanitizer_dtor_callback"); in EmitSanitizerDtorCallback()
1690 CGF.EmitNounwindRuntimeCall(Fn, Args); in EmitSanitizerDtorCallback()
1702 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1704 CGF.getContext().getASTRecordLayout(Dtor->getParent()); in Emit()
1711 CGF.CurFn->addFnAttr("disable-tail-calls", "true"); in Emit()
1715 ASTContext &Context = CGF.getContext(); in Emit()
1729 PoisonMembers(CGF, startIndex, Layout.getFieldCount()); in Emit()
1733 PoisonMembers(CGF, startIndex, fieldIndex); in Emit()
1746 void PoisonMembers(CodeGenFunction &CGF, unsigned layoutStartOffset, in PoisonMembers() argument
1748 ASTContext &Context = CGF.getContext(); in PoisonMembers()
1753 CGF.SizeTy, in PoisonMembers()
1757 llvm::Value *OffsetPtr = CGF.Builder.CreateGEP( in PoisonMembers()
1758 CGF.Builder.CreateBitCast(CGF.LoadCXXThis(), CGF.Int8PtrTy), in PoisonMembers()
1777 EmitSanitizerDtorCallback(CGF, OffsetPtr, PoisonSize); in PoisonMembers()
1788 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1791 ASTContext &Context = CGF.getContext(); in Emit()
1793 llvm::Value *VTablePtr = CGF.LoadCXXThis(); in Emit()
1796 Context.toCharUnitsFromBits(CGF.PointerWidthInBits).getQuantity(); in Emit()
1799 EmitSanitizerDtorCallback(CGF, VTablePtr, PoisonSize); in Emit()
2035 void CodeGenFunction::destroyCXXObject(CodeGenFunction &CGF, in destroyCXXObject() argument
2042 CGF.EmitCXXDestructorCall(dtor, Dtor_Complete, /*for vbase*/ false, in destroyCXXObject()
2077 static bool canEmitDelegateCallArgs(CodeGenFunction &CGF, in canEmitDelegateCallArgs() argument
2084 if (CGF.getTarget().getCXXABI().areArgsDestroyedLeftToRightInCallee()) { in canEmitDelegateCallArgs()
2092 CGF.CGM.getTypes().arrangeCXXConstructorCall(Args, Ctor, Type, 0); in canEmitDelegateCallArgs()
2358 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
2359 CGF.EmitCXXDestructorCall(Dtor, Type, /*ForVirtualBase=*/false, in Emit()
2408 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
2409 CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete, in Emit()