Lines Matching defs:CGF
121 void emitVirtualObjectDelete(CodeGenFunction &CGF, const CXXDeleteExpr *DE,
125 void emitRethrow(CodeGenFunction &CGF, bool isNoReturn) override;
126 void emitThrow(CodeGenFunction &CGF, const CXXThrowExpr *E) override;
128 void emitBeginCatch(CodeGenFunction &CGF, const CXXCatchStmt *C) override;
148 void EmitBadTypeidCall(CodeGenFunction &CGF) override;
149 llvm::Value *EmitTypeid(CodeGenFunction &CGF, QualType SrcRecordTy,
160 llvm::Value *emitExactDynamicCast(CodeGenFunction &CGF, Address Value,
168 llvm::Value *emitDynamicCastCall(CodeGenFunction &CGF, Address Value,
173 llvm::Value *emitDynamicCastToVoid(CodeGenFunction &CGF, Address Value,
176 bool EmitBadCastCall(CodeGenFunction &CGF) override;
182 GetVirtualBaseClassOffset(CodeGenFunction &CGF, Address This,
187 EmitCtorCompleteObjectHandler(CodeGenFunction &CGF,
191 EmitDtorCompleteObjectHandler(CodeGenFunction &CGF);
193 void initializeHiddenVirtualInheritanceMembers(CodeGenFunction &CGF,
281 adjustThisArgumentForVirtualFunctionCall(CodeGenFunction &CGF, GlobalDecl GD,
285 void addImplicitStructorParams(CodeGenFunction &CGF, QualType &ResTy,
288 void EmitInstanceFunctionProlog(CodeGenFunction &CGF) override;
290 AddedStructorArgs getImplicitConstructorArgs(CodeGenFunction &CGF,
296 llvm::Value *getCXXDestructorImplicitParam(CodeGenFunction &CGF,
302 void EmitDestructorCall(CodeGenFunction &CGF, const CXXDestructorDecl *DD,
313 bool isVirtualOffsetNeededForVTableField(CodeGenFunction &CGF,
327 CodeGenFunction &CGF, const CXXRecordDecl *VTableClass,
333 CGCallee getVirtualFunctionPointer(CodeGenFunction &CGF, GlobalDecl GD,
337 llvm::Value *EmitVirtualDestructorCall(CodeGenFunction &CGF,
342 void adjustCallArgsForDestructorThunk(CodeGenFunction &CGF, GlobalDecl GD,
346 CallArgs.add(RValue::get(getStructorImplicitParamValue(CGF)),
417 llvm::Value *performThisAdjustment(CodeGenFunction &CGF, Address This,
421 llvm::Value *performReturnAdjustment(CodeGenFunction &CGF, Address Ret,
435 LValue EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF, const VarDecl *VD,
438 void EmitGuardedInit(CodeGenFunction &CGF, const VarDecl &D,
441 void registerGlobalDtor(CodeGenFunction &CGF, const VarDecl &D,
472 Address InitializeArrayCookie(CodeGenFunction &CGF,
477 llvm::Value *readArrayCookieImpl(CodeGenFunction &CGF,
616 llvm::Value *GetVBaseOffsetFromVBPtr(CodeGenFunction &CGF,
622 llvm::Value *GetVBaseOffsetFromVBPtr(CodeGenFunction &CGF,
630 return GetVBaseOffsetFromVBPtr(CGF, Base, VBPOffset, VBTOffset, VBPtr);
634 performBaseAdjustment(CodeGenFunction &CGF, Address Value,
639 llvm::Value *AdjustVirtualBase(CodeGenFunction &CGF, const Expr *E,
656 void EmitVBPtrStores(CodeGenFunction &CGF, const CXXRecordDecl *RD);
685 llvm::Value *EmitMemberPointerComparison(CodeGenFunction &CGF,
691 llvm::Value *EmitMemberPointerIsNotNull(CodeGenFunction &CGF,
696 EmitMemberDataPointerAddress(CodeGenFunction &CGF, const Expr *E,
706 llvm::Value *EmitMemberPointerConversion(CodeGenFunction &CGF,
719 EmitLoadOfMemberFunctionPointer(CodeGenFunction &CGF, const Expr *E,
805 LoadVTablePtr(CodeGenFunction &CGF, Address This,
895 void MicrosoftCXXABI::emitVirtualObjectDelete(CodeGenFunction &CGF,
904 llvm::Value *MDThis = EmitVirtualDestructorCall(CGF, Dtor, DtorType, Ptr, DE);
906 CGF.EmitDeleteCall(DE->getOperatorDelete(), MDThis, ElementType);
909 void MicrosoftCXXABI::emitRethrow(CodeGenFunction &CGF, bool isNoReturn) {
915 CGF.EmitNoreturnRuntimeCallOrInvoke(Fn, Args);
917 CGF.EmitRuntimeCallOrInvoke(Fn, Args);
920 void MicrosoftCXXABI::emitBeginCatch(CodeGenFunction &CGF,
925 llvm::BasicBlock *CatchPadBB = CGF.Builder.GetInsertBlock();
928 CGF.CurrentFuncletPad = CPI;
933 CGF.EHStack.pushCleanup<CatchRetScope>(NormalCleanup, CPI);
937 CodeGenFunction::AutoVarEmission var = CGF.EmitAutoVarAlloca(*CatchParam);
938 CPI->setArgOperand(2, var.getObjectAddress(CGF).emitRawPointer(CGF));
939 CGF.EHStack.pushCleanup<CatchRetScope>(NormalCleanup, CPI);
940 CGF.EmitAutoVarCleanups(var);
947 MicrosoftCXXABI::performBaseAdjustment(CodeGenFunction &CGF, Address Value,
949 Value = Value.withElementType(CGF.Int8Ty);
957 return std::make_tuple(Value, llvm::ConstantInt::get(CGF.Int32Ty, 0),
973 GetVirtualBaseClassOffset(CGF, Value, SrcDecl, PolymorphicBase);
974 llvm::Value *Ptr = CGF.Builder.CreateInBoundsGEP(
975 Value.getElementType(), Value.emitRawPointer(CGF), Offset);
977 CGF.CGM.getVBaseAlignment(Value.getAlignment(), SrcDecl, PolymorphicBase);
978 return std::make_tuple(Address(Ptr, CGF.Int8Ty, VBaseAlign), Offset,
987 static llvm::CallBase *emitRTtypeidCall(CodeGenFunction &CGF,
989 llvm::Type *ArgTypes[] = {CGF.Int8PtrTy};
991 llvm::FunctionType::get(CGF.Int8PtrTy, ArgTypes, false);
993 llvm::FunctionCallee Fn = CGF.CGM.CreateRuntimeFunction(FTy, "__RTtypeid");
994 return CGF.EmitRuntimeCallOrInvoke(Fn, Args);
997 void MicrosoftCXXABI::EmitBadTypeidCall(CodeGenFunction &CGF) {
999 emitRTtypeidCall(CGF, llvm::Constant::getNullValue(CGM.VoidPtrTy));
1001 CGF.Builder.CreateUnreachable();
1004 llvm::Value *MicrosoftCXXABI::EmitTypeid(CodeGenFunction &CGF,
1009 performBaseAdjustment(CGF, ThisPtr, SrcRecordTy);
1010 llvm::CallBase *Typeid = emitRTtypeidCall(CGF, ThisPtr.emitRawPointer(CGF));
1011 return CGF.Builder.CreateBitCast(Typeid, StdTypeInfoPtrTy);
1022 CodeGenFunction &CGF, Address This, QualType SrcRecordTy, QualType DestTy,
1025 CGF.CGM.GetAddrOfRTTIDescriptor(SrcRecordTy.getUnqualifiedType());
1027 CGF.CGM.GetAddrOfRTTIDescriptor(DestRecordTy.getUnqualifiedType());
1031 performBaseAdjustment(CGF, This, SrcRecordTy);
1032 llvm::Value *ThisPtr = This.emitRawPointer(CGF);
1033 Offset = CGF.Builder.CreateTrunc(Offset, CGF.Int32Ty);
1041 llvm::Type *ArgTypes[] = {CGF.Int8PtrTy, CGF.Int32Ty, CGF.Int8PtrTy,
1042 CGF.Int8PtrTy, CGF.Int32Ty};
1043 llvm::FunctionCallee Function = CGF.CGM.CreateRuntimeFunction(
1044 llvm::FunctionType::get(CGF.Int8PtrTy, ArgTypes, false),
1048 llvm::ConstantInt::get(CGF.Int32Ty, DestTy->isReferenceType())};
1049 return CGF.EmitRuntimeCallOrInvoke(Function, Args);
1052 llvm::Value *MicrosoftCXXABI::emitDynamicCastToVoid(CodeGenFunction &CGF,
1056 performBaseAdjustment(CGF, Value, SrcRecordTy);
1060 llvm::Type *ArgTypes[] = {CGF.Int8PtrTy};
1061 llvm::FunctionCallee Function = CGF.CGM.CreateRuntimeFunction(
1062 llvm::FunctionType::get(CGF.Int8PtrTy, ArgTypes, false),
1064 llvm::Value *Args[] = {Value.emitRawPointer(CGF)};
1065 return CGF.EmitRuntimeCall(Function, Args);
1068 bool MicrosoftCXXABI::EmitBadCastCall(CodeGenFunction &CGF) {
1073 CodeGenFunction &CGF, Address This, const CXXRecordDecl *ClassDecl,
1087 GetVBaseOffsetFromVBPtr(CGF, This, VBPtrOffset, VBTableOffset);
1089 CGF.Builder.CreateSExtOrBitCast(VBPtrToNewBase, CGM.PtrDiffTy);
1090 return CGF.Builder.CreateNSWAdd(VBPtrOffset, VBPtrToNewBase);
1198 MicrosoftCXXABI::EmitCtorCompleteObjectHandler(CodeGenFunction &CGF,
1200 llvm::Value *IsMostDerivedClass = getStructorImplicitParamValue(CGF);
1204 CGF.Builder.CreateIsNotNull(IsMostDerivedClass, "is_complete_object");
1206 llvm::BasicBlock *CallVbaseCtorsBB = CGF.createBasicBlock("ctor.init_vbases");
1207 llvm::BasicBlock *SkipVbaseCtorsBB = CGF.createBasicBlock("ctor.skip_vbases");
1208 CGF.Builder.CreateCondBr(IsCompleteObject,
1211 CGF.EmitBlock(CallVbaseCtorsBB);
1214 EmitVBPtrStores(CGF, RD);
1216 // CGF will put the base ctor calls in this basic block for us later.
1222 MicrosoftCXXABI::EmitDtorCompleteObjectHandler(CodeGenFunction &CGF) {
1223 llvm::Value *IsMostDerivedClass = getStructorImplicitParamValue(CGF);
1227 CGF.Builder.CreateIsNotNull(IsMostDerivedClass, "is_complete_object");
1229 llvm::BasicBlock *CallVbaseDtorsBB = CGF.createBasicBlock("Dtor.dtor_vbases");
1230 llvm::BasicBlock *SkipVbaseDtorsBB = CGF.createBasicBlock("Dtor.skip_vbases");
1231 CGF.Builder.CreateCondBr(IsCompleteObject,
1234 CGF.EmitBlock(CallVbaseDtorsBB);
1235 // CGF will put the base dtor calls in this basic block for us later.
1241 CodeGenFunction &CGF, const CXXRecordDecl *RD) {
1258 CGBuilderTy &Builder = CGF.Builder;
1270 GetVirtualBaseClassOffset(CGF, getThisAddress(CGF), RD, VBase);
1277 VtorDispValue = Builder.CreateTruncOrBitCast(VtorDispValue, CGF.Int32Ty);
1280 Int8This = getThisValue(CGF);
1283 Builder.CreateInBoundsGEP(CGF.Int8Ty, Int8This, VBaseOffset);
1285 VtorDispPtr = Builder.CreateConstGEP1_32(CGF.Int8Ty, VtorDispPtr, -4);
1319 void MicrosoftCXXABI::EmitVBPtrStores(CodeGenFunction &CGF,
1321 Address This = getThisAddress(CGF);
1336 Address VBPtr = CGF.Builder.CreateConstInBoundsByteGEP(This, Offs);
1338 CGF.Builder.CreateConstInBoundsGEP2_32(GV->getValueType(), GV, 0, 0);
1340 CGF.Builder.CreateStore(GVPtr, VBPtr);
1471 CodeGenFunction &CGF, GlobalDecl GD, Address This,
1480 This = This.withElementType(CGF.Int8Ty);
1482 return CGF.Builder.CreateConstByteGEP(This, Adjustment);
1511 Result = Result.withElementType(CGF.Int8Ty);
1516 GetVirtualBaseClassOffset(CGF, Result, Derived, VBase);
1517 llvm::Value *VBasePtr = CGF.Builder.CreateInBoundsGEP(
1518 Result.getElementType(), Result.emitRawPointer(CGF), VBaseOffset);
1520 CGF.CGM.getVBaseAlignment(Result.getAlignment(), Derived, VBase);
1521 Result = Address(VBasePtr, CGF.Int8Ty, VBaseAlign);
1525 Result = Result.withElementType(CGF.Int8Ty);
1531 Result = CGF.Builder.CreateConstByteGEP(Result, StaticOffset);
1533 Result = CGF.Builder.CreateConstInBoundsByteGEP(Result, StaticOffset);
1539 void MicrosoftCXXABI::addImplicitStructorParams(CodeGenFunction &CGF,
1543 const CXXMethodDecl *MD = cast<CXXMethodDecl>(CGF.CurGD.getDecl());
1547 Context, /*DC=*/nullptr, CGF.CurGD.getDecl()->getLocation(),
1557 getStructorImplicitParamDecl(CGF) = IsMostDerived;
1558 } else if (isDeletingDtor(CGF.CurGD)) {
1560 Context, /*DC=*/nullptr, CGF.CurGD.getDecl()->getLocation(),
1564 getStructorImplicitParamDecl(CGF) = ShouldDelete;
1568 void MicrosoftCXXABI::EmitInstanceFunctionProlog(CodeGenFunction &CGF) {
1570 if (CGF.CurFuncDecl && CGF.CurFuncDecl->hasAttr<NakedAttr>())
1585 llvm::Value *This = loadIncomingCXXThis(CGF);
1586 const CXXMethodDecl *MD = cast<CXXMethodDecl>(CGF.CurGD.getDecl());
1587 if (!CGF.CurFuncIsThunk && MD->isVirtual()) {
1588 CharUnits Adjustment = getVirtualFunctionPrologueThisAdjustment(CGF.CurGD);
1591 This = CGF.Builder.CreateConstInBoundsGEP1_32(CGF.Int8Ty, This,
1595 setCXXABIThisValue(CGF, This);
1605 if (HasThisReturn(CGF.CurGD) || hasMostDerivedReturn(CGF.CurGD))
1606 CGF.Builder.CreateStore(getThisValue(CGF), CGF.ReturnValue);
1609 assert(getStructorImplicitParamDecl(CGF) &&
1611 getStructorImplicitParamValue(CGF)
1612 = CGF.Builder.CreateLoad(
1613 CGF.GetAddrOfLocalVar(getStructorImplicitParamDecl(CGF)),
1617 if (isDeletingDtor(CGF.CurGD)) {
1618 assert(getStructorImplicitParamDecl(CGF) &&
1620 getStructorImplicitParamValue(CGF)
1621 = CGF.Builder.CreateLoad(
1622 CGF.GetAddrOfLocalVar(getStructorImplicitParamDecl(CGF)),
1628 CodeGenFunction &CGF, const CXXConstructorDecl *D, CXXCtorType Type,
1640 MostDerivedArg = getStructorImplicitParamValue(CGF);
1651 CodeGenFunction &CGF, const CXXDestructorDecl *DD, CXXDtorType Type,
1656 void MicrosoftCXXABI::EmitDestructorCall(CodeGenFunction &CGF,
1673 This = adjustThisArgumentForVirtualFunctionCall(CGF, GlobalDecl(DD, Type),
1678 if (ForVirtualBase && isa<CXXConstructorDecl>(CGF.CurCodeDecl)) {
1679 BaseDtorEndBB = EmitDtorCompleteObjectHandler(CGF);
1683 getCXXDestructorImplicitParam(CGF, DD, Type, ForVirtualBase,
1685 CGF.EmitCXXDestructorCall(GD, Callee, CGF.getAsNaturalPointerTo(This, ThisTy),
1691 CGF.Builder.CreateBr(BaseDtorEndBB);
1692 CGF.EmitBlock(BaseDtorEndBB);
1787 CodeGenFunction &CGF, CodeGenFunction::VPtr Vptr) {
1792 CodeGenFunction &CGF, const CXXRecordDecl *VTableClass, BaseSubobject Base,
1952 CGCallee MicrosoftCXXABI::getVirtualFunctionPointer(CodeGenFunction &CGF,
1957 CGBuilderTy &Builder = CGF.Builder;
1961 adjustThisArgumentForVirtualFunctionCall(CGF, GD, This, true);
1964 llvm::Value *VTable = CGF.GetVTablePtr(VPtr, Ty->getPointerTo(),
1983 if (CGF.ShouldEmitVTableTypeCheckedLoad(MethodDecl->getParent())) {
1984 VFunc = CGF.EmitVTableTypeCheckedLoad(
1991 CGF.EmitTypeMetadataCodeForVCall(getObjectWithVPtr(), VTable, Loc);
1995 VFunc = Builder.CreateAlignedLoad(Ty, VFuncPtr, CGF.getPointerAlign());
2003 CodeGenFunction &CGF, const CXXDestructorDecl *Dtor, CXXDtorType DtorType,
2016 llvm::FunctionType *Ty = CGF.CGM.getTypes().GetFunctionType(*FInfo);
2021 llvm::IntegerType::getInt32Ty(CGF.getLLVMContext()),
2031 This = adjustThisArgumentForVirtualFunctionCall(CGF, GD, This, true);
2033 CGF.EmitCXXDestructorCall(GD, Callee, This.emitRawPointer(CGF), ThisTy,
2108 CodeGenFunction CGF(CGM);
2109 CGF.CurGD = GlobalDecl(MD);
2110 CGF.CurFuncIsThunk = true;
2115 buildThisParam(CGF, FunctionArgs);
2118 CGF.StartFunction(GlobalDecl(), FnInfo.getReturnType(), ThunkFn, FnInfo,
2121 ApplyDebugLocation AL(CGF, MD->getLocation());
2122 setCXXABIThisValue(CGF, loadIncomingCXXThis(CGF));
2127 llvm::Value *VTable = CGF.GetVTablePtr(
2128 getThisAddress(CGF), ThunkPtrTy->getPointerTo(), MD->getParent());
2130 llvm::Value *VFuncPtr = CGF.Builder.CreateConstInBoundsGEP1_64(
2133 CGF.Builder.CreateAlignedLoad(ThunkPtrTy, VFuncPtr, CGF.getPointerAlign());
2135 CGF.EmitMustTailThunk(MD, getThisValue(CGF), {ThunkTy, Callee});
2229 CodeGenFunction &CGF, Address This,
2233 return This.emitRawPointer(CGF);
2235 This = This.withElementType(CGF.Int8Ty);
2239 V = This.emitRawPointer(CGF);
2244 CGF.Builder.CreateConstInBoundsByteGEP(This,
2246 VtorDispPtr = VtorDispPtr.withElementType(CGF.Int32Ty);
2247 llvm::Value *VtorDisp = CGF.Builder.CreateLoad(VtorDispPtr, "vtordisp");
2248 V = CGF.Builder.CreateGEP(This.getElementType(), This.emitRawPointer(CGF),
2249 CGF.Builder.CreateNeg(VtorDisp));
2263 CGF, Address(V, CGF.Int8Ty, CGF.getPointerAlign()),
2266 V = CGF.Builder.CreateInBoundsGEP(CGF.Int8Ty, VBPtr, VBaseOffset);
2274 V = CGF.Builder.CreateConstGEP1_32(CGF.Int8Ty, V, TA.NonVirtual);
2282 CodeGenFunction &CGF, Address Ret,
2286 return Ret.emitRawPointer(CGF);
2288 Ret = Ret.withElementType(CGF.Int8Ty);
2290 llvm::Value *V = Ret.emitRawPointer(CGF);
2293 int32_t IntSize = CGF.getIntSize().getQuantity();
2296 GetVBaseOffsetFromVBPtr(CGF, Ret, RA.Virtual.Microsoft.VBPtrOffset,
2298 V = CGF.Builder.CreateInBoundsGEP(CGF.Int8Ty, VBPtr, VBaseOffset);
2302 V = CGF.Builder.CreateConstInBoundsGEP1_32(CGF.Int8Ty, V, RA.NonVirtual);
2328 llvm::Value *MicrosoftCXXABI::readArrayCookieImpl(CodeGenFunction &CGF,
2331 Address numElementsPtr = allocPtr.withElementType(CGF.SizeTy);
2332 return CGF.Builder.CreateLoad(numElementsPtr);
2335 Address MicrosoftCXXABI::InitializeArrayCookie(CodeGenFunction &CGF,
2349 Address numElementsPtr = cookiePtr.withElementType(CGF.SizeTy);
2350 CGF.Builder.CreateStore(numElements, numElementsPtr);
2354 return CGF.Builder.CreateConstInBoundsByteGEP(newPtr, cookieSize);
2357 static void emitGlobalDtorWithTLRegDtor(CodeGenFunction &CGF, const VarDecl &VD,
2361 llvm::Constant *DtorStub = CGF.createAtExitStub(VD, Dtor, Addr);
2365 CGF.IntTy, DtorStub->getType(), /*isVarArg=*/false);
2367 llvm::FunctionCallee TLRegDtor = CGF.CGM.CreateRuntimeFunction(
2373 CGF.EmitNounwindRuntimeCall(TLRegDtor, DtorStub);
2376 void MicrosoftCXXABI::registerGlobalDtor(CodeGenFunction &CGF, const VarDecl &D,
2383 return emitGlobalDtorWithTLRegDtor(CGF, D, Dtor, Addr);
2390 CGF.registerGlobalDtorWithAtExit(D, Dtor, Addr);
2474 static void emitTlsGuardCheck(CodeGenFunction &CGF, llvm::GlobalValue *TlsGuard,
2478 CGF.Builder.CreateLoad(Address(TlsGuard, CGF.Int8Ty, CharUnits::One()));
2480 CGF.Builder.CreateICmpEQ(TlsGuardValue, CGF.Builder.getInt8(0));
2481 CGF.Builder.CreateCondBr(CmpResult, DynInitBB, ContinueBB);
2484 static void emitDynamicTlsInitializationCall(CodeGenFunction &CGF,
2487 llvm::FunctionCallee Initializer = getDynTlsOnDemandInitFn(CGF.CGM);
2490 llvm::CallInst *CallVal = CGF.Builder.CreateCall(InitializerFunction);
2493 CGF.Builder.CreateBr(ContinueBB);
2496 static void emitDynamicTlsInitialization(CodeGenFunction &CGF) {
2498 CGF.createBasicBlock("dyntls.dyn_init", CGF.CurFn);
2500 CGF.createBasicBlock("dyntls.continue", CGF.CurFn);
2502 llvm::GlobalValue *TlsGuard = getTlsGuardVar(CGF.CGM);
2504 emitTlsGuardCheck(CGF, TlsGuard, DynInitBB, ContinueBB);
2505 CGF.Builder.SetInsertPoint(DynInitBB);
2506 emitDynamicTlsInitializationCall(CGF, TlsGuard, ContinueBB);
2507 CGF.Builder.SetInsertPoint(ContinueBB);
2510 LValue MicrosoftCXXABI::EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF,
2518 emitDynamicTlsInitialization(CGF);
2522 llvm::Value *V = CGF.CGM.GetAddrOfGlobalVar(VD);
2523 llvm::Type *RealVarTy = CGF.getTypes().ConvertTypeForMem(VD->getType());
2525 CharUnits Alignment = CGF.getContext().getDeclAlign(VD);
2529 ? CGF.EmitLoadOfReferenceLValue(Addr, VD->getType(),
2531 : CGF.MakeAddrLValue(Addr, LValType, AlignmentSource::Decl);
2592 void Emit(CodeGenFunction &CGF, Flags flags) override {
2595 CGBuilderTy &Builder = CGF.Builder;
2598 llvm::ConstantInt::get(CGF.IntTy, ~(1ULL << GuardNum));
2607 void Emit(CodeGenFunction &CGF, Flags flags) override {
2609 CGF.EmitNounwindRuntimeCall(getInitThreadAbortFn(CGF.CGM), Guard);
2614 void MicrosoftCXXABI::EmitGuardedInit(CodeGenFunction &CGF, const VarDecl &D,
2621 llvm::Function *F = CGF.CurFn;
2624 CGF.EmitCXXGlobalVarDeclInit(D, GV, PerformInit);
2635 CGBuilderTy &Builder = CGF.Builder;
2636 llvm::IntegerType *GuardTy = CGF.Int32Ty;
2664 ErrorUnsupportedABI(CGF, "more than 32 guarded initializations");
2715 llvm::BasicBlock *InitBlock = CGF.createBasicBlock("init");
2716 llvm::BasicBlock *EndBlock = CGF.createBasicBlock("init.end");
2717 CGF.EmitCXXGuardedInitBranch(NeedsInit, InitBlock, EndBlock,
2722 CGF.EmitBlock(InitBlock);
2724 CGF.EHStack.pushCleanup<ResetGuardBit>(EHCleanup, GuardAddr, GuardNum);
2725 CGF.EmitCXXGlobalVarDeclInit(D, GV, PerformInit);
2726 CGF.PopCleanupBlock();
2730 CGF.EmitBlock(EndBlock);
2751 llvm::BasicBlock *AttemptInitBlock = CGF.createBasicBlock("init.attempt");
2752 llvm::BasicBlock *EndBlock = CGF.createBasicBlock("init.end");
2753 CGF.EmitCXXGuardedInitBranch(IsUninitialized, AttemptInitBlock, EndBlock,
2758 CGF.EmitBlock(AttemptInitBlock);
2759 CGF.EmitNounwindRuntimeCall(getInitThreadHeaderFn(CGM),
2765 llvm::BasicBlock *InitBlock = CGF.createBasicBlock("init");
2769 CGF.EmitBlock(InitBlock);
2770 CGF.EHStack.pushCleanup<CallInitThreadAbort>(EHCleanup, GuardAddr);
2771 CGF.EmitCXXGlobalVarDeclInit(D, GV, PerformInit);
2772 CGF.PopCleanupBlock();
2773 CGF.EmitNounwindRuntimeCall(getInitThreadFooterFn(CGM),
2777 CGF.EmitBlock(EndBlock);
3016 MicrosoftCXXABI::EmitMemberPointerComparison(CodeGenFunction &CGF,
3021 CGBuilderTy &Builder = CGF.Builder;
3076 MicrosoftCXXABI::EmitMemberPointerIsNotNull(CodeGenFunction &CGF,
3079 CGBuilderTy &Builder = CGF.Builder;
3138 MicrosoftCXXABI::GetVBaseOffsetFromVBPtr(CodeGenFunction &CGF,
3143 CGBuilderTy &Builder = CGF.Builder;
3146 CGM.Int8Ty, This.emitRawPointer(CGF), VBPtrOffset, "vbptr");
3155 VBPtrAlign = CGF.getPointerAlign();
3176 CodeGenFunction &CGF, const Expr *E, const CXXRecordDecl *RD,
3178 CGBuilderTy &Builder = CGF.Builder;
3190 VBaseAdjustBB = CGF.createBasicBlock("memptr.vadjust");
3191 SkipAdjustBB = CGF.createBasicBlock("memptr.skip_vadjust");
3196 CGF.EmitBlock(VBaseAdjustBB);
3204 DiagnosticsEngine &Diags = CGF.CGM.getDiags();
3216 GetVBaseOffsetFromVBPtr(CGF, Base, VBPtrOffset, VBTableOffset, &VBPtr);
3223 CGF.EmitBlock(SkipAdjustBB);
3225 Phi->addIncoming(Base.emitRawPointer(CGF), OriginalBB);
3233 CodeGenFunction &CGF, const Expr *E, Address Base, llvm::Value *MemPtr,
3236 CGBuilderTy &Builder = CGF.Builder;
3257 Addr = AdjustVirtualBase(CGF, E, RD, Base, VirtualBaseAdjustmentOffset,
3260 Addr = Base.emitRawPointer(CGF);
3264 return Builder.CreateInBoundsGEP(CGF.Int8Ty, Addr, FieldOffset,
3269 MicrosoftCXXABI::EmitMemberPointerConversion(CodeGenFunction &CGF,
3298 CGBuilderTy &Builder = CGF.Builder;
3301 llvm::Value *IsNotNull = EmitMemberPointerIsNotNull(CGF, Src, SrcTy);
3314 llvm::BasicBlock *ConvertBB = CGF.createBasicBlock("memptr.convert");
3315 llvm::BasicBlock *ContinueBB = CGF.createBasicBlock("memptr.converted");
3317 CGF.EmitBlock(ConvertBB);
3326 CGF.EmitBlock(ContinueBB);
3515 CodeGenFunction &CGF, const Expr *E, Address This,
3522 CGBuilderTy &Builder = CGF.Builder;
3545 ThisPtrForCall = AdjustVirtualBase(CGF, E, RD, This,
3548 ThisPtrForCall = This.emitRawPointer(CGF);
3552 ThisPtrForCall = Builder.CreateInBoundsGEP(CGF.Int8Ty, ThisPtrForCall,
4096 CodeGenFunction CGF(CGM);
4097 CGF.CurGD = GlobalDecl(CD, Ctor_Complete);
4103 buildThisParam(CGF, FunctionArgs);
4128 auto NL = ApplyDebugLocation::CreateEmpty(CGF);
4129 CGF.StartFunction(GlobalDecl(), FnInfo.getReturnType(), ThunkFn, FnInfo,
4132 auto AL = ApplyDebugLocation::CreateArtificial(CGF);
4133 setCXXABIThisValue(CGF, loadIncomingCXXThis(CGF));
4134 llvm::Value *This = getThisValue(CGF);
4137 IsCopy ? CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(&SrcParam), "src")
4157 CodeGenFunction::RunCleanupsScope Cleanups(CGF);
4160 CGF.EmitCallArgs(Args, FPT, llvm::ArrayRef(ArgVec), CD, IsCopy ? 1 : 0);
4164 addImplicitConstructorArgs(CGF, CD, Ctor_Complete,
4174 CGF.EmitCall(CalleeInfo, Callee, ReturnValueSlot(), Args);
4180 CGF.FinishFunction(SourceLocation());
4452 void MicrosoftCXXABI::emitThrow(CodeGenFunction &CGF, const CXXThrowExpr *E) {
4458 Address AI = CGF.CreateMemTemp(ThrowType);
4459 CGF.EmitAnyExprToMem(SubExpr, AI, ThrowType.getQualifiers(),
4467 llvm::Value *Args[] = {AI.emitRawPointer(CGF), TI};
4468 CGF.EmitNoreturnRuntimeCallOrInvoke(getThrowFn(), Args);
4472 MicrosoftCXXABI::LoadVTablePtr(CodeGenFunction &CGF, Address This,
4475 performBaseAdjustment(CGF, This, QualType(RD->getTypeForDecl(), 0));
4476 return {CGF.GetVTablePtr(This, CGM.Int8PtrTy, RD), RD};