Lines Matching refs:CGF

248 ApplyNonVirtualAndVirtualOffset(CodeGenFunction &CGF, Address addr,  in ApplyNonVirtualAndVirtualOffset()  argument
260 (CGF.CGM.getTarget().getCXXABI().isItaniumFamily() && in ApplyNonVirtualAndVirtualOffset()
261 CGF.CGM.getItaniumVTableContext().isRelativeLayout()) in ApplyNonVirtualAndVirtualOffset()
262 ? CGF.Int32Ty in ApplyNonVirtualAndVirtualOffset()
263 : CGF.PtrDiffTy; in ApplyNonVirtualAndVirtualOffset()
267 baseOffset = CGF.Builder.CreateAdd(virtualOffset, baseOffset); in ApplyNonVirtualAndVirtualOffset()
276 ptr = CGF.Builder.CreateBitCast(ptr, CGF.Int8Ty->getPointerTo(AddrSpace)); in ApplyNonVirtualAndVirtualOffset()
277 ptr = CGF.Builder.CreateInBoundsGEP(CGF.Int8Ty, ptr, baseOffset, "add.ptr"); in ApplyNonVirtualAndVirtualOffset()
284 alignment = CGF.CGM.getVBaseAlignment(addr.getAlignment(), in ApplyNonVirtualAndVirtualOffset()
291 return Address(ptr, CGF.Int8Ty, alignment); in ApplyNonVirtualAndVirtualOffset()
515 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
517 cast<CXXMethodDecl>(CGF.CurCodeDecl)->getParent(); in Emit()
524 CGF.GetAddressOfDirectBaseInCompleteClass(CGF.LoadCXXThisAddress(), in Emit()
527 CGF.EmitCXXDestructorCall(D, Dtor_Base, BaseIsVirtual, in Emit()
556 static void EmitBaseInitializer(CodeGenFunction &CGF, in EmitBaseInitializer() argument
562 Address ThisPtr = CGF.LoadCXXThisAddress(); in EmitBaseInitializer()
573 if (BaseInitializerUsesThis(CGF.getContext(), BaseInit->getInit())) in EmitBaseInitializer()
574 CGF.InitializeVTablePointers(ClassDecl); in EmitBaseInitializer()
579 CGF.GetAddressOfDirectBaseInCompleteClass(ThisPtr, ClassDecl, in EmitBaseInitializer()
588 CGF.getOverlapForBaseInit(ClassDecl, BaseClassDecl, isBaseVirtual)); in EmitBaseInitializer()
590 CGF.EmitAggExpr(BaseInit->getInit(), AggSlot); in EmitBaseInitializer()
592 if (CGF.CGM.getLangOpts().Exceptions && in EmitBaseInitializer()
594 CGF.EHStack.pushCleanup<CallBaseDtor>(EHCleanup, BaseClassDecl, in EmitBaseInitializer()
615 static void EmitLValueForAnyFieldInitialization(CodeGenFunction &CGF, in EmitLValueForAnyFieldInitialization() argument
623 LHS = CGF.EmitLValueForFieldInitialization(LHS, cast<FieldDecl>(I)); in EmitLValueForAnyFieldInitialization()
625 LHS = CGF.EmitLValueForFieldInitialization(LHS, Field); in EmitLValueForAnyFieldInitialization()
629 static void EmitMemberInitializer(CodeGenFunction &CGF, in EmitMemberInitializer() argument
634 ApplyDebugLocation Loc(CGF, MemberInit->getSourceLocation()); in EmitMemberInitializer()
643 llvm::Value *ThisPtr = CGF.LoadCXXThis(); in EmitMemberInitializer()
644 QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl); in EmitMemberInitializer()
649 if (CGF.CurGD.getCtorType() == Ctor_Base) in EmitMemberInitializer()
650 LHS = CGF.MakeNaturalAlignPointeeAddrLValue(ThisPtr, RecordTy); in EmitMemberInitializer()
652 LHS = CGF.MakeNaturalAlignAddrLValue(ThisPtr, RecordTy); in EmitMemberInitializer()
654 EmitLValueForAnyFieldInitialization(CGF, MemberInit, LHS); in EmitMemberInitializer()
662 = CGF.getContext().getAsConstantArrayType(FieldType); in EmitMemberInitializer()
665 QualType BaseElementTy = CGF.getContext().getBaseElementType(Array); in EmitMemberInitializer()
667 if (BaseElementTy.isPODType(CGF.getContext()) || in EmitMemberInitializer()
670 CGF.CGM.getCXXABI().getSrcArgforCopyCtor(Constructor, Args); in EmitMemberInitializer()
672 = CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(Args[SrcArgIndex])); in EmitMemberInitializer()
673 LValue ThisRHSLV = CGF.MakeNaturalAlignAddrLValue(SrcPtr, RecordTy); in EmitMemberInitializer()
674 LValue Src = CGF.EmitLValueForFieldInitialization(ThisRHSLV, Field); in EmitMemberInitializer()
677 CGF.EmitAggregateCopy(LHS, Src, FieldType, CGF.getOverlapForFieldInit(Field), in EmitMemberInitializer()
682 if (CGF.needsEHCleanup(dtorKind)) in EmitMemberInitializer()
683 CGF.pushEHDestroy(dtorKind, LHS.getAddress(CGF), FieldType); in EmitMemberInitializer()
688 CGF.EmitInitializerForField(Field, LHS, MemberInit->getInit()); in EmitMemberInitializer()
900 explicit CopyingValueRepresentation(CodeGenFunction &CGF) in CopyingValueRepresentation() argument
901 : CGF(CGF), OldSanOpts(CGF.SanOpts) { in CopyingValueRepresentation()
902 CGF.SanOpts.set(SanitizerKind::Bool, false); in CopyingValueRepresentation()
903 CGF.SanOpts.set(SanitizerKind::Enum, false); in CopyingValueRepresentation()
906 CGF.SanOpts = OldSanOpts; in ~CopyingValueRepresentation()
909 CodeGenFunction &CGF; member in __anonda710d950211::CopyingValueRepresentation
917 FieldMemcpyizer(CodeGenFunction &CGF, const CXXRecordDecl *ClassDecl, in FieldMemcpyizer() argument
919 : CGF(CGF), ClassDecl(ClassDecl), SrcRec(SrcRec), in FieldMemcpyizer()
920 RecLayout(CGF.getContext().getASTRecordLayout(ClassDecl)), in FieldMemcpyizer()
926 if (CGF.getContext().getLangOpts().SanitizeAddressFieldPadding) in isMemcpyableField()
935 if (F->isZeroSize(CGF.getContext())) in addMemcpyableField()
944 ASTContext &Ctx = CGF.getContext(); in getMemcpySize()
966 CGF.getTypes().getCGRecordLayout(FirstField->getParent()); in emitMemcpy()
970 FirstByteOffset = CGF.getContext().toBits(BFInfo.StorageOffset); in emitMemcpy()
976 QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl); in emitMemcpy()
977 Address ThisPtr = CGF.LoadCXXThisAddress(); in emitMemcpy()
978 LValue DestLV = CGF.MakeAddrLValue(ThisPtr, RecordTy); in emitMemcpy()
979 LValue Dest = CGF.EmitLValueForFieldInitialization(DestLV, FirstField); in emitMemcpy()
980 llvm::Value *SrcPtr = CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(SrcRec)); in emitMemcpy()
981 LValue SrcLV = CGF.MakeNaturalAlignAddrLValue(SrcPtr, RecordTy); in emitMemcpy()
982 LValue Src = CGF.EmitLValueForFieldInitialization(SrcLV, FirstField); in emitMemcpy()
985 Dest.isBitField() ? Dest.getBitFieldAddress() : Dest.getAddress(CGF), in emitMemcpy()
986 Src.isBitField() ? Src.getBitFieldAddress() : Src.getAddress(CGF), in emitMemcpy()
996 CodeGenFunction &CGF; member in __anonda710d950311::FieldMemcpyizer
1001 DestPtr = CGF.Builder.CreateElementBitCast(DestPtr, CGF.Int8Ty); in emitMemcpyIR()
1002 SrcPtr = CGF.Builder.CreateElementBitCast(SrcPtr, CGF.Int8Ty); in emitMemcpyIR()
1003 CGF.Builder.CreateMemCpy(DestPtr, SrcPtr, Size.getQuantity()); in emitMemcpyIR()
1048 static const VarDecl *getTrivialCopySource(CodeGenFunction &CGF, in getTrivialCopySource() argument
1052 return Args[CGF.CGM.getCXXABI().getSrcArgforCopyCtor(CD, Args)]; in getTrivialCopySource()
1068 !(FieldType.isTriviallyCopyableType(CGF.getContext()) || in isMemberInitMemcpyable()
1081 ConstructorMemcpyizer(CodeGenFunction &CGF, const CXXConstructorDecl *CD, in ConstructorMemcpyizer() argument
1083 : FieldMemcpyizer(CGF, CD->getParent(), getTrivialCopySource(CGF, CD, Args)), in ConstructorMemcpyizer()
1087 CGF.getLangOpts().getGC() == LangOptions::NonGC), in ConstructorMemcpyizer()
1096 EmitMemberInitializer(CGF, ConstructorDecl->getParent(), MemberInit, in addMemberInitializer()
1106 CopyingValueRepresentation CVR(CGF); in emitAggregatedInits()
1107 EmitMemberInitializer(CGF, ConstructorDecl->getParent(), in emitAggregatedInits()
1121 Address ThisPtr = CGF.LoadCXXThisAddress(); in pushEHDestructors()
1122 QualType RecordTy = CGF.getContext().getTypeDeclType(ClassDecl); in pushEHDestructors()
1123 LValue LHS = CGF.MakeAddrLValue(ThisPtr, RecordTy); in pushEHDestructors()
1129 if (!CGF.needsEHCleanup(dtorKind)) in pushEHDestructors()
1132 EmitLValueForAnyFieldInitialization(CGF, MemberInit, FieldLHS); in pushEHDestructors()
1133 CGF.pushEHDestroy(dtorKind, FieldLHS.getAddress(CGF), FieldType); in pushEHDestructors()
1224 AssignmentMemcpyizer(CodeGenFunction &CGF, const CXXMethodDecl *AD, in AssignmentMemcpyizer() argument
1226 : FieldMemcpyizer(CGF, AD->getParent(), Args[Args.size() - 1]), in AssignmentMemcpyizer()
1227 AssignmentsMemcpyable(CGF.getLangOpts().getGC() == LangOptions::NonGC) { in AssignmentMemcpyizer()
1238 CGF.EmitStmt(S); in emitAssignment()
1245 CopyingValueRepresentation CVR(CGF); in emitAggregatedStmts()
1246 CGF.EmitStmt(AggregatedStmts[0]); in emitAggregatedStmts()
1415 static bool CanSkipVTablePointerInitialization(CodeGenFunction &CGF, in CanSkipVTablePointerInitialization() argument
1431 if (!FieldHasTrivialDestructorBody(CGF.getContext(), Field)) in CanSkipVTablePointerInitialization()
1568 llvm::Value *LoadThisForDtorDelete(CodeGenFunction &CGF, in LoadThisForDtorDelete() argument
1571 return CGF.EmitScalarExpr(ThisArg); in LoadThisForDtorDelete()
1572 return CGF.LoadCXXThis(); in LoadThisForDtorDelete()
1579 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1580 const CXXDestructorDecl *Dtor = cast<CXXDestructorDecl>(CGF.CurCodeDecl); in Emit()
1582 CGF.EmitDeleteCall(Dtor->getOperatorDelete(), in Emit()
1583 LoadThisForDtorDelete(CGF, Dtor), in Emit()
1584 CGF.getContext().getTagDeclType(ClassDecl)); in Emit()
1588 void EmitConditionalDtorDeleteCall(CodeGenFunction &CGF, in EmitConditionalDtorDeleteCall() argument
1591 llvm::BasicBlock *callDeleteBB = CGF.createBasicBlock("dtor.call_delete"); in EmitConditionalDtorDeleteCall()
1592 llvm::BasicBlock *continueBB = CGF.createBasicBlock("dtor.continue"); in EmitConditionalDtorDeleteCall()
1594 = CGF.Builder.CreateIsNull(ShouldDeleteCondition); in EmitConditionalDtorDeleteCall()
1595 CGF.Builder.CreateCondBr(ShouldCallDelete, continueBB, callDeleteBB); in EmitConditionalDtorDeleteCall()
1597 CGF.EmitBlock(callDeleteBB); in EmitConditionalDtorDeleteCall()
1598 const CXXDestructorDecl *Dtor = cast<CXXDestructorDecl>(CGF.CurCodeDecl); in EmitConditionalDtorDeleteCall()
1600 CGF.EmitDeleteCall(Dtor->getOperatorDelete(), in EmitConditionalDtorDeleteCall()
1601 LoadThisForDtorDelete(CGF, Dtor), in EmitConditionalDtorDeleteCall()
1602 CGF.getContext().getTagDeclType(ClassDecl)); in EmitConditionalDtorDeleteCall()
1607 CGF.EmitBranchThroughCleanup(CGF.ReturnBlock); in EmitConditionalDtorDeleteCall()
1609 CGF.Builder.CreateBr(continueBB); in EmitConditionalDtorDeleteCall()
1611 CGF.EmitBlock(continueBB); in EmitConditionalDtorDeleteCall()
1623 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1624 EmitConditionalDtorDeleteCall(CGF, ShouldDeleteCondition, in Emit()
1640 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1642 Address thisValue = CGF.LoadCXXThisAddress(); in Emit()
1643 QualType RecordTy = CGF.getContext().getTagDeclType(field->getParent()); in Emit()
1644 LValue ThisLV = CGF.MakeAddrLValue(thisValue, RecordTy); in Emit()
1645 LValue LV = CGF.EmitLValueForField(ThisLV, field); in Emit()
1648 CGF.emitDestroy(LV.getAddress(CGF), field->getType(), destroyer, in Emit()
1659 DeclAsInlineDebugLocation(CodeGenFunction &CGF, const NamedDecl &Decl) in DeclAsInlineDebugLocation() argument
1660 : DI(CGF.getDebugInfo()) { in DeclAsInlineDebugLocation()
1664 DI->setInlinedAt(CGF.Builder.getCurrentDebugLocation()); in DeclAsInlineDebugLocation()
1665 Location.emplace(CGF, Decl.getLocation()); in DeclAsInlineDebugLocation()
1677 CodeGenFunction &CGF, StringRef Name, llvm::Value *Ptr, in EmitSanitizerDtorCallback() argument
1679 CodeGenFunction::SanitizerScope SanScope(&CGF);
1683 CGF.Builder.CreateBitCast(Ptr, CGF.VoidPtrTy)};
1684 SmallVector<llvm::Type *, 2> ArgTypes = {CGF.VoidPtrTy};
1687 Args.emplace_back(llvm::ConstantInt::get(CGF.SizeTy, *PoisonSize));
1688 ArgTypes.emplace_back(CGF.SizeTy);
1692 llvm::FunctionType::get(CGF.VoidTy, ArgTypes, false);
1693 llvm::FunctionCallee Fn = CGF.CGM.CreateRuntimeFunction(FnType, Name);
1695 CGF.EmitNounwindRuntimeCall(Fn, Args);
1699 EmitSanitizerDtorFieldsCallback(CodeGenFunction &CGF, llvm::Value *Ptr, in EmitSanitizerDtorFieldsCallback() argument
1701 EmitSanitizerDtorCallback(CGF, "__sanitizer_dtor_callback_fields", Ptr, in EmitSanitizerDtorFieldsCallback()
1712 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1714 cast<CXXMethodDecl>(CGF.CurCodeDecl)->getParent(); in Emit()
1716 Address Addr = CGF.GetAddressOfDirectBaseInCompleteClass( in Emit()
1717 CGF.LoadCXXThisAddress(), DerivedClass, BaseClass, BaseIsVirtual); in Emit()
1720 CGF.getContext().getASTRecordLayout(BaseClass); in Emit()
1728 DeclAsInlineDebugLocation InlineHere(CGF, *BaseClass); in Emit()
1729 EmitSanitizerDtorFieldsCallback(CGF, Addr.getPointer(), in Emit()
1733 CGF.CurFn->addFnAttr("disable-tail-calls", "true"); in Emit()
1750 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1751 const ASTContext &Context = CGF.getContext(); in Emit()
1760 llvm::ConstantInt::get(CGF.SizeTy, PoisonStart.getQuantity()); in Emit()
1762 llvm::Value *OffsetPtr = CGF.Builder.CreateGEP( in Emit()
1763 CGF.Int8Ty, in Emit()
1764 CGF.Builder.CreateBitCast(CGF.LoadCXXThis(), CGF.Int8PtrTy), in Emit()
1780 CGF, **std::next(Dtor->getParent()->field_begin(), StartIndex)); in Emit()
1781 EmitSanitizerDtorFieldsCallback(CGF, OffsetPtr, PoisonSize.getQuantity()); in Emit()
1784 CGF.CurFn->addFnAttr("disable-tail-calls", "true"); in Emit()
1795 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1799 llvm::Value *VTablePtr = CGF.LoadCXXThis(); in Emit()
1803 EmitSanitizerDtorCallback(CGF, "__sanitizer_dtor_callback_vptr", in Emit()
2109 void CodeGenFunction::destroyCXXObject(CodeGenFunction &CGF, in destroyCXXObject() argument
2116 CGF.EmitCXXDestructorCall(dtor, Dtor_Complete, /*for vbase*/ false, in destroyCXXObject()
2171 static bool canEmitDelegateCallArgs(CodeGenFunction &CGF, in canEmitDelegateCallArgs() argument
2178 if (CGF.getTarget().getCXXABI().areArgsDestroyedLeftToRightInCallee()) { in canEmitDelegateCallArgs()
2181 if (P->needsDestruction(CGF.getContext())) in canEmitDelegateCallArgs()
2186 CGF.CGM.getTypes().arrangeCXXConstructorCall(Args, Ctor, Type, 0, 0); in canEmitDelegateCallArgs()
2466 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
2470 CGF.EmitCXXDestructorCall(Dtor, Type, /*ForVirtualBase=*/false, in Emit()
2524 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
2525 CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete, in Emit()