Lines Matching refs:CGM
31 CodeGenVTables::CodeGenVTables(CodeGenModule &CGM) in CodeGenVTables() argument
32 : CGM(CGM), VTContext(CGM.getContext().getVTableContext()) {} in CodeGenVTables()
40 static void setThunkProperties(CodeGenModule &CGM, const ThunkInfo &Thunk, in setThunkProperties() argument
43 CGM.setFunctionLinkage(GD, ThunkFn); in setThunkProperties()
44 CGM.getCXXABI().setThunkLinkage(ThunkFn, ForVTable, GD, in setThunkProperties()
48 CGM.setGVProperties(ThunkFn, GD); in setThunkProperties()
50 if (!CGM.getCXXABI().exportThunk()) { in setThunkProperties()
55 if (CGM.supportsCOMDAT() && ThunkFn->isWeakForLinker()) in setThunkProperties()
56 ThunkFn->setComdat(CGM.getModule().getOrInsertComdat(ThunkFn->getName())); in setThunkProperties()
92 auto ClassAlign = CGF.CGM.getClassPointerAlignment(ClassDecl); in PerformReturnAdjustment()
93 ReturnValue = CGF.CGM.getCXXABI().performReturnAdjustment(CGF, in PerformReturnAdjustment()
166 llvm::Type *Ty = CGM.getTypes().GetFunctionType(FnInfo); in GenerateVarArgsThunk()
167 llvm::Value *Callee = CGM.GetAddrOfFunction(GD, Ty, /*ForVTable=*/true); in GenerateVarArgsThunk()
174 CGM.ErrorUnsupported(MD, "return-adjusting thunk with variadic arguments"); in GenerateVarArgsThunk()
196 if (CGM.ReturnTypeUsesSRet(FnInfo)) in GenerateVarArgsThunk()
201 Address ThisPtr(&*AI, CGM.getClassPointerAlignment(MD->getParent())); in GenerateVarArgsThunk()
213 CGM.getCXXABI().performThisAdjustment(*this, ThisPtr, Thunk.This); in GenerateVarArgsThunk()
248 ResultType = CGM.getContext().VoidTy; in StartThunk()
249 else if (CGM.getCXXABI().HasThisReturn(GD)) in StartThunk()
251 else if (CGM.getCXXABI().hasMostDerivedReturn(GD)) in StartThunk()
252 ResultType = CGM.getContext().VoidPtrTy; in StartThunk()
258 CGM.getCXXABI().buildThisParam(*this, FunctionArgs); in StartThunk()
265 CGM.getCXXABI().addImplicitStructorParams(*this, ResultType, in StartThunk()
277 CGM.getCXXABI().EmitInstanceFunctionProlog(*this); in StartThunk()
301 Thunk ? CGM.getCXXABI().performThisAdjustment( in EmitCallAndReturnForThunk()
311 CGM.ErrorUnsupported( in EmitCallAndReturnForThunk()
317 CGM.ErrorUnsupported( in EmitCallAndReturnForThunk()
330 CGM.getCXXABI().adjustCallArgsForDestructorThunk(*this, CurGD, CallArgs); in EmitCallAndReturnForThunk()
342 const CGFunctionInfo &CallFnInfo = CGM.getTypes().arrangeCXXMethodCall( in EmitCallAndReturnForThunk()
359 QualType ResultType = CGM.getCXXABI().HasThisReturn(CurGD) in EmitCallAndReturnForThunk()
361 : CGM.getCXXABI().hasMostDerivedReturn(CurGD) in EmitCallAndReturnForThunk()
362 ? CGM.getContext().VoidPtrTy in EmitCallAndReturnForThunk()
384 CGM.getCXXABI().EmitReturnFromThunk(*this, RV, ResultType); in EmitCallAndReturnForThunk()
429 CGM.ConstructAttributeList(Callee.getCallee()->getName(), *CurFnInfo, GD, in EmitMustTailThunk()
461 Ty = CGM.getTypes().GetFunctionType(FnInfo); in generateThunk()
463 llvm::Constant *Callee = CGM.GetAddrOfFunction(GD, Ty, /*ForVTable=*/true); in generateThunk()
474 static bool shouldEmitVTableThunk(CodeGenModule &CGM, const CXXMethodDecl *MD, in shouldEmitVTableThunk() argument
478 if (CGM.getTarget().getCXXABI().isMicrosoft()) in shouldEmitVTableThunk()
486 return CGM.getCodeGenOpts().OptimizationLevel && !IsUnprototyped; in shouldEmitVTableThunk()
501 MangleContext &MCtx = CGM.getCXXABI().getMangleContext(); in maybeEmitThunk()
507 llvm::Type *ThunkVTableTy = CGM.getTypes().GetFunctionTypeForVTable(GD); in maybeEmitThunk()
508 llvm::Constant *Thunk = CGM.GetAddrOfThunk(Name, ThunkVTableTy, GD); in maybeEmitThunk()
511 bool IsUnprototyped = !CGM.getTypes().isFuncTypeConvertible( in maybeEmitThunk()
513 if (!shouldEmitVTableThunk(CGM, MD, IsUnprototyped, ForVTable)) in maybeEmitThunk()
519 IsUnprototyped ? CGM.getTypes().arrangeUnprototypedMustTailThunk(MD) in maybeEmitThunk()
520 : CGM.getTypes().arrangeGlobalDeclaration(GD); in maybeEmitThunk()
521 llvm::FunctionType *ThunkFnTy = CGM.getTypes().GetFunctionType(FnInfo); in maybeEmitThunk()
534 Name.str(), &CGM.getModule()); in maybeEmitThunk()
535 CGM.SetLLVMFunctionAttributes(MD, FnInfo, ThunkFn, /*IsThunk=*/false); in maybeEmitThunk()
548 bool ABIHasKeyFunctions = CGM.getTarget().getCXXABI().hasKeyFunctions(); in maybeEmitThunk()
557 setThunkProperties(CGM, TI, ThunkFn, ForVTable, GD); in maybeEmitThunk()
568 CGM.SetLLVMFunctionAttributesForDefinition(GD.getDecl(), ThunkFn); in maybeEmitThunk()
579 switch (CGM.getTriple().getArch()) { in maybeEmitThunk()
595 CodeGenFunction(CGM).GenerateVarArgsThunk(ThunkFn, FnInfo, GD, TI); in maybeEmitThunk()
598 CodeGenFunction(CGM).generateThunk(ThunkFn, FnInfo, GD, TI, IsUnprototyped); in maybeEmitThunk()
601 setThunkProperties(CGM, TI, ThunkFn, ForVTable, GD); in maybeEmitThunk()
630 return builder.add(llvm::ConstantInt::get(CGM.Int32Ty, 0)); in addRelativeComponent()
634 llvm::Module &module = CGM.getModule(); in addRelativeComponent()
669 builder.addRelativeOffsetToPosition(CGM.Int32Ty, target, in addRelativeComponent()
674 return CGM.getTarget().getCXXABI().isItaniumFamily() && in useRelativeLayout()
675 CGM.getItaniumVTableContext().isRelativeLayout(); in useRelativeLayout()
680 return CGM.Int32Ty; in getVTableComponentType()
681 return CGM.Int8PtrTy; in getVTableComponentType()
684 static void AddPointerLayoutOffset(const CodeGenModule &CGM, in AddPointerLayoutOffset() argument
688 llvm::ConstantInt::get(CGM.PtrDiffTy, offset.getQuantity()), in AddPointerLayoutOffset()
689 CGM.Int8PtrTy)); in AddPointerLayoutOffset()
692 static void AddRelativeLayoutOffset(const CodeGenModule &CGM, in AddRelativeLayoutOffset() argument
695 builder.add(llvm::ConstantInt::get(CGM.Int32Ty, offset.getQuantity())); in AddRelativeLayoutOffset()
712 return addOffsetConstant(CGM, builder, component.getVCallOffset()); in addVTableComponent()
715 return addOffsetConstant(CGM, builder, component.getVBaseOffset()); in addVTableComponent()
718 return addOffsetConstant(CGM, builder, component.getOffsetToTop()); in addVTableComponent()
726 return builder.add(llvm::ConstantExpr::getBitCast(rtti, CGM.Int8PtrTy)); in addVTableComponent()
733 if (CGM.getLangOpts().CUDA) { in addVTableComponent()
741 CGM.getLangOpts().CUDAIsDevice in addVTableComponent()
745 return builder.add(llvm::ConstantExpr::getNullValue(CGM.Int8PtrTy)); in addVTableComponent()
758 return llvm::ConstantPointerNull::get(CGM.Int8PtrTy); in addVTableComponent()
762 if (CGM.getLangOpts().OpenMP && CGM.getLangOpts().OpenMPIsDevice && in addVTableComponent()
763 CGM.getTriple().isNVPTX()) in addVTableComponent()
764 return llvm::ConstantPointerNull::get(CGM.Int8PtrTy); in addVTableComponent()
766 llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false); in addVTableComponent()
768 CGM.CreateRuntimeFunction(fnTy, name).getCallee()); in addVTableComponent()
771 return llvm::ConstantExpr::getBitCast(fn, CGM.Int8PtrTy); in addVTableComponent()
780 getSpecialVirtualFn(CGM.getCXXABI().GetPureVirtualCallName()); in addVTableComponent()
787 getSpecialVirtualFn(CGM.getCXXABI().GetDeletedVirtualCallName()); in addVTableComponent()
801 llvm::Type *fnTy = CGM.getTypes().GetFunctionTypeForVTable(GD); in addVTableComponent()
802 fnPtr = CGM.GetAddrOfFunction(GD, fnTy, /*ForVTable=*/true); in addVTableComponent()
810 return builder.add(llvm::ConstantExpr::getBitCast(fnPtr, CGM.Int8PtrTy)); in addVTableComponent()
815 return builder.add(llvm::ConstantExpr::getNullValue(CGM.Int32Ty)); in addVTableComponent()
817 return builder.addNullPointer(CGM.Int8PtrTy); in addVTableComponent()
829 return llvm::StructType::get(CGM.getLLVMContext(), tys); in getVTableType()
860 if (CGDebugInfo *DI = CGM.getModuleDebugInfo()) in GenerateConstructionVTable()
873 cast<ItaniumMangleContext>(CGM.getCXXABI().getMangleContext()) in GenerateConstructionVTable()
880 UsingRelativeLayout && CGM.getModule().getNamedAlias(Name); in GenerateConstructionVTable()
896 unsigned Align = CGM.getDataLayout().getABITypeAlignment(VTType); in GenerateConstructionVTable()
900 CGM.CreateOrReplaceCXXRuntimeVariable(Name, VTType, Linkage, Align); in GenerateConstructionVTable()
905 llvm::Constant *RTTI = CGM.GetAddrOfRTTIDescriptor( in GenerateConstructionVTable()
906 CGM.getContext().getTagDeclType(Base.getBase())); in GenerateConstructionVTable()
909 ConstantInitBuilder builder(CGM); in GenerateConstructionVTable()
918 CGM.setGVProperties(VTable, RD); in GenerateConstructionVTable()
920 CGM.EmitVTableTypeMetadata(RD, VTable, *VTLayout.get()); in GenerateConstructionVTable()
957 llvm::GlobalAlias *VTableAlias = CGM.getModule().getNamedAlias(AliasName); in GenerateRelativeVTableAlias()
961 AliasName, &CGM.getModule()); in GenerateRelativeVTableAlias()
984 static bool shouldEmitAvailableExternallyVTable(const CodeGenModule &CGM, in shouldEmitAvailableExternallyVTable() argument
986 return CGM.getCodeGenOpts().OptimizationLevel > 0 && in shouldEmitAvailableExternallyVTable()
987 CGM.getCXXABI().canSpeculativelyEmitVTable(RD); in shouldEmitAvailableExternallyVTable()
1092 if (CGDebugInfo *DI = CGM.getModuleDebugInfo()) in GenerateClassData()
1096 CGM.getCXXABI().emitVirtualInheritanceTables(RD); in GenerateClassData()
1098 CGM.getCXXABI().emitVTableDefinitions(*this, RD); in GenerateClassData()
1116 if (CGM.getTarget().getCXXABI().isMicrosoft()) in isVTableExternal()
1133 const CXXMethodDecl *keyFunction = CGM.getContext().getCurrentKeyFunction(RD); in isVTableExternal()
1145 static bool shouldEmitVTableAtEndOfTranslationUnit(CodeGenModule &CGM, in shouldEmitVTableAtEndOfTranslationUnit() argument
1148 if (!CGM.getVTables().isVTableExternal(RD)) in shouldEmitVTableAtEndOfTranslationUnit()
1152 return shouldEmitAvailableExternallyVTable(CGM, RD); in shouldEmitVTableAtEndOfTranslationUnit()