Lines Matching refs:CGF
228 ApplyNonVirtualAndVirtualOffset(CodeGenFunction &CGF, Address addr, in ApplyNonVirtualAndVirtualOffset() argument
239 baseOffset = llvm::ConstantInt::get(CGF.PtrDiffTy, in ApplyNonVirtualAndVirtualOffset()
242 baseOffset = CGF.Builder.CreateAdd(virtualOffset, baseOffset); in ApplyNonVirtualAndVirtualOffset()
250 ptr = CGF.Builder.CreateBitCast(ptr, CGF.Int8PtrTy); in ApplyNonVirtualAndVirtualOffset()
251 ptr = CGF.Builder.CreateInBoundsGEP(ptr, baseOffset, "add.ptr"); in ApplyNonVirtualAndVirtualOffset()
258 alignment = CGF.CGM.getVBaseAlignment(addr.getAlignment(), in ApplyNonVirtualAndVirtualOffset()
489 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
491 cast<CXXMethodDecl>(CGF.CurCodeDecl)->getParent(); in Emit()
495 CGF.GetAddressOfDirectBaseInCompleteClass(CGF.LoadCXXThisAddress(), in Emit()
498 CGF.EmitCXXDestructorCall(D, Dtor_Base, BaseIsVirtual, in Emit()
527 static void EmitBaseInitializer(CodeGenFunction &CGF, in EmitBaseInitializer() argument
534 Address ThisPtr = CGF.LoadCXXThisAddress(); in EmitBaseInitializer()
549 if (BaseInitializerUsesThis(CGF.getContext(), BaseInit->getInit())) in EmitBaseInitializer()
550 CGF.InitializeVTablePointers(ClassDecl); in EmitBaseInitializer()
555 CGF.GetAddressOfDirectBaseInCompleteClass(ThisPtr, ClassDecl, in EmitBaseInitializer()
564 CGF.overlapForBaseInit(ClassDecl, BaseClassDecl, isBaseVirtual)); in EmitBaseInitializer()
566 CGF.EmitAggExpr(BaseInit->getInit(), AggSlot); in EmitBaseInitializer()
568 if (CGF.CGM.getLangOpts().Exceptions && in EmitBaseInitializer()
570 CGF.EHStack.pushCleanup<CallBaseDtor>(EHCleanup, BaseClassDecl, in EmitBaseInitializer()
591 static void EmitLValueForAnyFieldInitialization(CodeGenFunction &CGF, in EmitLValueForAnyFieldInitialization() argument
599 LHS = CGF.EmitLValueForFieldInitialization(LHS, cast<FieldDecl>(I)); in EmitLValueForAnyFieldInitialization()
601 LHS = CGF.EmitLValueForFieldInitialization(LHS, Field); in EmitLValueForAnyFieldInitialization()
605 static void EmitMemberInitializer(CodeGenFunction &CGF, in EmitMemberInitializer() argument
610 ApplyDebugLocation Loc(CGF, MemberInit->getSourceLocation()); in EmitMemberInitializer()
619 llvm::Value *ThisPtr = CGF.LoadCXXThis(); in EmitMemberInitializer()
620 QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl); in EmitMemberInitializer()
625 if (CGF.CurGD.getCtorType() == Ctor_Base) in EmitMemberInitializer()
626 LHS = CGF.MakeNaturalAlignPointeeAddrLValue(ThisPtr, RecordTy); in EmitMemberInitializer()
628 LHS = CGF.MakeNaturalAlignAddrLValue(ThisPtr, RecordTy); in EmitMemberInitializer()
630 EmitLValueForAnyFieldInitialization(CGF, MemberInit, LHS); in EmitMemberInitializer()
638 = CGF.getContext().getAsConstantArrayType(FieldType); in EmitMemberInitializer()
641 QualType BaseElementTy = CGF.getContext().getBaseElementType(Array); in EmitMemberInitializer()
643 if (BaseElementTy.isPODType(CGF.getContext()) || in EmitMemberInitializer()
646 CGF.CGM.getCXXABI().getSrcArgforCopyCtor(Constructor, Args); in EmitMemberInitializer()
648 = CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(Args[SrcArgIndex])); in EmitMemberInitializer()
649 LValue ThisRHSLV = CGF.MakeNaturalAlignAddrLValue(SrcPtr, RecordTy); in EmitMemberInitializer()
650 LValue Src = CGF.EmitLValueForFieldInitialization(ThisRHSLV, Field); in EmitMemberInitializer()
653 CGF.EmitAggregateCopy(LHS, Src, FieldType, CGF.overlapForFieldInit(Field), in EmitMemberInitializer()
658 if (CGF.needsEHCleanup(dtorKind)) in EmitMemberInitializer()
659 CGF.pushEHDestroy(dtorKind, LHS.getAddress(), FieldType); in EmitMemberInitializer()
664 CGF.EmitInitializerForField(Field, LHS, MemberInit->getInit()); in EmitMemberInitializer()
881 explicit CopyingValueRepresentation(CodeGenFunction &CGF) in CopyingValueRepresentation() argument
882 : CGF(CGF), OldSanOpts(CGF.SanOpts) { in CopyingValueRepresentation()
883 CGF.SanOpts.set(SanitizerKind::Bool, false); in CopyingValueRepresentation()
884 CGF.SanOpts.set(SanitizerKind::Enum, false); in CopyingValueRepresentation()
887 CGF.SanOpts = OldSanOpts; in ~CopyingValueRepresentation()
890 CodeGenFunction &CGF; member in __anona1fee4cd0211::CopyingValueRepresentation
898 FieldMemcpyizer(CodeGenFunction &CGF, const CXXRecordDecl *ClassDecl, in FieldMemcpyizer() argument
900 : CGF(CGF), ClassDecl(ClassDecl), SrcRec(SrcRec), in FieldMemcpyizer()
901 RecLayout(CGF.getContext().getASTRecordLayout(ClassDecl)), in FieldMemcpyizer()
907 if (CGF.getContext().getLangOpts().SanitizeAddressFieldPadding) in isMemcpyableField()
923 ASTContext &Ctx = CGF.getContext(); in getMemcpySize()
945 CGF.getTypes().getCGRecordLayout(FirstField->getParent()); in emitMemcpy()
949 FirstByteOffset = CGF.getContext().toBits(BFInfo.StorageOffset); in emitMemcpy()
955 QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl); in emitMemcpy()
956 Address ThisPtr = CGF.LoadCXXThisAddress(); in emitMemcpy()
957 LValue DestLV = CGF.MakeAddrLValue(ThisPtr, RecordTy); in emitMemcpy()
958 LValue Dest = CGF.EmitLValueForFieldInitialization(DestLV, FirstField); in emitMemcpy()
959 llvm::Value *SrcPtr = CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(SrcRec)); in emitMemcpy()
960 LValue SrcLV = CGF.MakeNaturalAlignAddrLValue(SrcPtr, RecordTy); in emitMemcpy()
961 LValue Src = CGF.EmitLValueForFieldInitialization(SrcLV, FirstField); in emitMemcpy()
974 CodeGenFunction &CGF; member in __anona1fee4cd0311::FieldMemcpyizer
981 llvm::Type::getInt8PtrTy(CGF.getLLVMContext(), DPT->getAddressSpace()); in emitMemcpyIR()
982 DestPtr = CGF.Builder.CreateBitCast(DestPtr, DBP); in emitMemcpyIR()
986 llvm::Type::getInt8PtrTy(CGF.getLLVMContext(), SPT->getAddressSpace()); in emitMemcpyIR()
987 SrcPtr = CGF.Builder.CreateBitCast(SrcPtr, SBP); in emitMemcpyIR()
989 CGF.Builder.CreateMemCpy(DestPtr, SrcPtr, Size.getQuantity()); in emitMemcpyIR()
1034 static const VarDecl *getTrivialCopySource(CodeGenFunction &CGF, in getTrivialCopySource() argument
1038 return Args[CGF.CGM.getCXXABI().getSrcArgforCopyCtor(CD, Args)]; in getTrivialCopySource()
1054 !(FieldType.isTriviallyCopyableType(CGF.getContext()) || in isMemberInitMemcpyable()
1067 ConstructorMemcpyizer(CodeGenFunction &CGF, const CXXConstructorDecl *CD, in ConstructorMemcpyizer() argument
1069 : FieldMemcpyizer(CGF, CD->getParent(), getTrivialCopySource(CGF, CD, Args)), in ConstructorMemcpyizer()
1073 CGF.getLangOpts().getGC() == LangOptions::NonGC), in ConstructorMemcpyizer()
1082 EmitMemberInitializer(CGF, ConstructorDecl->getParent(), MemberInit, in addMemberInitializer()
1092 CopyingValueRepresentation CVR(CGF); in emitAggregatedInits()
1093 EmitMemberInitializer(CGF, ConstructorDecl->getParent(), in emitAggregatedInits()
1107 Address ThisPtr = CGF.LoadCXXThisAddress(); in pushEHDestructors()
1108 QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl); in pushEHDestructors()
1109 LValue LHS = CGF.MakeAddrLValue(ThisPtr, RecordTy); in pushEHDestructors()
1115 if (!CGF.needsEHCleanup(dtorKind)) in pushEHDestructors()
1118 EmitLValueForAnyFieldInitialization(CGF, MemberInit, FieldLHS); in pushEHDestructors()
1119 CGF.pushEHDestroy(dtorKind, FieldLHS.getAddress(), FieldType); in pushEHDestructors()
1210 AssignmentMemcpyizer(CodeGenFunction &CGF, const CXXMethodDecl *AD, in AssignmentMemcpyizer() argument
1212 : FieldMemcpyizer(CGF, AD->getParent(), Args[Args.size() - 1]), in AssignmentMemcpyizer()
1213 AssignmentsMemcpyable(CGF.getLangOpts().getGC() == LangOptions::NonGC) { in AssignmentMemcpyizer()
1224 CGF.EmitStmt(S); in emitAssignment()
1231 CopyingValueRepresentation CVR(CGF); in emitAggregatedStmts()
1232 CGF.EmitStmt(AggregatedStmts[0]); in emitAggregatedStmts()
1388 static bool CanSkipVTablePointerInitialization(CodeGenFunction &CGF, in CanSkipVTablePointerInitialization() argument
1399 if (!FieldHasTrivialDestructorBody(CGF.getContext(), Field)) in CanSkipVTablePointerInitialization()
1533 llvm::Value *LoadThisForDtorDelete(CodeGenFunction &CGF, in LoadThisForDtorDelete() argument
1536 return CGF.EmitScalarExpr(ThisArg); in LoadThisForDtorDelete()
1537 return CGF.LoadCXXThis(); in LoadThisForDtorDelete()
1544 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1545 const CXXDestructorDecl *Dtor = cast<CXXDestructorDecl>(CGF.CurCodeDecl); in Emit()
1547 CGF.EmitDeleteCall(Dtor->getOperatorDelete(), in Emit()
1548 LoadThisForDtorDelete(CGF, Dtor), in Emit()
1549 CGF.getContext().getTagDeclType(ClassDecl)); in Emit()
1553 void EmitConditionalDtorDeleteCall(CodeGenFunction &CGF, in EmitConditionalDtorDeleteCall() argument
1556 llvm::BasicBlock *callDeleteBB = CGF.createBasicBlock("dtor.call_delete"); in EmitConditionalDtorDeleteCall()
1557 llvm::BasicBlock *continueBB = CGF.createBasicBlock("dtor.continue"); in EmitConditionalDtorDeleteCall()
1559 = CGF.Builder.CreateIsNull(ShouldDeleteCondition); in EmitConditionalDtorDeleteCall()
1560 CGF.Builder.CreateCondBr(ShouldCallDelete, continueBB, callDeleteBB); in EmitConditionalDtorDeleteCall()
1562 CGF.EmitBlock(callDeleteBB); in EmitConditionalDtorDeleteCall()
1563 const CXXDestructorDecl *Dtor = cast<CXXDestructorDecl>(CGF.CurCodeDecl); in EmitConditionalDtorDeleteCall()
1565 CGF.EmitDeleteCall(Dtor->getOperatorDelete(), in EmitConditionalDtorDeleteCall()
1566 LoadThisForDtorDelete(CGF, Dtor), in EmitConditionalDtorDeleteCall()
1567 CGF.getContext().getTagDeclType(ClassDecl)); in EmitConditionalDtorDeleteCall()
1572 CGF.EmitBranchThroughCleanup(CGF.ReturnBlock); in EmitConditionalDtorDeleteCall()
1574 CGF.Builder.CreateBr(continueBB); in EmitConditionalDtorDeleteCall()
1576 CGF.EmitBlock(continueBB); in EmitConditionalDtorDeleteCall()
1588 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1589 EmitConditionalDtorDeleteCall(CGF, ShouldDeleteCondition, in Emit()
1605 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1607 Address thisValue = CGF.LoadCXXThisAddress(); in Emit()
1608 QualType RecordTy = CGF.getContext().getTagDeclType(field->getParent()); in Emit()
1609 LValue ThisLV = CGF.MakeAddrLValue(thisValue, RecordTy); in Emit()
1610 LValue LV = CGF.EmitLValueForField(ThisLV, field); in Emit()
1613 CGF.emitDestroy(LV.getAddress(), field->getType(), destroyer, in Emit()
1618 static void EmitSanitizerDtorCallback(CodeGenFunction &CGF, llvm::Value *Ptr, in EmitSanitizerDtorCallback() argument
1620 CodeGenFunction::SanitizerScope SanScope(&CGF); in EmitSanitizerDtorCallback()
1623 llvm::Value *Args[] = {CGF.Builder.CreateBitCast(Ptr, CGF.VoidPtrTy), in EmitSanitizerDtorCallback()
1624 llvm::ConstantInt::get(CGF.SizeTy, PoisonSize)}; in EmitSanitizerDtorCallback()
1626 llvm::Type *ArgTypes[] = {CGF.VoidPtrTy, CGF.SizeTy}; in EmitSanitizerDtorCallback()
1629 llvm::FunctionType::get(CGF.VoidTy, ArgTypes, false); in EmitSanitizerDtorCallback()
1631 CGF.CGM.CreateRuntimeFunction(FnType, "__sanitizer_dtor_callback"); in EmitSanitizerDtorCallback()
1632 CGF.EmitNounwindRuntimeCall(Fn, Args); in EmitSanitizerDtorCallback()
1644 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1646 CGF.getContext().getASTRecordLayout(Dtor->getParent()); in Emit()
1653 CGF.CurFn->addFnAttr("disable-tail-calls", "true"); in Emit()
1657 ASTContext &Context = CGF.getContext(); in Emit()
1671 PoisonMembers(CGF, startIndex, Layout.getFieldCount()); in Emit()
1675 PoisonMembers(CGF, startIndex, fieldIndex); in Emit()
1688 void PoisonMembers(CodeGenFunction &CGF, unsigned layoutStartOffset, in PoisonMembers() argument
1690 ASTContext &Context = CGF.getContext(); in PoisonMembers()
1695 CGF.SizeTy, in PoisonMembers()
1699 llvm::Value *OffsetPtr = CGF.Builder.CreateGEP( in PoisonMembers()
1700 CGF.Builder.CreateBitCast(CGF.LoadCXXThis(), CGF.Int8PtrTy), in PoisonMembers()
1719 EmitSanitizerDtorCallback(CGF, OffsetPtr, PoisonSize); in PoisonMembers()
1730 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1733 ASTContext &Context = CGF.getContext(); in Emit()
1735 llvm::Value *VTablePtr = CGF.LoadCXXThis(); in Emit()
1738 Context.toCharUnitsFromBits(CGF.PointerWidthInBits).getQuantity(); in Emit()
1741 EmitSanitizerDtorCallback(CGF, VTablePtr, PoisonSize); in Emit()
1996 void CodeGenFunction::destroyCXXObject(CodeGenFunction &CGF, in destroyCXXObject() argument
2003 CGF.EmitCXXDestructorCall(dtor, Dtor_Complete, /*for vbase*/ false, in destroyCXXObject()
2056 static bool canEmitDelegateCallArgs(CodeGenFunction &CGF, in canEmitDelegateCallArgs() argument
2063 if (CGF.getTarget().getCXXABI().areArgsDestroyedLeftToRightInCallee()) { in canEmitDelegateCallArgs()
2071 CGF.CGM.getTypes().arrangeCXXConstructorCall(Args, Ctor, Type, 0, 0); in canEmitDelegateCallArgs()
2352 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
2353 CGF.EmitCXXDestructorCall(Dtor, Type, /*ForVirtualBase=*/false, in Emit()
2406 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
2407 CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete, in Emit()