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