Lines Matching refs:CGF
120 void emitVirtualObjectDelete(CodeGenFunction &CGF, const CXXDeleteExpr *DE,
124 void emitRethrow(CodeGenFunction &CGF, bool isNoReturn) override;
125 void emitThrow(CodeGenFunction &CGF, const CXXThrowExpr *E) override;
127 void emitBeginCatch(CodeGenFunction &CGF, const CXXCatchStmt *C) override;
147 void EmitBadTypeidCall(CodeGenFunction &CGF) override;
148 llvm::Value *EmitTypeid(CodeGenFunction &CGF, QualType SrcRecordTy,
155 llvm::Value *EmitDynamicCastCall(CodeGenFunction &CGF, Address Value,
160 llvm::Value *EmitDynamicCastToVoid(CodeGenFunction &CGF, Address Value,
164 bool EmitBadCastCall(CodeGenFunction &CGF) override;
170 GetVirtualBaseClassOffset(CodeGenFunction &CGF, Address This,
175 EmitCtorCompleteObjectHandler(CodeGenFunction &CGF,
179 EmitDtorCompleteObjectHandler(CodeGenFunction &CGF);
181 void initializeHiddenVirtualInheritanceMembers(CodeGenFunction &CGF,
269 adjustThisArgumentForVirtualFunctionCall(CodeGenFunction &CGF, GlobalDecl GD,
273 void addImplicitStructorParams(CodeGenFunction &CGF, QualType &ResTy,
276 void EmitInstanceFunctionProlog(CodeGenFunction &CGF) override;
278 AddedStructorArgs getImplicitConstructorArgs(CodeGenFunction &CGF,
284 llvm::Value *getCXXDestructorImplicitParam(CodeGenFunction &CGF,
290 void EmitDestructorCall(CodeGenFunction &CGF, const CXXDestructorDecl *DD,
301 bool isVirtualOffsetNeededForVTableField(CodeGenFunction &CGF,
315 CodeGenFunction &CGF, const CXXRecordDecl *VTableClass,
325 CGCallee getVirtualFunctionPointer(CodeGenFunction &CGF, GlobalDecl GD,
329 llvm::Value *EmitVirtualDestructorCall(CodeGenFunction &CGF,
334 void adjustCallArgsForDestructorThunk(CodeGenFunction &CGF, GlobalDecl GD, in adjustCallArgsForDestructorThunk() argument
338 CallArgs.add(RValue::get(getStructorImplicitParamValue(CGF)), in adjustCallArgsForDestructorThunk()
409 llvm::Value *performThisAdjustment(CodeGenFunction &CGF, Address This,
412 llvm::Value *performReturnAdjustment(CodeGenFunction &CGF, Address Ret,
425 LValue EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF, const VarDecl *VD,
428 void EmitGuardedInit(CodeGenFunction &CGF, const VarDecl &D,
431 void registerGlobalDtor(CodeGenFunction &CGF, const VarDecl &D,
462 Address InitializeArrayCookie(CodeGenFunction &CGF,
467 llvm::Value *readArrayCookieImpl(CodeGenFunction &CGF,
606 llvm::Value *GetVBaseOffsetFromVBPtr(CodeGenFunction &CGF,
612 llvm::Value *GetVBaseOffsetFromVBPtr(CodeGenFunction &CGF, in GetVBaseOffsetFromVBPtr() argument
620 return GetVBaseOffsetFromVBPtr(CGF, Base, VBPOffset, VBTOffset, VBPtr); in GetVBaseOffsetFromVBPtr()
624 performBaseAdjustment(CodeGenFunction &CGF, Address Value,
629 llvm::Value *AdjustVirtualBase(CodeGenFunction &CGF, const Expr *E,
646 void EmitVBPtrStores(CodeGenFunction &CGF, const CXXRecordDecl *RD);
675 llvm::Value *EmitMemberPointerComparison(CodeGenFunction &CGF,
681 llvm::Value *EmitMemberPointerIsNotNull(CodeGenFunction &CGF,
686 EmitMemberDataPointerAddress(CodeGenFunction &CGF, const Expr *E,
696 llvm::Value *EmitMemberPointerConversion(CodeGenFunction &CGF,
709 EmitLoadOfMemberFunctionPointer(CodeGenFunction &CGF, const Expr *E,
795 LoadVTablePtr(CodeGenFunction &CGF, Address This,
885 void MicrosoftCXXABI::emitVirtualObjectDelete(CodeGenFunction &CGF, in emitVirtualObjectDelete() argument
894 llvm::Value *MDThis = EmitVirtualDestructorCall(CGF, Dtor, DtorType, Ptr, DE); in emitVirtualObjectDelete()
896 CGF.EmitDeleteCall(DE->getOperatorDelete(), MDThis, ElementType); in emitVirtualObjectDelete()
899 void MicrosoftCXXABI::emitRethrow(CodeGenFunction &CGF, bool isNoReturn) { in emitRethrow() argument
905 CGF.EmitNoreturnRuntimeCallOrInvoke(Fn, Args); in emitRethrow()
907 CGF.EmitRuntimeCallOrInvoke(Fn, Args); in emitRethrow()
910 void MicrosoftCXXABI::emitBeginCatch(CodeGenFunction &CGF, in emitBeginCatch() argument
915 llvm::BasicBlock *CatchPadBB = CGF.Builder.GetInsertBlock(); in emitBeginCatch()
918 CGF.CurrentFuncletPad = CPI; in emitBeginCatch()
923 CGF.EHStack.pushCleanup<CatchRetScope>(NormalCleanup, CPI); in emitBeginCatch()
927 CodeGenFunction::AutoVarEmission var = CGF.EmitAutoVarAlloca(*CatchParam); in emitBeginCatch()
928 CPI->setArgOperand(2, var.getObjectAddress(CGF).getPointer()); in emitBeginCatch()
929 CGF.EHStack.pushCleanup<CatchRetScope>(NormalCleanup, CPI); in emitBeginCatch()
930 CGF.EmitAutoVarCleanups(var); in emitBeginCatch()
937 MicrosoftCXXABI::performBaseAdjustment(CodeGenFunction &CGF, Address Value, in performBaseAdjustment() argument
939 Value = CGF.Builder.CreateElementBitCast(Value, CGF.Int8Ty); in performBaseAdjustment()
947 return std::make_tuple(Value, llvm::ConstantInt::get(CGF.Int32Ty, 0), in performBaseAdjustment()
963 GetVirtualBaseClassOffset(CGF, Value, SrcDecl, PolymorphicBase); in performBaseAdjustment()
964 llvm::Value *Ptr = CGF.Builder.CreateInBoundsGEP( in performBaseAdjustment()
967 CGF.CGM.getVBaseAlignment(Value.getAlignment(), SrcDecl, PolymorphicBase); in performBaseAdjustment()
968 return std::make_tuple(Address(Ptr, CGF.Int8Ty, VBaseAlign), Offset, in performBaseAdjustment()
979 static llvm::CallBase *emitRTtypeidCall(CodeGenFunction &CGF, in emitRTtypeidCall() argument
981 llvm::Type *ArgTypes[] = {CGF.Int8PtrTy}; in emitRTtypeidCall()
983 llvm::FunctionType::get(CGF.Int8PtrTy, ArgTypes, false); in emitRTtypeidCall()
985 llvm::FunctionCallee Fn = CGF.CGM.CreateRuntimeFunction(FTy, "__RTtypeid"); in emitRTtypeidCall()
986 return CGF.EmitRuntimeCallOrInvoke(Fn, Args); in emitRTtypeidCall()
989 void MicrosoftCXXABI::EmitBadTypeidCall(CodeGenFunction &CGF) { in EmitBadTypeidCall() argument
991 emitRTtypeidCall(CGF, llvm::Constant::getNullValue(CGM.VoidPtrTy)); in EmitBadTypeidCall()
993 CGF.Builder.CreateUnreachable(); in EmitBadTypeidCall()
996 llvm::Value *MicrosoftCXXABI::EmitTypeid(CodeGenFunction &CGF, in EmitTypeid() argument
1001 performBaseAdjustment(CGF, ThisPtr, SrcRecordTy); in EmitTypeid()
1002 llvm::CallBase *Typeid = emitRTtypeidCall(CGF, ThisPtr.getPointer()); in EmitTypeid()
1003 return CGF.Builder.CreateBitCast(Typeid, StdTypeInfoPtrTy); in EmitTypeid()
1014 CodeGenFunction &CGF, Address This, QualType SrcRecordTy, in EmitDynamicCastCall() argument
1016 llvm::Type *DestLTy = CGF.ConvertType(DestTy); in EmitDynamicCastCall()
1019 CGF.CGM.GetAddrOfRTTIDescriptor(SrcRecordTy.getUnqualifiedType()); in EmitDynamicCastCall()
1021 CGF.CGM.GetAddrOfRTTIDescriptor(DestRecordTy.getUnqualifiedType()); in EmitDynamicCastCall()
1025 performBaseAdjustment(CGF, This, SrcRecordTy); in EmitDynamicCastCall()
1027 Offset = CGF.Builder.CreateTrunc(Offset, CGF.Int32Ty); in EmitDynamicCastCall()
1035 llvm::Type *ArgTypes[] = {CGF.Int8PtrTy, CGF.Int32Ty, CGF.Int8PtrTy, in EmitDynamicCastCall()
1036 CGF.Int8PtrTy, CGF.Int32Ty}; in EmitDynamicCastCall()
1037 llvm::FunctionCallee Function = CGF.CGM.CreateRuntimeFunction( in EmitDynamicCastCall()
1038 llvm::FunctionType::get(CGF.Int8PtrTy, ArgTypes, false), in EmitDynamicCastCall()
1042 llvm::ConstantInt::get(CGF.Int32Ty, DestTy->isReferenceType())}; in EmitDynamicCastCall()
1043 ThisPtr = CGF.EmitRuntimeCallOrInvoke(Function, Args); in EmitDynamicCastCall()
1044 return CGF.Builder.CreateBitCast(ThisPtr, DestLTy); in EmitDynamicCastCall()
1048 MicrosoftCXXABI::EmitDynamicCastToVoid(CodeGenFunction &CGF, Address Value, in EmitDynamicCastToVoid() argument
1052 performBaseAdjustment(CGF, Value, SrcRecordTy); in EmitDynamicCastToVoid()
1056 llvm::Type *ArgTypes[] = {CGF.Int8PtrTy}; in EmitDynamicCastToVoid()
1057 llvm::FunctionCallee Function = CGF.CGM.CreateRuntimeFunction( in EmitDynamicCastToVoid()
1058 llvm::FunctionType::get(CGF.Int8PtrTy, ArgTypes, false), in EmitDynamicCastToVoid()
1061 return CGF.EmitRuntimeCall(Function, Args); in EmitDynamicCastToVoid()
1064 bool MicrosoftCXXABI::EmitBadCastCall(CodeGenFunction &CGF) { in EmitBadCastCall() argument
1069 CodeGenFunction &CGF, Address This, const CXXRecordDecl *ClassDecl, in GetVirtualBaseClassOffset() argument
1083 GetVBaseOffsetFromVBPtr(CGF, This, VBPtrOffset, VBTableOffset); in GetVirtualBaseClassOffset()
1085 CGF.Builder.CreateSExtOrBitCast(VBPtrToNewBase, CGM.PtrDiffTy); in GetVirtualBaseClassOffset()
1086 return CGF.Builder.CreateNSWAdd(VBPtrOffset, VBPtrToNewBase); in GetVirtualBaseClassOffset()
1155 MicrosoftCXXABI::EmitCtorCompleteObjectHandler(CodeGenFunction &CGF, in EmitCtorCompleteObjectHandler() argument
1157 llvm::Value *IsMostDerivedClass = getStructorImplicitParamValue(CGF); in EmitCtorCompleteObjectHandler()
1161 CGF.Builder.CreateIsNotNull(IsMostDerivedClass, "is_complete_object"); in EmitCtorCompleteObjectHandler()
1163 llvm::BasicBlock *CallVbaseCtorsBB = CGF.createBasicBlock("ctor.init_vbases"); in EmitCtorCompleteObjectHandler()
1164 llvm::BasicBlock *SkipVbaseCtorsBB = CGF.createBasicBlock("ctor.skip_vbases"); in EmitCtorCompleteObjectHandler()
1165 CGF.Builder.CreateCondBr(IsCompleteObject, in EmitCtorCompleteObjectHandler()
1168 CGF.EmitBlock(CallVbaseCtorsBB); in EmitCtorCompleteObjectHandler()
1171 EmitVBPtrStores(CGF, RD); in EmitCtorCompleteObjectHandler()
1179 MicrosoftCXXABI::EmitDtorCompleteObjectHandler(CodeGenFunction &CGF) { in EmitDtorCompleteObjectHandler() argument
1180 llvm::Value *IsMostDerivedClass = getStructorImplicitParamValue(CGF); in EmitDtorCompleteObjectHandler()
1184 CGF.Builder.CreateIsNotNull(IsMostDerivedClass, "is_complete_object"); in EmitDtorCompleteObjectHandler()
1186 llvm::BasicBlock *CallVbaseDtorsBB = CGF.createBasicBlock("Dtor.dtor_vbases"); in EmitDtorCompleteObjectHandler()
1187 llvm::BasicBlock *SkipVbaseDtorsBB = CGF.createBasicBlock("Dtor.skip_vbases"); in EmitDtorCompleteObjectHandler()
1188 CGF.Builder.CreateCondBr(IsCompleteObject, in EmitDtorCompleteObjectHandler()
1191 CGF.EmitBlock(CallVbaseDtorsBB); in EmitDtorCompleteObjectHandler()
1198 CodeGenFunction &CGF, const CXXRecordDecl *RD) { in initializeHiddenVirtualInheritanceMembers() argument
1215 CGBuilderTy &Builder = CGF.Builder; in initializeHiddenVirtualInheritanceMembers()
1217 unsigned AS = getThisAddress(CGF).getAddressSpace(); in initializeHiddenVirtualInheritanceMembers()
1228 GetVirtualBaseClassOffset(CGF, getThisAddress(CGF), RD, VBase); in initializeHiddenVirtualInheritanceMembers()
1235 VtorDispValue = Builder.CreateTruncOrBitCast(VtorDispValue, CGF.Int32Ty); in initializeHiddenVirtualInheritanceMembers()
1238 Int8This = Builder.CreateBitCast(getThisValue(CGF), in initializeHiddenVirtualInheritanceMembers()
1239 CGF.Int8Ty->getPointerTo(AS)); in initializeHiddenVirtualInheritanceMembers()
1241 Builder.CreateInBoundsGEP(CGF.Int8Ty, Int8This, VBaseOffset); in initializeHiddenVirtualInheritanceMembers()
1243 VtorDispPtr = Builder.CreateConstGEP1_32(CGF.Int8Ty, VtorDispPtr, -4); in initializeHiddenVirtualInheritanceMembers()
1245 VtorDispPtr, CGF.Int32Ty->getPointerTo(AS), "vtordisp.ptr"); in initializeHiddenVirtualInheritanceMembers()
1279 void MicrosoftCXXABI::EmitVBPtrStores(CodeGenFunction &CGF, in EmitVBPtrStores() argument
1281 Address This = getThisAddress(CGF); in EmitVBPtrStores()
1282 This = CGF.Builder.CreateElementBitCast(This, CGM.Int8Ty, "this.int8"); in EmitVBPtrStores()
1296 Address VBPtr = CGF.Builder.CreateConstInBoundsByteGEP(This, Offs); in EmitVBPtrStores()
1298 CGF.Builder.CreateConstInBoundsGEP2_32(GV->getValueType(), GV, 0, 0); in EmitVBPtrStores()
1299 VBPtr = CGF.Builder.CreateElementBitCast(VBPtr, GVPtr->getType(), in EmitVBPtrStores()
1301 CGF.Builder.CreateStore(GVPtr, VBPtr); in EmitVBPtrStores()
1433 CodeGenFunction &CGF, GlobalDecl GD, Address This, in adjustThisArgumentForVirtualFunctionCall() argument
1442 This = CGF.Builder.CreateElementBitCast(This, CGF.Int8Ty); in adjustThisArgumentForVirtualFunctionCall()
1444 return CGF.Builder.CreateConstByteGEP(This, Adjustment); in adjustThisArgumentForVirtualFunctionCall()
1473 Result = CGF.Builder.CreateElementBitCast(Result, CGF.Int8Ty); in adjustThisArgumentForVirtualFunctionCall()
1478 GetVirtualBaseClassOffset(CGF, Result, Derived, VBase); in adjustThisArgumentForVirtualFunctionCall()
1479 llvm::Value *VBasePtr = CGF.Builder.CreateInBoundsGEP( in adjustThisArgumentForVirtualFunctionCall()
1482 CGF.CGM.getVBaseAlignment(Result.getAlignment(), Derived, VBase); in adjustThisArgumentForVirtualFunctionCall()
1483 Result = Address(VBasePtr, CGF.Int8Ty, VBaseAlign); in adjustThisArgumentForVirtualFunctionCall()
1487 Result = CGF.Builder.CreateElementBitCast(Result, CGF.Int8Ty); in adjustThisArgumentForVirtualFunctionCall()
1493 Result = CGF.Builder.CreateConstByteGEP(Result, StaticOffset); in adjustThisArgumentForVirtualFunctionCall()
1495 Result = CGF.Builder.CreateConstInBoundsByteGEP(Result, StaticOffset); in adjustThisArgumentForVirtualFunctionCall()
1501 void MicrosoftCXXABI::addImplicitStructorParams(CodeGenFunction &CGF, in addImplicitStructorParams() argument
1505 const CXXMethodDecl *MD = cast<CXXMethodDecl>(CGF.CurGD.getDecl()); in addImplicitStructorParams()
1509 Context, /*DC=*/nullptr, CGF.CurGD.getDecl()->getLocation(), in addImplicitStructorParams()
1519 getStructorImplicitParamDecl(CGF) = IsMostDerived; in addImplicitStructorParams()
1520 } else if (isDeletingDtor(CGF.CurGD)) { in addImplicitStructorParams()
1522 Context, /*DC=*/nullptr, CGF.CurGD.getDecl()->getLocation(), in addImplicitStructorParams()
1526 getStructorImplicitParamDecl(CGF) = ShouldDelete; in addImplicitStructorParams()
1530 void MicrosoftCXXABI::EmitInstanceFunctionProlog(CodeGenFunction &CGF) { in EmitInstanceFunctionProlog() argument
1532 if (CGF.CurFuncDecl && CGF.CurFuncDecl->hasAttr<NakedAttr>()) in EmitInstanceFunctionProlog()
1547 llvm::Value *This = loadIncomingCXXThis(CGF); in EmitInstanceFunctionProlog()
1548 const CXXMethodDecl *MD = cast<CXXMethodDecl>(CGF.CurGD.getDecl()); in EmitInstanceFunctionProlog()
1549 if (!CGF.CurFuncIsThunk && MD->isVirtual()) { in EmitInstanceFunctionProlog()
1550 CharUnits Adjustment = getVirtualFunctionPrologueThisAdjustment(CGF.CurGD); in EmitInstanceFunctionProlog()
1553 llvm::Type *charPtrTy = CGF.Int8Ty->getPointerTo(AS), in EmitInstanceFunctionProlog()
1555 This = CGF.Builder.CreateBitCast(This, charPtrTy); in EmitInstanceFunctionProlog()
1557 This = CGF.Builder.CreateConstInBoundsGEP1_32(CGF.Int8Ty, This, in EmitInstanceFunctionProlog()
1559 This = CGF.Builder.CreateBitCast(This, thisTy, "this.adjusted"); in EmitInstanceFunctionProlog()
1562 setCXXABIThisValue(CGF, This); in EmitInstanceFunctionProlog()
1572 if (HasThisReturn(CGF.CurGD)) in EmitInstanceFunctionProlog()
1573 CGF.Builder.CreateStore(getThisValue(CGF), CGF.ReturnValue); in EmitInstanceFunctionProlog()
1574 else if (hasMostDerivedReturn(CGF.CurGD)) in EmitInstanceFunctionProlog()
1575 CGF.Builder.CreateStore(CGF.EmitCastToVoidPtr(getThisValue(CGF)), in EmitInstanceFunctionProlog()
1576 CGF.ReturnValue); in EmitInstanceFunctionProlog()
1579 assert(getStructorImplicitParamDecl(CGF) && in EmitInstanceFunctionProlog()
1581 getStructorImplicitParamValue(CGF) in EmitInstanceFunctionProlog()
1582 = CGF.Builder.CreateLoad( in EmitInstanceFunctionProlog()
1583 CGF.GetAddrOfLocalVar(getStructorImplicitParamDecl(CGF)), in EmitInstanceFunctionProlog()
1587 if (isDeletingDtor(CGF.CurGD)) { in EmitInstanceFunctionProlog()
1588 assert(getStructorImplicitParamDecl(CGF) && in EmitInstanceFunctionProlog()
1590 getStructorImplicitParamValue(CGF) in EmitInstanceFunctionProlog()
1591 = CGF.Builder.CreateLoad( in EmitInstanceFunctionProlog()
1592 CGF.GetAddrOfLocalVar(getStructorImplicitParamDecl(CGF)), in EmitInstanceFunctionProlog()
1598 CodeGenFunction &CGF, const CXXConstructorDecl *D, CXXCtorType Type, in getImplicitConstructorArgs() argument
1610 MostDerivedArg = getStructorImplicitParamValue(CGF); in getImplicitConstructorArgs()
1621 CodeGenFunction &CGF, const CXXDestructorDecl *DD, CXXDtorType Type, in getCXXDestructorImplicitParam() argument
1626 void MicrosoftCXXABI::EmitDestructorCall(CodeGenFunction &CGF, in EmitDestructorCall() argument
1643 This = adjustThisArgumentForVirtualFunctionCall(CGF, GlobalDecl(DD, Type), in EmitDestructorCall()
1648 if (ForVirtualBase && isa<CXXConstructorDecl>(CGF.CurCodeDecl)) { in EmitDestructorCall()
1649 BaseDtorEndBB = EmitDtorCompleteObjectHandler(CGF); in EmitDestructorCall()
1653 getCXXDestructorImplicitParam(CGF, DD, Type, ForVirtualBase, in EmitDestructorCall()
1655 CGF.EmitCXXDestructorCall(GD, Callee, This.getPointer(), ThisTy, in EmitDestructorCall()
1660 CGF.Builder.CreateBr(BaseDtorEndBB); in EmitDestructorCall()
1661 CGF.EmitBlock(BaseDtorEndBB); in EmitDestructorCall()
1752 CodeGenFunction &CGF, CodeGenFunction::VPtr Vptr) { in isVirtualOffsetNeededForVTableField() argument
1757 CodeGenFunction &CGF, const CXXRecordDecl *VTableClass, BaseSubobject Base, in getVTableAddressPointInStructor() argument
1926 CGCallee MicrosoftCXXABI::getVirtualFunctionPointer(CodeGenFunction &CGF, in getVirtualFunctionPointer() argument
1931 CGBuilderTy &Builder = CGF.Builder; in getVirtualFunctionPointer()
1935 adjustThisArgumentForVirtualFunctionCall(CGF, GD, This, true); in getVirtualFunctionPointer()
1938 llvm::Value *VTable = CGF.GetVTablePtr(VPtr, Ty->getPointerTo(), in getVirtualFunctionPointer()
1957 if (CGF.ShouldEmitVTableTypeCheckedLoad(MethodDecl->getParent())) { in getVirtualFunctionPointer()
1958 VFunc = CGF.EmitVTableTypeCheckedLoad( in getVirtualFunctionPointer()
1965 CGF.EmitTypeMetadataCodeForVCall(getObjectWithVPtr(), VTable, Loc); in getVirtualFunctionPointer()
1969 VFunc = Builder.CreateAlignedLoad(Ty, VFuncPtr, CGF.getPointerAlign()); in getVirtualFunctionPointer()
1977 CodeGenFunction &CGF, const CXXDestructorDecl *Dtor, CXXDtorType DtorType, in EmitVirtualDestructorCall() argument
1990 llvm::FunctionType *Ty = CGF.CGM.getTypes().GetFunctionType(*FInfo); in EmitVirtualDestructorCall()
1995 llvm::IntegerType::getInt32Ty(CGF.getLLVMContext()), in EmitVirtualDestructorCall()
2005 This = adjustThisArgumentForVirtualFunctionCall(CGF, GD, This, true); in EmitVirtualDestructorCall()
2006 RValue RV = CGF.EmitCXXDestructorCall(GD, Callee, This.getPointer(), ThisTy, in EmitVirtualDestructorCall()
2081 CodeGenFunction CGF(CGM); in EmitVirtualMemPtrThunk() local
2082 CGF.CurGD = GlobalDecl(MD); in EmitVirtualMemPtrThunk()
2083 CGF.CurFuncIsThunk = true; in EmitVirtualMemPtrThunk()
2088 buildThisParam(CGF, FunctionArgs); in EmitVirtualMemPtrThunk()
2091 CGF.StartFunction(GlobalDecl(), FnInfo.getReturnType(), ThunkFn, FnInfo, in EmitVirtualMemPtrThunk()
2094 ApplyDebugLocation AL(CGF, MD->getLocation()); in EmitVirtualMemPtrThunk()
2095 setCXXABIThisValue(CGF, loadIncomingCXXThis(CGF)); in EmitVirtualMemPtrThunk()
2100 llvm::Value *VTable = CGF.GetVTablePtr( in EmitVirtualMemPtrThunk()
2101 getThisAddress(CGF), ThunkPtrTy->getPointerTo(), MD->getParent()); in EmitVirtualMemPtrThunk()
2103 llvm::Value *VFuncPtr = CGF.Builder.CreateConstInBoundsGEP1_64( in EmitVirtualMemPtrThunk()
2106 CGF.Builder.CreateAlignedLoad(ThunkPtrTy, VFuncPtr, CGF.getPointerAlign()); in EmitVirtualMemPtrThunk()
2108 CGF.EmitMustTailThunk(MD, getThisValue(CGF), {ThunkTy, Callee}); in EmitVirtualMemPtrThunk()
2201 llvm::Value *MicrosoftCXXABI::performThisAdjustment(CodeGenFunction &CGF, in performThisAdjustment() argument
2207 This = CGF.Builder.CreateElementBitCast(This, CGF.Int8Ty); in performThisAdjustment()
2216 CGF.Builder.CreateConstInBoundsByteGEP(This, in performThisAdjustment()
2218 VtorDispPtr = CGF.Builder.CreateElementBitCast(VtorDispPtr, CGF.Int32Ty); in performThisAdjustment()
2219 llvm::Value *VtorDisp = CGF.Builder.CreateLoad(VtorDispPtr, "vtordisp"); in performThisAdjustment()
2220 V = CGF.Builder.CreateGEP(This.getElementType(), This.getPointer(), in performThisAdjustment()
2221 CGF.Builder.CreateNeg(VtorDisp)); in performThisAdjustment()
2235 CGF, Address(V, CGF.Int8Ty, CGF.getPointerAlign()), in performThisAdjustment()
2238 V = CGF.Builder.CreateInBoundsGEP(CGF.Int8Ty, VBPtr, VBaseOffset); in performThisAdjustment()
2246 V = CGF.Builder.CreateConstGEP1_32(CGF.Int8Ty, V, TA.NonVirtual); in performThisAdjustment()
2254 MicrosoftCXXABI::performReturnAdjustment(CodeGenFunction &CGF, Address Ret, in performReturnAdjustment() argument
2260 Ret = CGF.Builder.CreateElementBitCast(Ret, CGF.Int8Ty); in performReturnAdjustment()
2265 int32_t IntSize = CGF.getIntSize().getQuantity(); in performReturnAdjustment()
2268 GetVBaseOffsetFromVBPtr(CGF, Ret, RA.Virtual.Microsoft.VBPtrOffset, in performReturnAdjustment()
2270 V = CGF.Builder.CreateInBoundsGEP(CGF.Int8Ty, VBPtr, VBaseOffset); in performReturnAdjustment()
2274 V = CGF.Builder.CreateConstInBoundsGEP1_32(CGF.Int8Ty, V, RA.NonVirtual); in performReturnAdjustment()
2277 return CGF.Builder.CreateBitCast(V, OrigTy); in performReturnAdjustment()
2301 llvm::Value *MicrosoftCXXABI::readArrayCookieImpl(CodeGenFunction &CGF, in readArrayCookieImpl() argument
2305 CGF.Builder.CreateElementBitCast(allocPtr, CGF.SizeTy); in readArrayCookieImpl()
2306 return CGF.Builder.CreateLoad(numElementsPtr); in readArrayCookieImpl()
2309 Address MicrosoftCXXABI::InitializeArrayCookie(CodeGenFunction &CGF, in InitializeArrayCookie() argument
2324 = CGF.Builder.CreateElementBitCast(cookiePtr, CGF.SizeTy); in InitializeArrayCookie()
2325 CGF.Builder.CreateStore(numElements, numElementsPtr); in InitializeArrayCookie()
2329 return CGF.Builder.CreateConstInBoundsByteGEP(newPtr, cookieSize); in InitializeArrayCookie()
2332 static void emitGlobalDtorWithTLRegDtor(CodeGenFunction &CGF, const VarDecl &VD, in emitGlobalDtorWithTLRegDtor() argument
2336 llvm::Constant *DtorStub = CGF.createAtExitStub(VD, Dtor, Addr); in emitGlobalDtorWithTLRegDtor()
2340 CGF.IntTy, DtorStub->getType(), /*isVarArg=*/false); in emitGlobalDtorWithTLRegDtor()
2342 llvm::FunctionCallee TLRegDtor = CGF.CGM.CreateRuntimeFunction( in emitGlobalDtorWithTLRegDtor()
2348 CGF.EmitNounwindRuntimeCall(TLRegDtor, DtorStub); in emitGlobalDtorWithTLRegDtor()
2351 void MicrosoftCXXABI::registerGlobalDtor(CodeGenFunction &CGF, const VarDecl &D, in registerGlobalDtor() argument
2358 return emitGlobalDtorWithTLRegDtor(CGF, D, Dtor, Addr); in registerGlobalDtor()
2365 CGF.registerGlobalDtorWithAtExit(D, Dtor, Addr); in registerGlobalDtor()
2449 static void emitTlsGuardCheck(CodeGenFunction &CGF, llvm::GlobalValue *TlsGuard, in emitTlsGuardCheck() argument
2453 CGF.Builder.CreateLoad(Address(TlsGuard, CGF.Int8Ty, CharUnits::One())); in emitTlsGuardCheck()
2455 CGF.Builder.CreateICmpEQ(TlsGuardValue, CGF.Builder.getInt8(0)); in emitTlsGuardCheck()
2456 CGF.Builder.CreateCondBr(CmpResult, DynInitBB, ContinueBB); in emitTlsGuardCheck()
2459 static void emitDynamicTlsInitializationCall(CodeGenFunction &CGF, in emitDynamicTlsInitializationCall() argument
2462 llvm::FunctionCallee Initializer = getDynTlsOnDemandInitFn(CGF.CGM); in emitDynamicTlsInitializationCall()
2465 llvm::CallInst *CallVal = CGF.Builder.CreateCall(InitializerFunction); in emitDynamicTlsInitializationCall()
2468 CGF.Builder.CreateBr(ContinueBB); in emitDynamicTlsInitializationCall()
2471 static void emitDynamicTlsInitialization(CodeGenFunction &CGF) { in emitDynamicTlsInitialization() argument
2473 CGF.createBasicBlock("dyntls.dyn_init", CGF.CurFn); in emitDynamicTlsInitialization()
2475 CGF.createBasicBlock("dyntls.continue", CGF.CurFn); in emitDynamicTlsInitialization()
2477 llvm::GlobalValue *TlsGuard = getTlsGuardVar(CGF.CGM); in emitDynamicTlsInitialization()
2479 emitTlsGuardCheck(CGF, TlsGuard, DynInitBB, ContinueBB); in emitDynamicTlsInitialization()
2480 CGF.Builder.SetInsertPoint(DynInitBB); in emitDynamicTlsInitialization()
2481 emitDynamicTlsInitializationCall(CGF, TlsGuard, ContinueBB); in emitDynamicTlsInitialization()
2482 CGF.Builder.SetInsertPoint(ContinueBB); in emitDynamicTlsInitialization()
2485 LValue MicrosoftCXXABI::EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF, in EmitThreadLocalVarDeclLValue() argument
2493 emitDynamicTlsInitialization(CGF); in EmitThreadLocalVarDeclLValue()
2497 llvm::Value *V = CGF.CGM.GetAddrOfGlobalVar(VD); in EmitThreadLocalVarDeclLValue()
2498 llvm::Type *RealVarTy = CGF.getTypes().ConvertTypeForMem(VD->getType()); in EmitThreadLocalVarDeclLValue()
2501 V = CGF.Builder.CreateBitCast(V, RealVarTy->getPointerTo(AS)); in EmitThreadLocalVarDeclLValue()
2503 CharUnits Alignment = CGF.getContext().getDeclAlign(VD); in EmitThreadLocalVarDeclLValue()
2507 ? CGF.EmitLoadOfReferenceLValue(Addr, VD->getType(), in EmitThreadLocalVarDeclLValue()
2509 : CGF.MakeAddrLValue(Addr, LValType, AlignmentSource::Decl); in EmitThreadLocalVarDeclLValue()
2570 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
2573 CGBuilderTy &Builder = CGF.Builder; in Emit()
2576 llvm::ConstantInt::get(CGF.IntTy, ~(1ULL << GuardNum)); in Emit()
2585 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
2587 CGF.EmitNounwindRuntimeCall(getInitThreadAbortFn(CGF.CGM), Guard); in Emit()
2592 void MicrosoftCXXABI::EmitGuardedInit(CodeGenFunction &CGF, const VarDecl &D, in EmitGuardedInit() argument
2599 llvm::Function *F = CGF.CurFn; in EmitGuardedInit()
2602 CGF.EmitCXXGlobalVarDeclInit(D, GV, PerformInit); in EmitGuardedInit()
2613 CGBuilderTy &Builder = CGF.Builder; in EmitGuardedInit()
2614 llvm::IntegerType *GuardTy = CGF.Int32Ty; in EmitGuardedInit()
2642 ErrorUnsupportedABI(CGF, "more than 32 guarded initializations"); in EmitGuardedInit()
2693 llvm::BasicBlock *InitBlock = CGF.createBasicBlock("init"); in EmitGuardedInit()
2694 llvm::BasicBlock *EndBlock = CGF.createBasicBlock("init.end"); in EmitGuardedInit()
2695 CGF.EmitCXXGuardedInitBranch(NeedsInit, InitBlock, EndBlock, in EmitGuardedInit()
2700 CGF.EmitBlock(InitBlock); in EmitGuardedInit()
2702 CGF.EHStack.pushCleanup<ResetGuardBit>(EHCleanup, GuardAddr, GuardNum); in EmitGuardedInit()
2703 CGF.EmitCXXGlobalVarDeclInit(D, GV, PerformInit); in EmitGuardedInit()
2704 CGF.PopCleanupBlock(); in EmitGuardedInit()
2708 CGF.EmitBlock(EndBlock); in EmitGuardedInit()
2729 llvm::BasicBlock *AttemptInitBlock = CGF.createBasicBlock("init.attempt"); in EmitGuardedInit()
2730 llvm::BasicBlock *EndBlock = CGF.createBasicBlock("init.end"); in EmitGuardedInit()
2731 CGF.EmitCXXGuardedInitBranch(IsUninitialized, AttemptInitBlock, EndBlock, in EmitGuardedInit()
2736 CGF.EmitBlock(AttemptInitBlock); in EmitGuardedInit()
2737 CGF.EmitNounwindRuntimeCall(getInitThreadHeaderFn(CGM), in EmitGuardedInit()
2743 llvm::BasicBlock *InitBlock = CGF.createBasicBlock("init"); in EmitGuardedInit()
2747 CGF.EmitBlock(InitBlock); in EmitGuardedInit()
2748 CGF.EHStack.pushCleanup<CallInitThreadAbort>(EHCleanup, GuardAddr); in EmitGuardedInit()
2749 CGF.EmitCXXGlobalVarDeclInit(D, GV, PerformInit); in EmitGuardedInit()
2750 CGF.PopCleanupBlock(); in EmitGuardedInit()
2751 CGF.EmitNounwindRuntimeCall(getInitThreadFooterFn(CGM), in EmitGuardedInit()
2755 CGF.EmitBlock(EndBlock); in EmitGuardedInit()
2995 MicrosoftCXXABI::EmitMemberPointerComparison(CodeGenFunction &CGF, in EmitMemberPointerComparison() argument
3000 CGBuilderTy &Builder = CGF.Builder; in EmitMemberPointerComparison()
3055 MicrosoftCXXABI::EmitMemberPointerIsNotNull(CodeGenFunction &CGF, in EmitMemberPointerIsNotNull() argument
3058 CGBuilderTy &Builder = CGF.Builder; in EmitMemberPointerIsNotNull()
3117 MicrosoftCXXABI::GetVBaseOffsetFromVBPtr(CodeGenFunction &CGF, in GetVBaseOffsetFromVBPtr() argument
3122 CGBuilderTy &Builder = CGF.Builder; in GetVBaseOffsetFromVBPtr()
3136 VBPtrAlign = CGF.getPointerAlign(); in GetVBaseOffsetFromVBPtr()
3158 CodeGenFunction &CGF, const Expr *E, const CXXRecordDecl *RD, in AdjustVirtualBase() argument
3160 CGBuilderTy &Builder = CGF.Builder; in AdjustVirtualBase()
3172 VBaseAdjustBB = CGF.createBasicBlock("memptr.vadjust"); in AdjustVirtualBase()
3173 SkipAdjustBB = CGF.createBasicBlock("memptr.skip_vadjust"); in AdjustVirtualBase()
3178 CGF.EmitBlock(VBaseAdjustBB); in AdjustVirtualBase()
3186 DiagnosticsEngine &Diags = CGF.CGM.getDiags(); in AdjustVirtualBase()
3198 GetVBaseOffsetFromVBPtr(CGF, Base, VBPtrOffset, VBTableOffset, &VBPtr); in AdjustVirtualBase()
3205 CGF.EmitBlock(SkipAdjustBB); in AdjustVirtualBase()
3215 CodeGenFunction &CGF, const Expr *E, Address Base, llvm::Value *MemPtr, in EmitMemberDataPointerAddress() argument
3220 CGF.ConvertTypeForMem(MPT->getPointeeType())->getPointerTo(AS); in EmitMemberDataPointerAddress()
3221 CGBuilderTy &Builder = CGF.Builder; in EmitMemberDataPointerAddress()
3242 Addr = AdjustVirtualBase(CGF, E, RD, Base, VirtualBaseAdjustmentOffset, in EmitMemberDataPointerAddress()
3249 Addr = Builder.CreateBitCast(Addr, CGF.Int8Ty->getPointerTo(AS)); in EmitMemberDataPointerAddress()
3252 Addr = Builder.CreateInBoundsGEP(CGF.Int8Ty, Addr, FieldOffset, in EmitMemberDataPointerAddress()
3261 MicrosoftCXXABI::EmitMemberPointerConversion(CodeGenFunction &CGF, in EmitMemberPointerConversion() argument
3290 CGBuilderTy &Builder = CGF.Builder; in EmitMemberPointerConversion()
3293 llvm::Value *IsNotNull = EmitMemberPointerIsNotNull(CGF, Src, SrcTy); in EmitMemberPointerConversion()
3306 llvm::BasicBlock *ConvertBB = CGF.createBasicBlock("memptr.convert"); in EmitMemberPointerConversion()
3307 llvm::BasicBlock *ContinueBB = CGF.createBasicBlock("memptr.converted"); in EmitMemberPointerConversion()
3309 CGF.EmitBlock(ConvertBB); in EmitMemberPointerConversion()
3318 CGF.EmitBlock(ContinueBB); in EmitMemberPointerConversion()
3507 CodeGenFunction &CGF, const Expr *E, Address This, in EmitLoadOfMemberFunctionPointer() argument
3516 CGBuilderTy &Builder = CGF.Builder; in EmitLoadOfMemberFunctionPointer()
3539 ThisPtrForCall = AdjustVirtualBase(CGF, E, RD, This, in EmitLoadOfMemberFunctionPointer()
3547 llvm::Value *Ptr = Builder.CreateBitCast(ThisPtrForCall, CGF.Int8PtrTy); in EmitLoadOfMemberFunctionPointer()
3548 Ptr = Builder.CreateInBoundsGEP(CGF.Int8Ty, Ptr, NonVirtualBaseAdjustment); in EmitLoadOfMemberFunctionPointer()
4094 CodeGenFunction CGF(CGM); in getAddrOfCXXCtorClosure() local
4095 CGF.CurGD = GlobalDecl(CD, Ctor_Complete); in getAddrOfCXXCtorClosure()
4101 buildThisParam(CGF, FunctionArgs); in getAddrOfCXXCtorClosure()
4126 auto NL = ApplyDebugLocation::CreateEmpty(CGF); in getAddrOfCXXCtorClosure()
4127 CGF.StartFunction(GlobalDecl(), FnInfo.getReturnType(), ThunkFn, FnInfo, in getAddrOfCXXCtorClosure()
4130 auto AL = ApplyDebugLocation::CreateArtificial(CGF); in getAddrOfCXXCtorClosure()
4131 setCXXABIThisValue(CGF, loadIncomingCXXThis(CGF)); in getAddrOfCXXCtorClosure()
4132 llvm::Value *This = getThisValue(CGF); in getAddrOfCXXCtorClosure()
4135 IsCopy ? CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(&SrcParam), "src") in getAddrOfCXXCtorClosure()
4155 CodeGenFunction::RunCleanupsScope Cleanups(CGF); in getAddrOfCXXCtorClosure()
4158 CGF.EmitCallArgs(Args, FPT, llvm::ArrayRef(ArgVec), CD, IsCopy ? 1 : 0); in getAddrOfCXXCtorClosure()
4162 addImplicitConstructorArgs(CGF, CD, Ctor_Complete, in getAddrOfCXXCtorClosure()
4172 CGF.EmitCall(CalleeInfo, Callee, ReturnValueSlot(), Args); in getAddrOfCXXCtorClosure()
4178 CGF.FinishFunction(SourceLocation()); in getAddrOfCXXCtorClosure()
4455 void MicrosoftCXXABI::emitThrow(CodeGenFunction &CGF, const CXXThrowExpr *E) { in emitThrow() argument
4461 Address AI = CGF.CreateMemTemp(ThrowType); in emitThrow()
4462 CGF.EmitAnyExprToMem(SubExpr, AI, ThrowType.getQualifiers(), in emitThrow()
4471 CGF.Builder.CreateBitCast(AI.getPointer(), CGM.Int8PtrTy), in emitThrow()
4474 CGF.EmitNoreturnRuntimeCallOrInvoke(getThrowFn(), Args); in emitThrow()
4478 MicrosoftCXXABI::LoadVTablePtr(CodeGenFunction &CGF, Address This, in LoadVTablePtr() argument
4481 performBaseAdjustment(CGF, This, QualType(RD->getTypeForDecl(), 0)); in LoadVTablePtr()
4482 return {CGF.GetVTablePtr(This, CGM.Int8PtrTy, RD), RD}; in LoadVTablePtr()