Lines Matching refs:CGM

32 CodeGenVTables::CodeGenVTables(CodeGenModule &CGM)  in CodeGenVTables()  argument
33 : CGM(CGM), VTContext(CGM.getContext().getVTableContext()) {} in CodeGenVTables()
41 static void setThunkProperties(CodeGenModule &CGM, const ThunkInfo &Thunk, in setThunkProperties() argument
44 CGM.setFunctionLinkage(GD, ThunkFn); in setThunkProperties()
45 CGM.getCXXABI().setThunkLinkage(ThunkFn, ForVTable, GD, in setThunkProperties()
49 CGM.setGVProperties(ThunkFn, GD); in setThunkProperties()
51 if (!CGM.getCXXABI().exportThunk()) { in setThunkProperties()
56 if (CGM.supportsCOMDAT() && ThunkFn->isWeakForLinker()) in setThunkProperties()
57 ThunkFn->setComdat(CGM.getModule().getOrInsertComdat(ThunkFn->getName())); in setThunkProperties()
93 auto ClassAlign = CGF.CGM.getClassPointerAlignment(ClassDecl); in PerformReturnAdjustment()
94 ReturnValue = CGF.CGM.getCXXABI().performReturnAdjustment( in PerformReturnAdjustment()
175 llvm::Type *Ty = CGM.getTypes().GetFunctionType(FnInfo); in GenerateVarArgsThunk()
176 llvm::Value *Callee = CGM.GetAddrOfFunction(GD, Ty, /*ForVTable=*/true); in GenerateVarArgsThunk()
183 CGM.ErrorUnsupported(MD, "return-adjusting thunk with variadic arguments"); in GenerateVarArgsThunk()
205 if (CGM.ReturnTypeUsesSRet(FnInfo)) in GenerateVarArgsThunk()
212 CGM.getClassPointerAlignment(MD->getParent())); in GenerateVarArgsThunk()
224 llvm::Value *AdjustedThisPtr = CGM.getCXXABI().performThisAdjustment( in GenerateVarArgsThunk()
260 ResultType = CGM.getContext().VoidTy; in StartThunk()
261 else if (CGM.getCXXABI().HasThisReturn(GD)) in StartThunk()
263 else if (CGM.getCXXABI().hasMostDerivedReturn(GD)) in StartThunk()
264 ResultType = CGM.getContext().VoidPtrTy; in StartThunk()
270 CGM.getCXXABI().buildThisParam(*this, FunctionArgs); in StartThunk()
277 CGM.getCXXABI().addImplicitStructorParams(*this, ResultType, in StartThunk()
289 CGM.getCXXABI().EmitInstanceFunctionProlog(*this); in StartThunk()
318 Thunk ? CGM.getCXXABI().performThisAdjustment(*this, LoadCXXThisAddress(), in EmitCallAndReturnForThunk()
328 CGM.ErrorUnsupported( in EmitCallAndReturnForThunk()
334 CGM.ErrorUnsupported( in EmitCallAndReturnForThunk()
347 CGM.getCXXABI().adjustCallArgsForDestructorThunk(*this, CurGD, CallArgs); in EmitCallAndReturnForThunk()
359 const CGFunctionInfo &CallFnInfo = CGM.getTypes().arrangeCXXMethodCall( in EmitCallAndReturnForThunk()
376 QualType ResultType = CGM.getCXXABI().HasThisReturn(CurGD) in EmitCallAndReturnForThunk()
378 : CGM.getCXXABI().hasMostDerivedReturn(CurGD) in EmitCallAndReturnForThunk()
379 ? CGM.getContext().VoidPtrTy in EmitCallAndReturnForThunk()
401 CGM.getCXXABI().EmitReturnFromThunk(*this, RV, ResultType); in EmitCallAndReturnForThunk()
444 CGM.ConstructAttributeList(Callee.getCallee()->getName(), *CurFnInfo, GD, in EmitMustTailThunk()
476 Ty = CGM.getTypes().GetFunctionType(FnInfo); in generateThunk()
478 llvm::Constant *Callee = CGM.GetAddrOfFunction(GD, Ty, /*ForVTable=*/true); in generateThunk()
485 static bool shouldEmitVTableThunk(CodeGenModule &CGM, const CXXMethodDecl *MD, in shouldEmitVTableThunk() argument
489 if (CGM.getTarget().getCXXABI().isMicrosoft()) in shouldEmitVTableThunk()
497 return CGM.getCodeGenOpts().OptimizationLevel && !IsUnprototyped; in shouldEmitVTableThunk()
512 MangleContext &MCtx = CGM.getCXXABI().getMangleContext(); in maybeEmitThunk()
521 if (CGM.getContext().useAbbreviatedThunkName(GD, Name.str())) { in maybeEmitThunk()
530 llvm::Type *ThunkVTableTy = CGM.getTypes().GetFunctionTypeForVTable(GD); in maybeEmitThunk()
531 llvm::Constant *Thunk = CGM.GetAddrOfThunk(Name, ThunkVTableTy, GD); in maybeEmitThunk()
534 bool IsUnprototyped = !CGM.getTypes().isFuncTypeConvertible( in maybeEmitThunk()
536 if (!shouldEmitVTableThunk(CGM, MD, IsUnprototyped, ForVTable)) in maybeEmitThunk()
542 IsUnprototyped ? CGM.getTypes().arrangeUnprototypedMustTailThunk(MD) in maybeEmitThunk()
543 : CGM.getTypes().arrangeGlobalDeclaration(GD); in maybeEmitThunk()
544 llvm::FunctionType *ThunkFnTy = CGM.getTypes().GetFunctionType(FnInfo); in maybeEmitThunk()
557 Name.str(), &CGM.getModule()); in maybeEmitThunk()
558 CGM.SetLLVMFunctionAttributes(MD, FnInfo, ThunkFn, /*IsThunk=*/false); in maybeEmitThunk()
568 bool ABIHasKeyFunctions = CGM.getTarget().getCXXABI().hasKeyFunctions(); in maybeEmitThunk()
577 setThunkProperties(CGM, TI, ThunkFn, ForVTable, GD); in maybeEmitThunk()
588 CGM.SetLLVMFunctionAttributesForDefinition(GD.getDecl(), ThunkFn); in maybeEmitThunk()
599 switch (CGM.getTriple().getArch()) { in maybeEmitThunk()
615 CodeGenFunction(CGM).GenerateVarArgsThunk(ThunkFn, FnInfo, GD, TI); in maybeEmitThunk()
618 CodeGenFunction(CGM).generateThunk(ThunkFn, FnInfo, GD, TI, IsUnprototyped); in maybeEmitThunk()
621 setThunkProperties(CGM, TI, ThunkFn, ForVTable, GD); in maybeEmitThunk()
650 return builder.add(llvm::ConstantInt::get(CGM.Int32Ty, 0)); in addRelativeComponent()
654 llvm::Module &module = CGM.getModule(); in addRelativeComponent()
703 builder.addRelativeOffsetToPosition(CGM.Int32Ty, target, in addRelativeComponent()
707 static bool UseRelativeLayout(const CodeGenModule &CGM) { in UseRelativeLayout() argument
708 return CGM.getTarget().getCXXABI().isItaniumFamily() && in UseRelativeLayout()
709 CGM.getItaniumVTableContext().isRelativeLayout(); in UseRelativeLayout()
713 return UseRelativeLayout(CGM); in useRelativeLayout()
723 return CGM.getVTableComponentType(); in getVTableComponentType()
726 static void AddPointerLayoutOffset(const CodeGenModule &CGM, in AddPointerLayoutOffset() argument
730 llvm::ConstantInt::get(CGM.PtrDiffTy, offset.getQuantity()), in AddPointerLayoutOffset()
731 CGM.GlobalsInt8PtrTy)); in AddPointerLayoutOffset()
734 static void AddRelativeLayoutOffset(const CodeGenModule &CGM, in AddRelativeLayoutOffset() argument
737 builder.add(llvm::ConstantInt::get(CGM.Int32Ty, offset.getQuantity())); in AddRelativeLayoutOffset()
754 return addOffsetConstant(CGM, builder, component.getVCallOffset()); in addVTableComponent()
757 return addOffsetConstant(CGM, builder, component.getVBaseOffset()); in addVTableComponent()
760 return addOffsetConstant(CGM, builder, component.getOffsetToTop()); in addVTableComponent()
775 if (CGM.getLangOpts().CUDA) { in addVTableComponent()
783 CGM.getLangOpts().CUDAIsDevice in addVTableComponent()
788 llvm::ConstantExpr::getNullValue(CGM.GlobalsInt8PtrTy)); in addVTableComponent()
801 return llvm::ConstantPointerNull::get(CGM.GlobalsInt8PtrTy); in addVTableComponent()
805 if (CGM.getLangOpts().OpenMP && CGM.getLangOpts().OpenMPIsTargetDevice && in addVTableComponent()
806 CGM.getTriple().isNVPTX()) in addVTableComponent()
807 return llvm::ConstantPointerNull::get(CGM.GlobalsInt8PtrTy); in addVTableComponent()
809 llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false); in addVTableComponent()
811 CGM.CreateRuntimeFunction(fnTy, name).getCallee()); in addVTableComponent()
823 getSpecialVirtualFn(CGM.getCXXABI().GetPureVirtualCallName()); in addVTableComponent()
830 getSpecialVirtualFn(CGM.getCXXABI().GetDeletedVirtualCallName()); in addVTableComponent()
841 if (CGM.getCodeGenOpts().PointerAuth.CXXVirtualFunctionPointers) { in addVTableComponent()
848 llvm::Type *fnTy = CGM.getTypes().GetFunctionTypeForVTable(GD); in addVTableComponent()
849 fnPtr = CGM.GetAddrOfFunction(GD, fnTy, /*ForVTable=*/true); in addVTableComponent()
850 if (CGM.getCodeGenOpts().PointerAuth.CXXVirtualFunctionPointers) in addVTableComponent()
864 unsigned GVAS = CGM.GlobalsInt8PtrTy->getPointerAddressSpace(); in addVTableComponent()
868 llvm::ConstantExpr::getAddrSpaceCast(fnPtr, CGM.GlobalsInt8PtrTy); in addVTableComponent()
870 CGM.getCodeGenOpts().PointerAuth.CXXVirtualFunctionPointers) in addVTableComponent()
878 return builder.add(llvm::ConstantExpr::getNullValue(CGM.Int32Ty)); in addVTableComponent()
880 return builder.addNullPointer(CGM.GlobalsInt8PtrTy); in addVTableComponent()
892 return llvm::StructType::get(CGM.getLLVMContext(), tys); in getVTableType()
923 if (CGDebugInfo *DI = CGM.getModuleDebugInfo()) in GenerateConstructionVTable()
936 cast<ItaniumMangleContext>(CGM.getCXXABI().getMangleContext()) in GenerateConstructionVTable()
943 UsingRelativeLayout && CGM.getModule().getNamedAlias(Name); in GenerateConstructionVTable()
959 llvm::Align Align = CGM.getDataLayout().getABITypeAlign(VTType); in GenerateConstructionVTable()
963 CGM.CreateOrReplaceCXXRuntimeVariable(Name, VTType, Linkage, Align); in GenerateConstructionVTable()
968 llvm::Constant *RTTI = CGM.GetAddrOfRTTIDescriptor( in GenerateConstructionVTable()
969 CGM.getContext().getTagDeclType(Base.getBase())); in GenerateConstructionVTable()
972 ConstantInitBuilder builder(CGM); in GenerateConstructionVTable()
981 CGM.setGVProperties(VTable, RD); in GenerateConstructionVTable()
983 CGM.EmitVTableTypeMetadata(RD, VTable, *VTLayout.get()); in GenerateConstructionVTable()
1003 if (CGM.getLangOpts().Sanitize.has(SanitizerKind::HWAddress)) { in RemoveHwasanMetadata()
1041 llvm::GlobalAlias *VTableAlias = CGM.getModule().getNamedAlias(AliasName); in GenerateRelativeVTableAlias()
1045 AliasName, &CGM.getModule()); in GenerateRelativeVTableAlias()
1068 static bool shouldEmitAvailableExternallyVTable(const CodeGenModule &CGM, in shouldEmitAvailableExternallyVTable() argument
1070 return CGM.getCodeGenOpts().OptimizationLevel > 0 && in shouldEmitAvailableExternallyVTable()
1071 CGM.getCXXABI().canSpeculativelyEmitVTable(RD); in shouldEmitAvailableExternallyVTable()
1189 if (CGDebugInfo *DI = CGM.getModuleDebugInfo()) in GenerateClassData()
1193 CGM.getCXXABI().emitVirtualInheritanceTables(RD); in GenerateClassData()
1195 CGM.getCXXABI().emitVTableDefinitions(*this, RD); in GenerateClassData()
1213 if (CGM.getTarget().getCXXABI().isMicrosoft()) in isVTableExternal()
1235 const CXXMethodDecl *keyFunction = CGM.getContext().getCurrentKeyFunction(RD); in isVTableExternal()
1247 static bool shouldEmitVTableAtEndOfTranslationUnit(CodeGenModule &CGM, in shouldEmitVTableAtEndOfTranslationUnit() argument
1250 if (!CGM.getVTables().isVTableExternal(RD)) in shouldEmitVTableAtEndOfTranslationUnit()
1254 return shouldEmitAvailableExternallyVTable(CGM, RD); in shouldEmitVTableAtEndOfTranslationUnit()