Lines Matching refs:CGM

44   MicrosoftCXXABI(CodeGenModule &CGM)
45 : CGCXXABI(CGM), BaseClassDescriptorType(nullptr),
172 CGM.getMicrosoftVTableContext().getMethodVFTableLocation(MD);
273 CodeGenModule &CGM,
328 return CGM.getTarget().getPointerWidth(/*AddressSpace=*/0) == 64;
340 CGM.Int8PtrPtrTy,
341 CGM.Int8PtrTy,
342 llvm::ArrayType::get(CGM.Int8Ty, TypeInfoString.size() + 1)};
344 llvm::StructType::create(CGM.getLLVMContext(), FieldTypes, TDTypeName);
351 return CGM.IntTy;
358 getImageRelativeType(CGM.Int8PtrTy),
359 CGM.IntTy,
360 CGM.IntTy,
361 CGM.IntTy,
362 CGM.IntTy,
363 CGM.IntTy,
367 CGM.getLLVMContext(), FieldTypes, "rtti.BaseClassDescriptor");
376 CGM.getLLVMContext(), "rtti.ClassHierarchyDescriptor");
378 CGM.IntTy,
379 CGM.IntTy,
380 CGM.IntTy,
392 CGM.getLLVMContext(), "rtti.CompleteObjectLocator");
394 CGM.IntTy,
395 CGM.IntTy,
396 CGM.IntTy,
397 getImageRelativeType(CGM.Int8PtrTy),
410 if (llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(Name))
413 return new llvm::GlobalVariable(CGM.getModule(), CGM.Int8Ty,
424 return llvm::Constant::getNullValue(CGM.IntTy);
427 llvm::ConstantExpr::getPtrToInt(getImageBase(), CGM.IntPtrTy);
429 llvm::ConstantExpr::getPtrToInt(PtrVal, CGM.IntPtrTy);
433 return llvm::ConstantExpr::getTrunc(Diff, CGM.IntTy);
442 return llvm::ConstantInt::get(CGM.IntTy, 0);
446 return llvm::Constant::getAllOnesValue(CGM.IntTy);
478 llvm::Value *VBPOffset = llvm::ConstantInt::get(CGM.IntTy, VBPtrOffset),
479 *VBTOffset = llvm::ConstantInt::get(CGM.IntTy, VBTableOffset);
579 CGM.IntTy, // Flags
580 CGM.Int8PtrTy, // TypeDescriptor
583 CGM.getLLVMContext(), FieldTypes, "eh.CatchHandlerType");
592 CGM.IntTy, // Flags
593 getImageRelativeType(CGM.Int8PtrTy), // TypeDescriptor
594 CGM.IntTy, // NonVirtualAdjustment
595 CGM.IntTy, // OffsetToVBPtr
596 CGM.IntTy, // VBTableIndex
597 CGM.IntTy, // Size
598 getImageRelativeType(CGM.Int8PtrTy) // CopyCtor
601 CGM.getLLVMContext(), FieldTypes, "eh.CatchableType");
616 CGM.IntTy, // NumEntries
620 llvm::StructType::create(CGM.getLLVMContext(), FieldTypes, CTATypeName);
628 CGM.IntTy, // Flags
629 getImageRelativeType(CGM.Int8PtrTy), // CleanupFn
630 getImageRelativeType(CGM.Int8PtrTy), // ForwardCompat
631 getImageRelativeType(CGM.Int8PtrTy) // CatchableTypeArray
633 ThrowInfoType = llvm::StructType::create(CGM.getLLVMContext(), FieldTypes,
641 llvm::Type *Args[] = {CGM.Int8PtrTy, getThrowInfoType()->getPointerTo()};
643 llvm::FunctionType::get(CGM.VoidTy, Args, /*IsVarArgs=*/false);
645 CGM.CreateRuntimeFunction(FTy, "_CxxThrowException"));
647 if (CGM.getTarget().getTriple().getArch() == llvm::Triple::x86)
708 switch (CGM.getTarget().getTriple().getArch()) {
784 llvm::ConstantPointerNull::get(CGM.Int8PtrTy),
798 CGF.CGM.getIntrinsic(llvm::Intrinsic::eh_endcatch));
810 CGF.CGM.getIntrinsic(llvm::Intrinsic::eh_begincatch);
868 llvm::Constant *Fn = CGF.CGM.CreateRuntimeFunction(FTy, "__RTtypeid");
874 emitRTtypeidCall(CGF, llvm::Constant::getNullValue(CGM.VoidPtrTy));
902 CGF.CGM.GetAddrOfRTTIDescriptor(SrcRecordTy.getUnqualifiedType());
904 CGF.CGM.GetAddrOfRTTIDescriptor(DestRecordTy.getUnqualifiedType());
917 llvm::Constant *Function = CGF.CGM.CreateRuntimeFunction(
937 llvm::Constant *Function = CGF.CGM.CreateRuntimeFunction(
954 llvm::Value *VBPtrOffset = llvm::ConstantInt::get(CGM.PtrDiffTy, VBPtrChars);
958 CGM.getMicrosoftVTableContext().getVBTableIndex(ClassDecl, BaseClassDecl);
960 llvm::ConstantInt::get(CGM.IntTy, VBTableChars.getQuantity());
965 CGF.Builder.CreateSExtOrBitCast(VBPtrToNewBase, CGM.PtrDiffTy);
1066 VBaseOffset, llvm::ConstantInt::get(CGM.Int32Ty, ConstantVBaseOffset),
1093 CGM.EmitGlobal(GlobalDecl(D, Ctor_Complete));
1110 CGF.Builder.CreateBitCast(getThisValue(CGF), CGM.Int8PtrTy, "this.int8");
1162 CGM.EmitGlobal(GlobalDecl(D, Dtor_Base));
1183 CGM.getMicrosoftVTableContext().getMethodVFTableLocation(LookupGD);
1233 CGM.getMicrosoftVTableContext().getMethodVFTableLocation(LookupGD);
1370 llvm::ConstantInt::get(CGM.Int32Ty, Type == Ctor_Complete);
1387 llvm::Value *Callee = CGM.getAddrOfCXXStructor(DD, getFromDtorType(Type));
1404 MicrosoftVTableContext &VFTContext = CGM.getMicrosoftVTableContext();
1472 MicrosoftVTableContext &VTContext = CGM.getMicrosoftVTableContext();
1478 CGM.addDeferredVTable(RD);
1506 llvm::GlobalValue::LinkageTypes VFTableLinkage = CGM.getVTableLinkage(RD);
1514 CGM.getModule().getNamedGlobal(VFTableName)) {
1531 llvm::ArrayType::get(CGM.Int8PtrTy, NumVTableSlots);
1536 VTable = new llvm::GlobalVariable(CGM.getModule(), VTableType,
1546 C = CGM.getModule().getOrInsertComdat(VFTableName.str());
1552 llvm::Value *GEPIndices[] = {llvm::ConstantInt::get(CGM.IntTy, 0),
1553 llvm::ConstantInt::get(CGM.IntTy, 1)};
1566 &CGM.getModule());
1600 CGM.getMicrosoftVTableContext().getMethodVFTableLocation(GD);
1615 const CGFunctionInfo *FInfo = &CGM.getTypes().arrangeCXXStructorDeclaration(
1617 llvm::Type *Ty = CGF.CGM.getTypes().GetFunctionType(*FInfo);
1644 MicrosoftVTableContext &Context = CGM.getMicrosoftVTableContext();
1649 llvm::GlobalVariable::LinkageTypes Linkage = CGM.getVTableLinkage(RD);
1672 if (llvm::GlobalValue *GV = CGM.getModule().getNamedValue(ThunkName))
1676 const CGFunctionInfo &FnInfo = CGM.getTypes().arrangeMSMemberPointerThunk(MD);
1677 llvm::FunctionType *ThunkTy = CGM.getTypes().GetFunctionType(FnInfo);
1680 ThunkName.str(), &CGM.getModule());
1687 ThunkFn->setComdat(CGM.getModule().getOrInsertComdat(ThunkFn->getName()));
1689 CGM.SetLLVMFunctionAttributes(MD, FnInfo, ThunkFn);
1690 CGM.SetLLVMFunctionAttributesForDefinition(MD, ThunkFn);
1702 CodeGenFunction CGF(CGM);
1749 llvm::ArrayType::get(CGM.IntTy, 1 + VBT.ReusingBase->getNumVBases());
1751 assert(!CGM.getModule().getNamedGlobal(Name) &&
1754 CGM.CreateOrReplaceCXXRuntimeVariable(Name, VBTableType, Linkage);
1785 Offsets[0] = llvm::ConstantInt::get(CGM.IntTy, -VBPtrOffset.getQuantity());
1787 MicrosoftVTableContext &Context = CGM.getMicrosoftVTableContext();
1802 Offsets[VBIndex] = llvm::ConstantInt::get(CGM.IntTy, Offset.getQuantity());
1809 llvm::ArrayType::get(CGM.IntTy, Offsets.size());
1949 CGF.CGM.CreateRuntimeFunction(TLRegDtorTy, "__tlregdtor");
1967 CodeGenModule &CGM,
1975 auto AddToXDU = [&CGM](llvm::Function *InitFunc) {
1977 CGM.getModule(), InitFunc->getType(), /*IsConstant=*/true,
1983 CGM.addUsedGlobal(InitFuncPtr);
2001 llvm::FunctionType::get(CGM.VoidTy, /*isVarArg=*/false);
2002 llvm::Function *InitFunc = CGM.CreateGlobalInitOrDestructFunction(
2005 CodeGenFunction(CGM).GenerateCXXGlobalInitFunc(InitFunc, NonComdatInits);
2014 CGF.CGM.ErrorUnsupported(VD, "thread wrappers");
2027 F->setComdat(CGM.getModule().getOrInsertComdat(F->getName()));
2038 CGM.ErrorUnsupported(&D, "dynamic TLS initialization");
2079 new llvm::GlobalVariable(CGM.getModule(), GuardTy, false,
2085 CGM.getModule().getOrInsertComdat(GI->Guard->getName()));
2138 fields.push_back(CGM.VoidPtrTy); // FunctionPointerOrVirtualThunk
2140 fields.push_back(CGM.IntTy); // FieldOffset
2144 fields.push_back(CGM.IntTy);
2146 fields.push_back(CGM.IntTy);
2148 fields.push_back(CGM.IntTy); // VirtualBaseAdjustmentOffset
2152 return llvm::StructType::get(CGM.getLLVMContext(), fields);
2163 fields.push_back(llvm::Constant::getNullValue(CGM.VoidPtrTy));
2209 CGM.IntTy, NonVirtualBaseAdjustment.getQuantity()));
2215 fields.push_back(llvm::ConstantInt::get(CGM.IntTy, Offs.getQuantity()));
2230 llvm::ConstantInt::get(CGM.IntTy, offset.getQuantity());
2266 CodeGenTypes &Types = CGM.getTypes();
2279 Ty = CGM.PtrDiffTy;
2281 FirstField = CGM.GetAddrOfFunction(MD, Ty);
2282 FirstField = llvm::ConstantExpr::getBitCast(FirstField, CGM.VoidPtrTy);
2285 CGM.getMicrosoftVTableContext().getMethodVFTableLocation(MD);
2286 if (!CGM.getTypes().isFuncTypeConvertible(
2288 CGM.ErrorUnsupported(MD, "pointer to virtual member function with "
2290 FirstField = llvm::Constant::getNullValue(CGM.VoidPtrTy);
2292 CGM.ErrorUnsupported(MD, "pointer to fastcall virtual member function");
2293 FirstField = llvm::Constant::getNullValue(CGM.VoidPtrTy);
2295 CGM.ErrorUnsupported(MD, "pointer to virtual member function overriding "
2297 FirstField = llvm::Constant::getNullValue(CGM.VoidPtrTy);
2300 FirstField = llvm::ConstantExpr::getBitCast(Thunk, CGM.VoidPtrTy);
2382 fields.push_back(llvm::Constant::getNullValue(CGM.VoidPtrTy));
2444 This = Builder.CreateBitCast(This, CGM.Int8PtrTy);
2449 CGM.Int32Ty->getPointerTo(0)->getPointerTo(0));
2459 VBaseOffs = Builder.CreateBitCast(VBaseOffs, CGM.Int32Ty->getPointerTo(0));
2469 Base = Builder.CreateBitCast(Base, CGM.Int8PtrTy);
2494 DiagnosticsEngine &Diags = CGF.CGM.getDiags();
2502 VBPtrOffset = llvm::ConstantInt::get(CGM.IntTy, offs.getQuantity());
2513 llvm::PHINode *Phi = Builder.CreatePHI(CGM.Int8PtrTy, 2, "memptr.base");
2642 Adj = llvm::ConstantExpr::getTruncOrBitCast(Adj, CGM.IntTy);
2727 Adj = llvm::ConstantExpr::getTruncOrBitCast(Adj, CGM.IntTy);
2764 CGM.getTypes().GetFunctionType(
2765 CGM.getTypes().arrangeCXXMethodType(RD, FPT));
2803 CGCXXABI *clang::CodeGen::CreateMicrosoftCXXABI(CodeGenModule &CGM) {
2804 return new MicrosoftCXXABI(CGM);
2837 static llvm::GlobalVariable *getTypeInfoVTable(CodeGenModule &CGM) {
2839 if (auto VTable = CGM.getModule().getNamedGlobal(MangledName))
2841 return new llvm::GlobalVariable(CGM.getModule(), CGM.Int8PtrTy,
2932 : CGM(ABI.CGM), Context(CGM.getContext()),
2933 VMContext(CGM.getLLVMContext()), Module(CGM.getModule()), RD(RD),
2934 Linkage(getLinkageForRTTI(CGM.getContext().getTagDeclType(RD))),
2943 CodeGenModule &CGM;
3015 llvm::Value *GEPIndices[] = {llvm::ConstantInt::get(CGM.IntTy, 0),
3016 llvm::ConstantInt::get(CGM.IntTy, 0)};
3024 CHD->setComdat(CGM.getModule().getOrInsertComdat(CHD->getName()));
3030 llvm::ConstantInt::get(CGM.IntTy, 0), // Unknown
3031 llvm::ConstantInt::get(CGM.IntTy, Flags),
3032 llvm::ConstantInt::get(CGM.IntTy, Classes.size()),
3062 BCA->setComdat(CGM.getModule().getOrInsertComdat(BCA->getName()));
3081 auto &VTableContext = CGM.getMicrosoftVTableContext();
3104 BCD->setComdat(CGM.getModule().getOrInsertComdat(BCD->getName()));
3110 llvm::ConstantInt::get(CGM.IntTy, Class.NumBases),
3111 llvm::ConstantInt::get(CGM.IntTy, Class.OffsetInVBase),
3112 llvm::ConstantInt::get(CGM.IntTy, VBPtrOffset),
3113 llvm::ConstantInt::get(CGM.IntTy, OffsetInVBTable),
3114 llvm::ConstantInt::get(CGM.IntTy, Class.Flags),
3152 llvm::ConstantInt::get(CGM.IntTy, ABI.isImageRelative()),
3153 llvm::ConstantInt::get(CGM.IntTy, OffsetToTop),
3154 llvm::ConstantInt::get(CGM.IntTy, VFPtrOffset),
3156 CGM.GetAddrOfRTTIDescriptor(Context.getTypeDeclType(RD))),
3165 COL->setComdat(CGM.getModule().getOrInsertComdat(COL->getName()));
3225 if (llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(MangledName))
3226 return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
3229 llvm::ConstantInt::get(CGM.IntTy, Flags), // Flags
3234 CGM.getModule(), CatchHandlerTypeType, /*Constant=*/true,
3255 if (llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(MangledName))
3256 return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
3267 getTypeInfoVTable(CGM), // VFPtr
3268 llvm::ConstantPointerNull::get(CGM.Int8PtrTy), // Runtime data
3269 llvm::ConstantDataArray::getString(CGM.getLLVMContext(), TypeInfoString)};
3273 CGM.getModule(), TypeDescriptorType, /*Constant=*/false,
3278 Var->setComdat(CGM.getModule().getOrInsertComdat(Var->getName()));
3279 return llvm::ConstantExpr::getBitCast(Var, CGM.Int8PtrTy);
3289 static void emitCXXConstructor(CodeGenModule &CGM,
3293 llvm::Function *Fn = CGM.codegenCXXStructor(ctor, StructorType::Complete);
3294 CGM.maybeSetTrivialComdat(*ctor, *Fn);
3297 static void emitCXXDestructor(CodeGenModule &CGM, const CXXDestructorDecl *dtor,
3303 bool ProducedAlias = !CGM.TryEmitDefinitionAsAlias(
3309 CGM.getVTables().EmitThunks(GlobalDecl(dtor, Dtor_Complete));
3317 if (dtorType == StructorType::Base && !CGM.TryEmitBaseDestructorAsAlias(dtor))
3320 llvm::Function *Fn = CGM.codegenCXXStructor(dtor, dtorType);
3322 Fn->setComdat(CGM.getModule().getOrInsertComdat(Fn->getName()));
3328 emitCXXConstructor(CGM, CD, Type);
3331 emitCXXDestructor(CGM, cast<CXXDestructorDecl>(MD), Type);
3346 if (llvm::GlobalValue *GV = CGM.getModule().getNamedValue(ThunkName))
3350 const CGFunctionInfo &FnInfo = CGM.getTypes().arrangeMSCtorClosure(CD, CT);
3351 llvm::FunctionType *ThunkTy = CGM.getTypes().GetFunctionType(FnInfo);
3355 ThunkTy, getLinkageForRTTI(RecordTy), ThunkName.str(), &CGM.getModule());
3361 CodeGenFunction CGF(CGM);
3429 llvm::Value *CalleeFn = CGM.getAddrOfCXXStructor(CD, StructorType::Complete);
3430 const CGFunctionInfo &CalleeInfo = CGM.getTypes().arrangeCXXConstructorCall(
3451 RD ? CGM.getContext().getCopyConstructorForExceptionObject(RD) : nullptr;
3464 if (llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(MangledName))
3478 CopyCtor = CGM.getAddrOfCXXStructor(CD, StructorType::Complete);
3480 CopyCtor = llvm::ConstantExpr::getBitCast(CopyCtor, CGM.Int8PtrTy);
3482 CopyCtor = llvm::Constant::getNullValue(CGM.Int8PtrTy);
3509 llvm::ConstantInt::get(CGM.IntTy, Flags), // Flags
3511 llvm::ConstantInt::get(CGM.IntTy, NVOffset), // NonVirtualAdjustment
3512 llvm::ConstantInt::get(CGM.IntTy, VBPtrOffset), // OffsetToVBPtr
3513 llvm::ConstantInt::get(CGM.IntTy, VBIndex), // VBTableIndex
3514 llvm::ConstantInt::get(CGM.IntTy, Size), // Size
3519 CGM.getModule(), CTType, /*Constant=*/true, getLinkageForRTTI(T),
3524 GV->setComdat(CGM.getModule().getOrInsertComdat(GV->getName()));
3561 MicrosoftVTableContext &VTableContext = CGM.getMicrosoftVTableContext();
3626 llvm::ConstantInt::get(CGM.IntTy, NumEntries), // NumEntries
3637 CGM.getModule(), CTAType, /*Constant=*/true, getLinkageForRTTI(T),
3642 CTA->setComdat(CGM.getModule().getOrInsertComdat(CTA->getName()));
3670 if (llvm::GlobalVariable *GV = CGM.getModule().getNamedGlobal(MangledName))
3684 llvm::Constant *CleanupFn = llvm::Constant::getNullValue(CGM.Int8PtrTy);
3689 CGM.getAddrOfCXXStructor(DtorD, StructorType::Complete),
3690 CGM.Int8PtrTy);
3693 getImageRelativeConstant(llvm::Constant::getNullValue(CGM.Int8PtrTy));
3695 llvm::ConstantExpr::getBitCast(CTA, CGM.Int8PtrTy));
3698 llvm::ConstantInt::get(CGM.IntTy, Flags), // Flags
3704 CGM.getModule(), TIType, /*Constant=*/true, getLinkageForRTTI(T),
3709 GV->setComdat(CGM.getModule().getOrInsertComdat(GV->getName()));
3727 llvm::Value *Args[] = {CGF.Builder.CreateBitCast(AI, CGM.Int8PtrTy), TI};