Home | History | Annotate | Download | only in CodeGen

Lines Matching defs:CGM

45   MicrosoftCXXABI(CodeGenModule &CGM)
46 : CGCXXABI(CGM), BaseClassDescriptorType(nullptr),
221 CGM.getMicrosoftVTableContext().getMethodVFTableLocation(MD);
319 if (auto *VDispMap = CGM.getModule().getNamedGlobal(MangledName))
322 MicrosoftVTableContext &VTContext = CGM.getMicrosoftVTableContext();
325 llvm::UndefValue::get(CGM.IntTy));
326 Map[0] = llvm::ConstantInt::get(CGM.IntTy, 0);
335 Map[SrcVBIndex] = llvm::ConstantInt::get(CGM.IntTy, DstVBIndex * 4);
342 llvm::ArrayType *VDispMapTy = llvm::ArrayType::get(CGM.IntTy, Map.size());
349 CGM.getModule(), VDispMapTy, /*Constant=*/true, Linkage,
380 CodeGenModule &CGM, ArrayRef<const VarDecl *> CXXThreadLocals,
433 return CGM.getTarget().getPointerWidth(/*AddressSpace=*/0) == 64;
445 CGM.Int8PtrPtrTy,
446 CGM.Int8PtrTy,
447 llvm::ArrayType::get(CGM.Int8Ty, TypeInfoString.size() + 1)};
449 llvm::StructType::create(CGM.getLLVMContext(), FieldTypes, TDTypeName);
456 return CGM.IntTy;
463 getImageRelativeType(CGM.Int8PtrTy),
464 CGM.IntTy,
465 CGM.IntTy,
466 CGM.IntTy,
467 CGM.IntTy,
468 CGM.IntTy,
472 CGM.getLLVMContext(), FieldTypes, "rtti.BaseClassDescriptor");
481 CGM.getLLVMContext(), "rtti.ClassHierarchyDescriptor");
483 CGM.IntTy,
484 CGM.IntTy,
485 CGM.IntTy,
497 CGM.getLLVMContext(), "rtti.CompleteObjectLocator");
499 CGM.IntTy,
500 CGM.IntTy,
501 CGM.IntTy,
502 getImageRelativeType(CGM.Int8PtrTy),
515 if (llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(Name))
518 return new llvm::GlobalVariable(CGM.getModule(), CGM.Int8Ty,
529 return llvm::Constant::getNullValue(CGM.IntTy);
532 llvm::ConstantExpr::getPtrToInt(getImageBase(), CGM.IntPtrTy);
534 llvm::ConstantExpr::getPtrToInt(PtrVal, CGM.IntPtrTy);
538 return llvm::ConstantExpr::getTrunc(Diff, CGM.IntTy);
547 return llvm::ConstantInt::get(CGM.IntTy, 0);
551 return llvm::Constant::getAllOnesValue(CGM.IntTy);
575 llvm::Value *VBPOffset = llvm::ConstantInt::get(CGM.IntTy, VBPtrOffset),
576 *VBTOffset = llvm::ConstantInt::get(CGM.IntTy, VBTableOffset);
675 CGM.IntTy, // Flags
676 getImageRelativeType(CGM.Int8PtrTy), // TypeDescriptor
677 CGM.IntTy, // NonVirtualAdjustment
678 CGM.IntTy, // OffsetToVBPtr
679 CGM.IntTy, // VBTableIndex
680 CGM.IntTy, // Size
681 getImageRelativeType(CGM.Int8PtrTy) // CopyCtor
684 CGM.getLLVMContext(), FieldTypes, "eh.CatchableType");
699 CGM.IntTy, // NumEntries
703 llvm::StructType::create(CGM.getLLVMContext(), FieldTypes, CTATypeName);
711 CGM.IntTy, // Flags
712 getImageRelativeType(CGM.Int8PtrTy), // CleanupFn
713 getImageRelativeType(CGM.Int8PtrTy), // ForwardCompat
714 getImageRelativeType(CGM.Int8PtrTy) // CatchableTypeArray
716 ThrowInfoType = llvm::StructType::create(CGM.getLLVMContext(), FieldTypes,
724 llvm::Type *Args[] = {CGM.Int8PtrTy, getThrowInfoType()->getPointerTo()};
726 llvm::FunctionType::get(CGM.VoidTy, Args, /*IsVarArgs=*/false);
728 CGM.CreateRuntimeFunction(FTy, "_CxxThrowException"));
730 if (CGM.getTarget().getTriple().getArch() == llvm::Triple::x86)
792 switch (CGM.getTarget().getTriple().getArch()) {
868 llvm::ConstantPointerNull::get(CGM.Int8PtrTy),
947 CGF.CGM.getVBaseAlignment(Value.getAlignment(), SrcDecl, PolymorphicBase);
964 llvm::Constant *Fn = CGF.CGM.CreateRuntimeFunction(FTy, "__RTtypeid");
970 emitRTtypeidCall(CGF, llvm::Constant::getNullValue(CGM.VoidPtrTy));
998 CGF.CGM.GetAddrOfRTTIDescriptor(SrcRecordTy.getUnqualifiedType());
1000 CGF.CGM.GetAddrOfRTTIDescriptor(DestRecordTy.getUnqualifiedType());
1014 llvm::Constant *Function = CGF.CGM.CreateRuntimeFunction(
1034 llvm::Constant *Function = CGF.CGM.CreateRuntimeFunction(
1051 llvm::Value *VBPtrOffset = llvm::ConstantInt::get(CGM.PtrDiffTy, VBPtrChars);
1055 CGM.getMicrosoftVTableContext().getVBTableIndex(ClassDecl, BaseClassDecl);
1057 llvm::ConstantInt::get(CGM.IntTy, VBTableChars.getQuantity());
1062 CGF.Builder.CreateSExtOrBitCast(VBPtrToNewBase, CGM.PtrDiffTy);
1084 CharUnits Align = CGM.getContext().getTypeAlignInChars(FI.getReturnType());
1163 VBaseOffset, llvm::ConstantInt::get(CGM.Int32Ty, ConstantVBaseOffset),
1191 CGM.EmitGlobal(GlobalDecl(D, Ctor_Complete));
1208 This = CGF.Builder.CreateElementBitCast(This, CGM.Int8Ty, "this.int8");
1259 CGM.EmitGlobal(GlobalDecl(D, Dtor_Base));
1280 CGM.getMicrosoftVTableContext().getMethodVFTableLocation(LookupGD);
1329 CGM.getMicrosoftVTableContext().getMethodVFTableLocation(LookupGD);
1350 CGF.CGM.getVBaseAlignment(Result.getAlignment(), Derived, VBase);
1471 llvm::ConstantInt::get(CGM.Int32Ty, Type == Ctor_Complete);
1488 llvm::Value *Callee = CGM.getAddrOfCXXStructor(DD, getFromDtorType(Type));
1513 CGM.getModule().getOrInsertNamedMetadata("llvm.bitsets");
1525 if (!CGM.IsCFIBlacklistedRecord(RD))
1526 CGM.CreateVTableBitSetEntry(BitsetsMD, VTable, AddressPoint, RD);
1531 if (!CGM.IsCFIBlacklistedRecord(Info->PathToBaseWithVPtr.back()))
1532 CGM.CreateVTableBitSetEntry(BitsetsMD, VTable, AddressPoint,
1551 if (!CGM.IsCFIBlacklistedRecord(DerivedRD))
1552 CGM.CreateVTableBitSetEntry(BitsetsMD, VTable, AddressPoint, DerivedRD);
1556 if (Info->FullOffsetInMDC.isZero() && !CGM.IsCFIBlacklistedRecord(RD))
1557 CGM.CreateVTableBitSetEntry(BitsetsMD, VTable, AddressPoint, RD);
1562 MicrosoftVTableContext &VFTContext = CGM.getMicrosoftVTableContext();
1640 MicrosoftVTableContext &VTContext = CGM.getMicrosoftVTableContext();
1646 CGM.addDeferredVTable(RD);
1674 llvm::GlobalValue::LinkageTypes VFTableLinkage = CGM.getVTableLinkage(RD);
1682 CGM.getModule().getNamedGlobal(VFTableName)) {
1700 llvm::ArrayType::get(CGM.Int8PtrTy, NumVTableSlots);
1705 VTable = new llvm::GlobalVariable(CGM.getModule(), VTableType,
1715 C = CGM.getModule().getOrInsertComdat(VFTableName.str());
1721 llvm::Value *GEPIndices[] = {llvm::ConstantInt::get(CGM.IntTy, 0),
1722 llvm::ConstantInt::get(CGM.IntTy, 1)};
1732 VFTable = llvm::GlobalAlias::create(CGM.Int8PtrTy,
1735 &CGM.getModule());
1815 CGM.getMicrosoftVTableContext().getMethodVFTableLocation(GD);
1834 const CGFunctionInfo *FInfo = &CGM.getTypes().arrangeCXXStructorDeclaration(
1836 llvm::Type *Ty = CGF.CGM.getTypes().GetFunctionType(*FInfo);
1865 MicrosoftVTableContext &Context = CGM.getMicrosoftVTableContext();
1870 llvm::GlobalVariable::LinkageTypes Linkage = CGM.getVTableLinkage(RD);
1892 if (llvm::GlobalValue *GV = CGM.getModule().getNamedValue(ThunkName))
1896 const CGFunctionInfo &FnInfo = CGM.getTypes().arrangeMSMemberPointerThunk(MD);
1897 llvm::FunctionType *ThunkTy = CGM.getTypes().GetFunctionType(FnInfo);
1900 ThunkName.str(), &CGM.getModule());
1907 ThunkFn->setComdat(CGM.getModule().getOrInsertComdat(ThunkFn->getName()));
1909 CGM.SetLLVMFunctionAttributes(MD, FnInfo, ThunkFn);
1910 CGM.SetLLVMFunctionAttributesForDefinition(MD, ThunkFn);
1922 CodeGenFunction CGF(CGM);
1970 llvm::ArrayType::get(CGM.IntTy, 1 + VBT.ReusingBase->getNumVBases());
1972 assert(!CGM.getModule().getNamedGlobal(Name) &&
1975 CGM.CreateOrReplaceCXXRuntimeVariable(Name, VBTableType, Linkage);
2006 Offsets[0] = llvm::ConstantInt::get(CGM.IntTy, -VBPtrOffset.getQuantity());
2008 MicrosoftVTableContext &Context = CGM.getMicrosoftVTableContext();
2023 Offsets[VBIndex] = llvm::ConstantInt::get(CGM.IntTy, Offset.getQuantity());
2030 llvm::ArrayType::get(CGM.IntTy, Offsets.size());
2177 CGF.CGM.CreateRuntimeFunction(TLRegDtorTy, "__tlregdtor");
2195 CodeGenModule &CGM, ArrayRef<const VarDecl *> CXXThreadLocals,
2201 auto AddToXDU = [&CGM](llvm::Function *InitFunc) {
2203 CGM.getModule(), InitFunc->getType(), /*IsConstant=*/true,
2209 CGM.addUsedGlobal(InitFuncPtr);
2216 CGM.GetGlobalValue(CGM.getMangledName(CXXThreadLocalInitVars[I])));
2228 llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false);
2229 llvm::Function *InitFunc = CGM.CreateGlobalInitOrDestructFunction(
2230 FTy, "__tls_init", CGM.getTypes().arrangeNullaryFunction(),
2232 CodeGenFunction(CGM).GenerateCXXGlobalInitFunc(InitFunc, NonComdatInits);
2241 CGF.CGM.ErrorUnsupported(VD, "thread wrappers");
2245 static ConstantAddress getInitThreadEpochPtr(CodeGenModule &CGM) {
2247 CharUnits Align = CGM.getIntAlign();
2248 if (auto *GV = CGM.getModule().getNamedGlobal(VarName))
2251 CGM.getModule(), CGM.IntTy,
2259 static llvm::Constant *getInitThreadHeaderFn(CodeGenModule &CGM) {
2261 llvm::FunctionType::get(llvm::Type::getVoidTy(CGM.getLLVMContext()),
2262 CGM.IntTy->getPointerTo(), /*isVarArg=*/false);
2263 return CGM.CreateRuntimeFunction(
2265 llvm::AttributeSet::get(CGM.getLLVMContext(),
2270 static llvm::Constant *getInitThreadFooterFn(CodeGenModule &CGM) {
2272 llvm::FunctionType::get(llvm::Type::getVoidTy(CGM.getLLVMContext()),
2273 CGM.IntTy->getPointerTo(), /*isVarArg=*/false);
2274 return CGM.CreateRuntimeFunction(
2276 llvm::AttributeSet::get(CGM.getLLVMContext(),
2281 static llvm::Constant *getInitThreadAbortFn(CodeGenModule &CGM) {
2283 llvm::FunctionType::get(llvm::Type::getVoidTy(CGM.getLLVMContext()),
2284 CGM.IntTy->getPointerTo(), /*isVarArg=*/false);
2285 return CGM.CreateRuntimeFunction(
2287 llvm::AttributeSet::get(CGM.getLLVMContext(),
2316 CGF.EmitNounwindRuntimeCall(getInitThreadAbortFn(CGF.CGM), Guard);
2330 F->setComdat(CGM.getModule().getOrInsertComdat(F->getName()));
2391 new llvm::GlobalVariable(CGM.getModule(), GuardTy, /*isConstant=*/false,
2398 CGM.getModule().getOrInsertComdat(GuardVar->getName()));
2454 Builder.CreateLoad(getInitThreadEpochPtr(CGM));
2464 CGF.EmitNounwindRuntimeCall(getInitThreadHeaderFn(CGM),
2478 CGF.EmitNounwindRuntimeCall(getInitThreadFooterFn(CGM),
2507 fields.push_back(CGM.VoidPtrTy); // FunctionPointerOrVirtualThunk
2509 fields.push_back(CGM.IntTy); // FieldOffset
2513 fields.push_back(CGM.IntTy);
2515 fields.push_back(CGM.IntTy);
2517 fields.push_back(CGM.IntTy); // VirtualBaseAdjustmentOffset
2521 return llvm::StructType::get(CGM.getLLVMContext(), fields);
2532 fields.push_back(llvm::Constant::getNullValue(CGM.VoidPtrTy));
2578 CGM.IntTy, NonVirtualBaseAdjustment.getQuantity()));
2584 fields.push_back(llvm::ConstantInt::get(CGM.IntTy, Offs.getQuantity()));
2589 fields.push_back(llvm::ConstantInt::get(CGM.IntTy, VBTableIndex));
2602 llvm::ConstantInt::get(CGM.IntTy, offset.getQuantity());
2668 CodeGenTypes &Types = CGM.getTypes();
2682 Ty = CGM.PtrDiffTy;
2684 FirstField = CGM.GetAddrOfFunction(MD, Ty);
2686 auto &VTableContext = CGM.getMicrosoftVTableContext();
2702 FirstField = llvm::ConstantExpr::getBitCast(FirstField, CGM.VoidPtrTy);
2778 fields.push_back(llvm::Constant::getNullValue(CGM.VoidPtrTy));
2840 This = Builder.CreateElementBitCast(This, CGM.Int8Ty);
2845 CGM.Int32Ty->getPointerTo(0)->getPointerTo(This.getAddressSpace()));
2864 VBaseOffs = Builder.CreateBitCast(VBaseOffs, CGM.Int32Ty->getPointerTo(0));
2875 Base = Builder.CreateElementBitCast(Base, CGM.Int8Ty);
2900 DiagnosticsEngine &Diags = CGF.CGM.getDiags();
2908 VBPtrOffset = llvm::ConstantInt::get(CGM.IntTy, offs.getQuantity());
2919 llvm::PHINode *Phi = Builder.CreatePHI(CGM.Int8PtrTy, 2, "memptr.base");
3086 llvm::ConstantInt::get(CGM.IntTy, SrcOffsetToFirstVBase),
3100 CGM.IntTy,
3101 CGM.computeNonVirtualBaseClassOffset(DerivedClass, PathBegin, PathEnd)
3120 VirtualBaseAdjustmentOffset, llvm::ConstantInt::get(CGM.IntTy, 4));
3141 CGM.IntTy,
3155 llvm::ConstantInt::get(CGM.IntTy, DstOffsetToFirstVBase),
3210 CGBuilderTy Builder(CGM, CGM.getLLVMContext());
3225 llvm::FunctionType *FTy = CGM.getTypes().GetFunctionType(
3226 CGM.getTypes().arrangeCXXMethodType(RD, FPT, /*FD=*/nullptr));
3267 CGCXXABI *clang::CodeGen::CreateMicrosoftCXXABI(CodeGenModule &CGM) {
3268 return new MicrosoftCXXABI(CGM);
3301 static llvm::GlobalVariable *getTypeInfoVTable(CodeGenModule &CGM) {
3303 if (auto VTable = CGM.getModule().getNamedGlobal(MangledName))
3305 return new llvm::GlobalVariable(CGM.getModule(), CGM.Int8PtrTy,
3396 : CGM(ABI.CGM), Context(CGM.getContext()),
3397 VMContext(CGM.getLLVMContext()), Module(CGM.getModule()), RD(RD),
3398 Linkage(getLinkageForRTTI(CGM.getContext().getTagDeclType(RD))),
3407 CodeGenModule &CGM;
3479 llvm::Value *GEPIndices[] = {llvm::ConstantInt::get(CGM.IntTy, 0),
3480 llvm::ConstantInt::get(CGM.IntTy, 0)};
3488 CHD->setComdat(CGM.getModule().getOrInsertComdat(CHD->getName()));
3494 llvm::ConstantInt::get(CGM.IntTy, 0), // Unknown
3495 llvm::ConstantInt::get(CGM.IntTy, Flags),
3496 llvm::ConstantInt::get(CGM.IntTy, Classes.size()),
3526 BCA->setComdat(CGM.getModule().getOrInsertComdat(BCA->getName()));
3545 auto &VTableContext = CGM.getMicrosoftVTableContext();
3568 CGM.getModule().getOrInsertComdat(BCD->getName()));
3574 llvm::ConstantInt::get(CGM.IntTy, Class.NumBases),
3575 llvm::ConstantInt::get(CGM.IntTy, Class.OffsetInVBase),
3576 llvm::ConstantInt::get(CGM.IntTy, VBPtrOffset),
3577 llvm::ConstantInt::get(CGM.IntTy, OffsetInVBTable),
3578 llvm::ConstantInt::get(CGM.IntTy, Class.Flags),
3616 llvm::ConstantInt::get(CGM.IntTy, ABI.isImageRelative()),
3617 llvm::ConstantInt::get(CGM.IntTy, OffsetToTop),
3618 llvm::ConstantInt::get(CGM.IntTy, VFPtrOffset),
3620 CGM.GetAddrOfRTTIDescriptor(Context.getTypeDeclType(RD))),
3629 COL->setComdat(CGM.getModule().getOrInsertComdat(COL->getName()));
3699 if (llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(MangledName))
3700 return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
3711 getTypeInfoVTable(CGM), // VFPtr
3712 llvm::ConstantPointerNull::get(CGM.Int8PtrTy), // Runtime data
3713 llvm::ConstantDataArray::getString(CGM.getLLVMContext(), TypeInfoString)};
3717 CGM.getModule(), TypeDescriptorType, /*Constant=*/false,
3722 Var->setComdat(CGM.getModule().getOrInsertComdat(Var->getName()));
3723 return llvm::ConstantExpr::getBitCast(Var, CGM.Int8PtrTy);
3733 static void emitCXXConstructor(CodeGenModule &CGM,
3737 llvm::Function *Fn = CGM.codegenCXXStructor(ctor, StructorType::Complete);
3738 CGM.maybeSetTrivialComdat(*ctor, *Fn);
3741 static void emitCXXDestructor(CodeGenModule &CGM, const CXXDestructorDecl *dtor,
3747 bool ProducedAlias = !CGM.TryEmitDefinitionAsAlias(
3753 CGM.getVTables().EmitThunks(GlobalDecl(dtor, Dtor_Complete));
3761 if (dtorType == StructorType::Base && !CGM.TryEmitBaseDestructorAsAlias(dtor))
3764 llvm::Function *Fn = CGM.codegenCXXStructor(dtor, dtorType);
3766 Fn->setComdat(CGM.getModule().getOrInsertComdat(Fn->getName()));
3772 emitCXXConstructor(CGM, CD, Type);
3775 emitCXXDestructor(CGM, cast<CXXDestructorDecl>(MD), Type);
3789 if (llvm::GlobalValue *GV = CGM.getModule().getNamedValue(ThunkName))
3793 const CGFunctionInfo &FnInfo = CGM.getTypes().arrangeMSCtorClosure(CD, CT);
3794 llvm::FunctionType *ThunkTy = CGM.getTypes().GetFunctionType(FnInfo);
3798 ThunkTy, getLinkageForRTTI(RecordTy), ThunkName.str(), &CGM.getModule());
3802 ThunkFn->setComdat(CGM.getModule().getOrInsertComdat(ThunkFn->getName()));
3806 CodeGenFunction CGF(CGM);
3872 llvm::Value *CalleeFn = CGM.getAddrOfCXXStructor(CD, StructorType::Complete);
3873 const CGFunctionInfo &CalleeInfo = CGM.getTypes().arrangeCXXConstructorCall(
3894 RD ? CGM.getContext().getCopyConstructorForExceptionObject(RD) : nullptr;
3907 if (llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(MangledName))
3921 CopyCtor = CGM.getAddrOfCXXStructor(CD, StructorType::Complete);
3923 CopyCtor = llvm::ConstantExpr::getBitCast(CopyCtor, CGM.Int8PtrTy);
3925 CopyCtor = llvm::Constant::getNullValue(CGM.Int8PtrTy);
3952 llvm::ConstantInt::get(CGM.IntTy, Flags), // Flags
3954 llvm::ConstantInt::get(CGM.IntTy, NVOffset), // NonVirtualAdjustment
3955 llvm::ConstantInt::get(CGM.IntTy, VBPtrOffset), // OffsetToVBPtr
3956 llvm::ConstantInt::get(CGM.IntTy, VBIndex), // VBTableIndex
3957 llvm::ConstantInt::get(CGM.IntTy, Size), // Size
3962 CGM.getModule(), CTType, /*Constant=*/true, getLinkageForRTTI(T),
3967 GV->setComdat(CGM.getModule().getOrInsertComdat(GV->getName()));
4004 MicrosoftVTableContext &VTableContext = CGM.getMicrosoftVTableContext();
4069 llvm::ConstantInt::get(CGM.IntTy, NumEntries), // NumEntries
4080 CGM.getModule(), CTAType, /*Constant=*/true, getLinkageForRTTI(T),
4085 CTA->setComdat(CGM.getModule().getOrInsertComdat(CTA->getName()));
4113 if (llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(MangledName))
4127 llvm::Constant *CleanupFn = llvm::Constant::getNullValue(CGM.Int8PtrTy);
4132 CGM.getAddrOfCXXStructor(DtorD, StructorType::Complete),
4133 CGM.Int8PtrTy);
4136 getImageRelativeConstant(llvm::Constant::getNullValue(CGM.Int8PtrTy));
4138 llvm::ConstantExpr::getBitCast(CTA, CGM.Int8PtrTy));
4141 llvm::ConstantInt::get(CGM.IntTy, Flags), // Flags
4147 CGM.getModule(), TIType, /*Constant=*/true, getLinkageForRTTI(T),
4152 GV->setComdat(CGM.getModule().getOrInsertComdat(GV->getName()));
4171 CGF.Builder.CreateBitCast(AI.getPointer(), CGM.Int8PtrTy),