Lines Matching refs:CGF
122 EmitLoadOfMemberFunctionPointer(CodeGenFunction &CGF,
130 EmitMemberDataPointerAddress(CodeGenFunction &CGF, const Expr *E,
135 llvm::Value *EmitMemberPointerConversion(CodeGenFunction &CGF,
150 llvm::Value *EmitMemberPointerComparison(CodeGenFunction &CGF,
155 llvm::Value *EmitMemberPointerIsNotNull(CodeGenFunction &CGF,
159 void emitVirtualObjectDelete(CodeGenFunction &CGF, const CXXDeleteExpr *DE,
176 void emitRethrow(CodeGenFunction &CGF, bool isNoReturn) override;
177 void emitThrow(CodeGenFunction &CGF, const CXXThrowExpr *E) override;
179 void emitBeginCatch(CodeGenFunction &CGF, const CXXCatchStmt *C) override;
182 emitTerminateForUnexpectedException(CodeGenFunction &CGF,
194 void EmitBadTypeidCall(CodeGenFunction &CGF) override;
195 llvm::Value *EmitTypeid(CodeGenFunction &CGF, QualType SrcRecordTy,
202 llvm::Value *EmitDynamicCastCall(CodeGenFunction &CGF, Address Value,
207 llvm::Value *EmitDynamicCastToVoid(CodeGenFunction &CGF, Address Value,
211 bool EmitBadCastCall(CodeGenFunction &CGF) override;
214 GetVirtualBaseClassOffset(CodeGenFunction &CGF, Address This,
234 void addImplicitStructorParams(CodeGenFunction &CGF, QualType &ResTy,
237 void EmitInstanceFunctionProlog(CodeGenFunction &CGF) override;
240 addImplicitConstructorArgs(CodeGenFunction &CGF, const CXXConstructorDecl *D,
244 void EmitDestructorCall(CodeGenFunction &CGF, const CXXDestructorDecl *DD,
251 bool isVirtualOffsetNeededForVTableField(CodeGenFunction &CGF,
263 CodeGenFunction &CGF, const CXXRecordDecl *VTableClass,
267 CodeGenFunction &CGF, const CXXRecordDecl *VTableClass,
277 CGCallee getVirtualFunctionPointer(CodeGenFunction &CGF, GlobalDecl GD,
281 llvm::Value *EmitVirtualDestructorCall(CodeGenFunction &CGF,
303 llvm::Value *performThisAdjustment(CodeGenFunction &CGF, Address This,
306 llvm::Value *performReturnAdjustment(CodeGenFunction &CGF, Address Ret,
320 Address InitializeArrayCookie(CodeGenFunction &CGF,
325 llvm::Value *readArrayCookieImpl(CodeGenFunction &CGF,
329 void EmitGuardedInit(CodeGenFunction &CGF, const VarDecl &D,
332 void registerGlobalDtor(CodeGenFunction &CGF, const VarDecl &D,
344 LValue EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF, const VarDecl *VD,
383 LoadVTablePtr(CodeGenFunction &CGF, Address This,
445 void EmitReturnFromThunk(CodeGenFunction &CGF, RValue RV,
449 Address InitializeArrayCookie(CodeGenFunction &CGF,
454 llvm::Value *readArrayCookieImpl(CodeGenFunction &CGF, Address allocPtr,
473 void emitBeginCatch(CodeGenFunction &CGF, const CXXCatchStmt *C) override;
555 CodeGenFunction &CGF, const Expr *E, Address ThisAddr, in EmitLoadOfMemberFunctionPointer() argument
558 CGBuilderTy &Builder = CGF.Builder; in EmitLoadOfMemberFunctionPointer()
570 llvm::BasicBlock *FnVirtual = CGF.createBasicBlock("memptr.virtual"); in EmitLoadOfMemberFunctionPointer()
571 llvm::BasicBlock *FnNonVirtual = CGF.createBasicBlock("memptr.nonvirtual"); in EmitLoadOfMemberFunctionPointer()
572 llvm::BasicBlock *FnEnd = CGF.createBasicBlock("memptr.end"); in EmitLoadOfMemberFunctionPointer()
606 CGF.EmitBlock(FnVirtual); in EmitLoadOfMemberFunctionPointer()
611 CGF.CGM.getDynamicOffsetAlignment(ThisAddr.getAlignment(), RD, in EmitLoadOfMemberFunctionPointer()
612 CGF.getPointerAlign()); in EmitLoadOfMemberFunctionPointer()
614 CGF.GetVTablePtr(Address(This, VTablePtrAlign), VTableTy, RD); in EmitLoadOfMemberFunctionPointer()
623 VTableOffset = Builder.CreateTrunc(VTableOffset, CGF.Int32Ty); in EmitLoadOfMemberFunctionPointer()
633 bool ShouldEmitCFICheck = CGF.SanOpts.has(SanitizerKind::CFIMFCall) && in EmitLoadOfMemberFunctionPointer()
636 CodeGenFunction::SanitizerScope SanScope(&CGF); in EmitLoadOfMemberFunctionPointer()
638 CheckSourceLocation = CGF.EmitCheckSourceLocation(E->getBeginLoc()); in EmitLoadOfMemberFunctionPointer()
639 CheckTypeDesc = CGF.EmitCheckTypeDescriptor(QualType(MPT, 0)); in EmitLoadOfMemberFunctionPointer()
641 llvm::ConstantInt::get(CGF.Int8Ty, CodeGenFunction::CFITCK_VMFCall), in EmitLoadOfMemberFunctionPointer()
648 llvm::Value *TypeId = llvm::MetadataAsValue::get(CGF.getLLVMContext(), MD); in EmitLoadOfMemberFunctionPointer()
654 CGF.EmitTrapCheck(TypeTest); in EmitLoadOfMemberFunctionPointer()
661 CGF.EmitCheck(std::make_pair(TypeTest, SanitizerKind::CFIMFCall), in EmitLoadOfMemberFunctionPointer()
672 VFPAddr, CGF.getPointerAlign(), "memptr.virtualfn"); in EmitLoadOfMemberFunctionPointer()
673 CGF.EmitBranch(FnEnd); in EmitLoadOfMemberFunctionPointer()
677 CGF.EmitBlock(FnNonVirtual); in EmitLoadOfMemberFunctionPointer()
685 CodeGenFunction::SanitizerScope SanScope(&CGF); in EmitLoadOfMemberFunctionPointer()
688 llvm::ConstantInt::get(CGF.Int8Ty, CodeGenFunction::CFITCK_NVMFCall), in EmitLoadOfMemberFunctionPointer()
695 Builder.CreateBitCast(NonVirtualFn, CGF.Int8PtrTy); in EmitLoadOfMemberFunctionPointer()
702 llvm::MetadataAsValue::get(CGF.getLLVMContext(), MD); in EmitLoadOfMemberFunctionPointer()
710 CGF.EmitCheck(std::make_pair(Bit, SanitizerKind::CFIMFCall), in EmitLoadOfMemberFunctionPointer()
712 {CastedNonVirtualFn, llvm::UndefValue::get(CGF.IntPtrTy)}); in EmitLoadOfMemberFunctionPointer()
719 CGF.EmitBlock(FnEnd); in EmitLoadOfMemberFunctionPointer()
731 CodeGenFunction &CGF, const Expr *E, Address Base, llvm::Value *MemPtr, in EmitMemberDataPointerAddress() argument
735 CGBuilderTy &Builder = CGF.Builder; in EmitMemberDataPointerAddress()
738 Base = Builder.CreateElementBitCast(Base, CGF.Int8Ty); in EmitMemberDataPointerAddress()
746 llvm::Type *PType = CGF.ConvertTypeForMem(MPT->getPointeeType()) in EmitMemberDataPointerAddress()
775 ItaniumCXXABI::EmitMemberPointerConversion(CodeGenFunction &CGF, in EmitMemberPointerConversion() argument
792 CGBuilderTy &Builder = CGF.Builder; in EmitMemberPointerConversion()
984 ItaniumCXXABI::EmitMemberPointerComparison(CodeGenFunction &CGF, in EmitMemberPointerComparison() argument
989 CGBuilderTy &Builder = CGF.Builder; in EmitMemberPointerComparison()
1058 ItaniumCXXABI::EmitMemberPointerIsNotNull(CodeGenFunction &CGF, in EmitMemberPointerIsNotNull() argument
1061 CGBuilderTy &Builder = CGF.Builder; in EmitMemberPointerIsNotNull()
1113 void ItaniumCXXABI::emitVirtualObjectDelete(CodeGenFunction &CGF, in emitVirtualObjectDelete() argument
1127 CGF.GetVTablePtr(Ptr, CGF.IntPtrTy->getPointerTo(), ClassDecl); in emitVirtualObjectDelete()
1130 llvm::Value *OffsetPtr = CGF.Builder.CreateConstInBoundsGEP1_64( in emitVirtualObjectDelete()
1133 CGF.Builder.CreateAlignedLoad(OffsetPtr, CGF.getPointerAlign()); in emitVirtualObjectDelete()
1137 CGF.Builder.CreateBitCast(Ptr.getPointer(), CGF.Int8PtrTy); in emitVirtualObjectDelete()
1138 CompletePtr = CGF.Builder.CreateInBoundsGEP(CompletePtr, Offset); in emitVirtualObjectDelete()
1142 CGF.pushCallObjectDeleteCleanup(DE->getOperatorDelete(), CompletePtr, in emitVirtualObjectDelete()
1149 EmitVirtualDestructorCall(CGF, Dtor, DtorType, Ptr, /*CE=*/nullptr); in emitVirtualObjectDelete()
1152 CGF.PopCleanupBlock(); in emitVirtualObjectDelete()
1155 void ItaniumCXXABI::emitRethrow(CodeGenFunction &CGF, bool isNoReturn) { in emitRethrow() argument
1164 CGF.EmitNoreturnRuntimeCallOrInvoke(Fn, None); in emitRethrow()
1166 CGF.EmitRuntimeCallOrInvoke(Fn); in emitRethrow()
1189 void ItaniumCXXABI::emitThrow(CodeGenFunction &CGF, const CXXThrowExpr *E) { in emitThrow() argument
1192 llvm::Type *SizeTy = CGF.ConvertType(getContext().getSizeType()); in emitThrow()
1196 llvm::CallInst *ExceptionPtr = CGF.EmitNounwindRuntimeCall( in emitThrow()
1200 CGF.EmitAnyExprToExn(E->getSubExpr(), Address(ExceptionPtr, ExnAlign)); in emitThrow()
1220 CGF.EmitNoreturnRuntimeCallOrInvoke(getThrowFn(CGM), args); in emitThrow()
1223 static llvm::Constant *getItaniumDynamicCastFn(CodeGenFunction &CGF) { in getItaniumDynamicCastFn() argument
1229 llvm::Type *Int8PtrTy = CGF.Int8PtrTy; in getItaniumDynamicCastFn()
1231 CGF.ConvertType(CGF.getContext().getPointerDiffType()); in getItaniumDynamicCastFn()
1241 CGF.getLLVMContext(), llvm::AttributeList::FunctionIndex, FuncAttrs); in getItaniumDynamicCastFn()
1243 return CGF.CGM.CreateRuntimeFunction(FTy, "__dynamic_cast", Attrs); in getItaniumDynamicCastFn()
1246 static llvm::Constant *getBadCastFn(CodeGenFunction &CGF) { in getBadCastFn() argument
1248 llvm::FunctionType *FTy = llvm::FunctionType::get(CGF.VoidTy, false); in getBadCastFn()
1249 return CGF.CGM.CreateRuntimeFunction(FTy, "__cxa_bad_cast"); in getBadCastFn()
1304 static llvm::Constant *getBadTypeidFn(CodeGenFunction &CGF) { in getBadTypeidFn() argument
1306 llvm::FunctionType *FTy = llvm::FunctionType::get(CGF.VoidTy, false); in getBadTypeidFn()
1308 return CGF.CGM.CreateRuntimeFunction(FTy, "__cxa_bad_typeid"); in getBadTypeidFn()
1316 void ItaniumCXXABI::EmitBadTypeidCall(CodeGenFunction &CGF) { in EmitBadTypeidCall() argument
1317 llvm::Value *Fn = getBadTypeidFn(CGF); in EmitBadTypeidCall()
1318 CGF.EmitRuntimeCallOrInvoke(Fn).setDoesNotReturn(); in EmitBadTypeidCall()
1319 CGF.Builder.CreateUnreachable(); in EmitBadTypeidCall()
1322 llvm::Value *ItaniumCXXABI::EmitTypeid(CodeGenFunction &CGF, in EmitTypeid() argument
1329 CGF.GetVTablePtr(ThisPtr, StdTypeInfoPtrTy->getPointerTo(), ClassDecl); in EmitTypeid()
1332 Value = CGF.Builder.CreateConstInBoundsGEP1_64(Value, -1ULL); in EmitTypeid()
1333 return CGF.Builder.CreateAlignedLoad(Value, CGF.getPointerAlign()); in EmitTypeid()
1342 CodeGenFunction &CGF, Address ThisAddr, QualType SrcRecordTy, in EmitDynamicCastCall() argument
1345 CGF.ConvertType(CGF.getContext().getPointerDiffType()); in EmitDynamicCastCall()
1346 llvm::Type *DestLTy = CGF.ConvertType(DestTy); in EmitDynamicCastCall()
1349 CGF.CGM.GetAddrOfRTTIDescriptor(SrcRecordTy.getUnqualifiedType()); in EmitDynamicCastCall()
1351 CGF.CGM.GetAddrOfRTTIDescriptor(DestRecordTy.getUnqualifiedType()); in EmitDynamicCastCall()
1358 computeOffsetHint(CGF.getContext(), SrcDecl, DestDecl).getQuantity()); in EmitDynamicCastCall()
1362 Value = CGF.EmitCastToVoidPtr(Value); in EmitDynamicCastCall()
1365 Value = CGF.EmitNounwindRuntimeCall(getItaniumDynamicCastFn(CGF), args); in EmitDynamicCastCall()
1366 Value = CGF.Builder.CreateBitCast(Value, DestLTy); in EmitDynamicCastCall()
1372 CGF.createBasicBlock("dynamic_cast.bad_cast"); in EmitDynamicCastCall()
1374 llvm::Value *IsNull = CGF.Builder.CreateIsNull(Value); in EmitDynamicCastCall()
1375 CGF.Builder.CreateCondBr(IsNull, BadCastBlock, CastEnd); in EmitDynamicCastCall()
1377 CGF.EmitBlock(BadCastBlock); in EmitDynamicCastCall()
1378 EmitBadCastCall(CGF); in EmitDynamicCastCall()
1384 llvm::Value *ItaniumCXXABI::EmitDynamicCastToVoid(CodeGenFunction &CGF, in EmitDynamicCastToVoid() argument
1389 CGF.ConvertType(CGF.getContext().getPointerDiffType()); in EmitDynamicCastToVoid()
1390 llvm::Type *DestLTy = CGF.ConvertType(DestTy); in EmitDynamicCastToVoid()
1395 llvm::Value *VTable = CGF.GetVTablePtr(ThisAddr, PtrDiffLTy->getPointerTo(), in EmitDynamicCastToVoid()
1400 CGF.Builder.CreateConstInBoundsGEP1_64(VTable, -2ULL); in EmitDynamicCastToVoid()
1402 CGF.Builder.CreateAlignedLoad(OffsetToTop, CGF.getPointerAlign(), in EmitDynamicCastToVoid()
1407 Value = CGF.EmitCastToVoidPtr(Value); in EmitDynamicCastToVoid()
1408 Value = CGF.Builder.CreateInBoundsGEP(Value, OffsetToTop); in EmitDynamicCastToVoid()
1410 return CGF.Builder.CreateBitCast(Value, DestLTy); in EmitDynamicCastToVoid()
1413 bool ItaniumCXXABI::EmitBadCastCall(CodeGenFunction &CGF) { in EmitBadCastCall() argument
1414 llvm::Value *Fn = getBadCastFn(CGF); in EmitBadCastCall()
1415 CGF.EmitRuntimeCallOrInvoke(Fn).setDoesNotReturn(); in EmitBadCastCall()
1416 CGF.Builder.CreateUnreachable(); in EmitBadCastCall()
1421 ItaniumCXXABI::GetVirtualBaseClassOffset(CodeGenFunction &CGF, in GetVirtualBaseClassOffset() argument
1425 llvm::Value *VTablePtr = CGF.GetVTablePtr(This, CGM.Int8PtrTy, ClassDecl); in GetVirtualBaseClassOffset()
1431 CGF.Builder.CreateConstGEP1_64(VTablePtr, VBaseOffsetOffset.getQuantity(), in GetVirtualBaseClassOffset()
1433 VBaseOffsetPtr = CGF.Builder.CreateBitCast(VBaseOffsetPtr, in GetVirtualBaseClassOffset()
1437 CGF.Builder.CreateAlignedLoad(VBaseOffsetPtr, CGF.getPointerAlign(), in GetVirtualBaseClassOffset()
1492 void ItaniumCXXABI::addImplicitStructorParams(CodeGenFunction &CGF, in addImplicitStructorParams() argument
1495 const CXXMethodDecl *MD = cast<CXXMethodDecl>(CGF.CurGD.getDecl()); in addImplicitStructorParams()
1499 if (NeedsVTTParameter(CGF.CurGD)) { in addImplicitStructorParams()
1508 getStructorImplicitParamDecl(CGF) = VTTDecl; in addImplicitStructorParams()
1512 void ItaniumCXXABI::EmitInstanceFunctionProlog(CodeGenFunction &CGF) { in EmitInstanceFunctionProlog() argument
1514 if (CGF.CurFuncDecl && CGF.CurFuncDecl->hasAttr<NakedAttr>()) in EmitInstanceFunctionProlog()
1519 setCXXABIThisValue(CGF, loadIncomingCXXThis(CGF)); in EmitInstanceFunctionProlog()
1522 if (getStructorImplicitParamDecl(CGF)) { in EmitInstanceFunctionProlog()
1523 getStructorImplicitParamValue(CGF) = CGF.Builder.CreateLoad( in EmitInstanceFunctionProlog()
1524 CGF.GetAddrOfLocalVar(getStructorImplicitParamDecl(CGF)), "vtt"); in EmitInstanceFunctionProlog()
1535 if (HasThisReturn(CGF.CurGD)) in EmitInstanceFunctionProlog()
1536 CGF.Builder.CreateStore(getThisValue(CGF), CGF.ReturnValue); in EmitInstanceFunctionProlog()
1540 CodeGenFunction &CGF, const CXXConstructorDecl *D, CXXCtorType Type, in addImplicitConstructorArgs() argument
1547 CGF.GetVTTParameter(GlobalDecl(D, Type), ForVirtualBase, Delegating); in addImplicitConstructorArgs()
1553 void ItaniumCXXABI::EmitDestructorCall(CodeGenFunction &CGF, in EmitDestructorCall() argument
1558 llvm::Value *VTT = CGF.GetVTTParameter(GD, ForVirtualBase, Delegating); in EmitDestructorCall()
1564 Callee = CGF.BuildAppleKextVirtualDestructorCall(DD, Type, DD->getParent()); in EmitDestructorCall()
1569 CGF.EmitCXXMemberOrOperatorCall(DD, Callee, ReturnValueSlot(), in EmitDestructorCall()
1617 CodeGenFunction &CGF, CodeGenFunction::VPtr Vptr) { in isVirtualOffsetNeededForVTableField() argument
1620 return NeedsVTTParameter(CGF.CurGD); in isVirtualOffsetNeededForVTableField()
1624 CodeGenFunction &CGF, const CXXRecordDecl *VTableClass, BaseSubobject Base, in getVTableAddressPointInStructor() argument
1628 NeedsVTTParameter(CGF.CurGD)) { in getVTableAddressPointInStructor()
1629 return getVTableAddressPointInStructorWithVTT(CGF, VTableClass, Base, in getVTableAddressPointInStructor()
1658 CodeGenFunction &CGF, const CXXRecordDecl *VTableClass, BaseSubobject Base, in getVTableAddressPointInStructorWithVTT() argument
1661 NeedsVTTParameter(CGF.CurGD) && "This class doesn't have VTT"); in getVTableAddressPointInStructorWithVTT()
1668 llvm::Value *VTT = CGF.LoadCXXVTT(); in getVTableAddressPointInStructorWithVTT()
1670 VTT = CGF.Builder.CreateConstInBoundsGEP1_64(VTT, VirtualPointerIndex); in getVTableAddressPointInStructorWithVTT()
1673 return CGF.Builder.CreateAlignedLoad(VTT, CGF.getPointerAlign()); in getVTableAddressPointInStructorWithVTT()
1715 CGCallee ItaniumCXXABI::getVirtualFunctionPointer(CodeGenFunction &CGF, in getVirtualFunctionPointer() argument
1722 llvm::Value *VTable = CGF.GetVTablePtr(This, Ty, MethodDecl->getParent()); in getVirtualFunctionPointer()
1726 if (CGF.ShouldEmitVTableTypeCheckedLoad(MethodDecl->getParent())) { in getVirtualFunctionPointer()
1727 VFunc = CGF.EmitVTableTypeCheckedLoad( in getVirtualFunctionPointer()
1731 CGF.EmitTypeMetadataCodeForVCall(MethodDecl->getParent(), VTable, Loc); in getVirtualFunctionPointer()
1734 CGF.Builder.CreateConstInBoundsGEP1_64(VTable, VTableIndex, "vfn"); in getVirtualFunctionPointer()
1736 CGF.Builder.CreateAlignedLoad(VFuncPtr, CGF.getPointerAlign()); in getVirtualFunctionPointer()
1758 CodeGenFunction &CGF, const CXXDestructorDecl *Dtor, CXXDtorType DtorType, in EmitVirtualDestructorCall() argument
1765 llvm::FunctionType *Ty = CGF.CGM.getTypes().GetFunctionType(*FInfo); in EmitVirtualDestructorCall()
1769 CGF.EmitCXXMemberOrOperatorCall(Dtor, Callee, ReturnValueSlot(), in EmitVirtualDestructorCall()
1838 static llvm::Value *performTypeAdjustment(CodeGenFunction &CGF, in performTypeAdjustment() argument
1846 Address V = CGF.Builder.CreateElementBitCast(InitialPtr, CGF.Int8Ty); in performTypeAdjustment()
1850 V = CGF.Builder.CreateConstInBoundsByteGEP(V, in performTypeAdjustment()
1858 CGF.ConvertType(CGF.getContext().getPointerDiffType()); in performTypeAdjustment()
1860 Address VTablePtrPtr = CGF.Builder.CreateElementBitCast(V, CGF.Int8PtrTy); in performTypeAdjustment()
1861 llvm::Value *VTablePtr = CGF.Builder.CreateLoad(VTablePtrPtr); in performTypeAdjustment()
1864 CGF.Builder.CreateConstInBoundsGEP1_64(VTablePtr, VirtualAdjustment); in performTypeAdjustment()
1866 OffsetPtr = CGF.Builder.CreateBitCast(OffsetPtr, PtrDiffTy->getPointerTo()); in performTypeAdjustment()
1870 CGF.Builder.CreateAlignedLoad(OffsetPtr, CGF.getPointerAlign()); in performTypeAdjustment()
1873 ResultPtr = CGF.Builder.CreateInBoundsGEP(V.getPointer(), Offset); in performTypeAdjustment()
1881 ResultPtr = CGF.Builder.CreateConstInBoundsGEP1_64(ResultPtr, in performTypeAdjustment()
1886 return CGF.Builder.CreateBitCast(ResultPtr, InitialPtr.getType()); in performTypeAdjustment()
1889 llvm::Value *ItaniumCXXABI::performThisAdjustment(CodeGenFunction &CGF, in performThisAdjustment() argument
1892 return performTypeAdjustment(CGF, This, TA.NonVirtual, in performThisAdjustment()
1898 ItaniumCXXABI::performReturnAdjustment(CodeGenFunction &CGF, Address Ret, in performReturnAdjustment() argument
1900 return performTypeAdjustment(CGF, Ret, RA.NonVirtual, in performReturnAdjustment()
1905 void ARMCXXABI::EmitReturnFromThunk(CodeGenFunction &CGF, in EmitReturnFromThunk() argument
1907 if (!isa<CXXDestructorDecl>(CGF.CurGD.getDecl())) in EmitReturnFromThunk()
1908 return ItaniumCXXABI::EmitReturnFromThunk(CGF, RV, ResultType); in EmitReturnFromThunk()
1911 llvm::Type *T = CGF.ReturnValue.getElementType(); in EmitReturnFromThunk()
1913 return ItaniumCXXABI::EmitReturnFromThunk(CGF, Undef, ResultType); in EmitReturnFromThunk()
1925 Address ItaniumCXXABI::InitializeArrayCookie(CodeGenFunction &CGF, in InitializeArrayCookie() argument
1935 CharUnits SizeSize = CGF.getSizeSize(); in InitializeArrayCookie()
1946 CookiePtr = CGF.Builder.CreateConstInBoundsByteGEP(CookiePtr, CookieOffset); in InitializeArrayCookie()
1950 CGF.Builder.CreateElementBitCast(CookiePtr, CGF.SizeTy); in InitializeArrayCookie()
1951 llvm::Instruction *SI = CGF.Builder.CreateStore(NumElements, NumElementsPtr); in InitializeArrayCookie()
1963 CGF.Builder.CreateCall(F, NumElementsPtr.getPointer()); in InitializeArrayCookie()
1968 return CGF.Builder.CreateConstInBoundsByteGEP(NewPtr, CookieSize); in InitializeArrayCookie()
1971 llvm::Value *ItaniumCXXABI::readArrayCookieImpl(CodeGenFunction &CGF, in readArrayCookieImpl() argument
1976 CharUnits numElementsOffset = cookieSize - CGF.getSizeSize(); in readArrayCookieImpl()
1979 CGF.Builder.CreateConstInBoundsByteGEP(numElementsPtr, numElementsOffset); in readArrayCookieImpl()
1982 numElementsPtr = CGF.Builder.CreateElementBitCast(numElementsPtr, CGF.SizeTy); in readArrayCookieImpl()
1984 return CGF.Builder.CreateLoad(numElementsPtr); in readArrayCookieImpl()
1991 llvm::FunctionType::get(CGF.SizeTy, CGF.SizeTy->getPointerTo(0), false); in readArrayCookieImpl()
1994 return CGF.Builder.CreateCall(F, numElementsPtr.getPointer()); in readArrayCookieImpl()
2010 Address ARMCXXABI::InitializeArrayCookie(CodeGenFunction &CGF, in InitializeArrayCookie() argument
2021 cookie = CGF.Builder.CreateElementBitCast(cookie, CGF.SizeTy); in InitializeArrayCookie()
2022 llvm::Value *elementSize = llvm::ConstantInt::get(CGF.SizeTy, in InitializeArrayCookie()
2024 CGF.Builder.CreateStore(elementSize, cookie); in InitializeArrayCookie()
2027 cookie = CGF.Builder.CreateConstInBoundsGEP(cookie, 1, CGF.getSizeSize()); in InitializeArrayCookie()
2028 CGF.Builder.CreateStore(numElements, cookie); in InitializeArrayCookie()
2033 return CGF.Builder.CreateConstInBoundsByteGEP(newPtr, cookieSize); in InitializeArrayCookie()
2036 llvm::Value *ARMCXXABI::readArrayCookieImpl(CodeGenFunction &CGF, in readArrayCookieImpl() argument
2042 = CGF.Builder.CreateConstInBoundsByteGEP(allocPtr, CGF.getSizeSize()); in readArrayCookieImpl()
2044 numElementsPtr = CGF.Builder.CreateElementBitCast(numElementsPtr, CGF.SizeTy); in readArrayCookieImpl()
2045 return CGF.Builder.CreateLoad(numElementsPtr); in readArrayCookieImpl()
2092 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
2093 CGF.EmitNounwindRuntimeCall(getGuardAbortFn(CGF.CGM, Guard->getType()), in Emit()
2101 void ItaniumCXXABI::EmitGuardedInit(CodeGenFunction &CGF, in EmitGuardedInit() argument
2105 CGBuilderTy &Builder = CGF.Builder; in EmitGuardedInit()
2127 guardTy = CGF.Int8Ty; in EmitGuardedInit()
2133 guardTy = CGF.SizeTy; in EmitGuardedInit()
2134 guardAlignment = CGF.getSizeAlign(); in EmitGuardedInit()
2136 guardTy = CGF.Int64Ty; in EmitGuardedInit()
2178 CGF.CurFn->setComdat(C); in EmitGuardedInit()
2244 llvm::BasicBlock *InitCheckBlock = CGF.createBasicBlock("init.check"); in EmitGuardedInit()
2245 llvm::BasicBlock *EndBlock = CGF.createBasicBlock("init.end"); in EmitGuardedInit()
2248 CGF.EmitCXXGuardedInitBranch(NeedsInit, InitCheckBlock, EndBlock, in EmitGuardedInit()
2251 CGF.EmitBlock(InitCheckBlock); in EmitGuardedInit()
2257 = CGF.EmitNounwindRuntimeCall(getGuardAcquireFn(CGM, guardPtrTy), guard); in EmitGuardedInit()
2259 llvm::BasicBlock *InitBlock = CGF.createBasicBlock("init"); in EmitGuardedInit()
2265 CGF.EHStack.pushCleanup<CallGuardAbort>(EHCleanup, guard); in EmitGuardedInit()
2267 CGF.EmitBlock(InitBlock); in EmitGuardedInit()
2271 CGF.EmitCXXGlobalVarDeclInit(D, var, shouldPerformInit); in EmitGuardedInit()
2275 CGF.PopCleanupBlock(); in EmitGuardedInit()
2278 CGF.EmitNounwindRuntimeCall(getGuardReleaseFn(CGM, guardPtrTy), in EmitGuardedInit()
2284 CGF.EmitBlock(EndBlock); in EmitGuardedInit()
2288 static void emitGlobalDtorWithCXAAtExit(CodeGenFunction &CGF, in emitGlobalDtorWithCXAAtExit() argument
2294 const llvm::Triple &T = CGF.getTarget().getTriple(); in emitGlobalDtorWithCXAAtExit()
2302 llvm::FunctionType::get(CGF.VoidTy, CGF.Int8PtrTy, false)->getPointerTo(); in emitGlobalDtorWithCXAAtExit()
2305 llvm::Type *paramTys[] = { dtorTy, CGF.Int8PtrTy, CGF.Int8PtrTy }; in emitGlobalDtorWithCXAAtExit()
2307 llvm::FunctionType::get(CGF.IntTy, paramTys, false); in emitGlobalDtorWithCXAAtExit()
2310 llvm::Constant *atexit = CGF.CGM.CreateRuntimeFunction(atexitTy, Name); in emitGlobalDtorWithCXAAtExit()
2316 CGF.CGM.CreateRuntimeVariable(CGF.Int8Ty, "__dso_handle"); in emitGlobalDtorWithCXAAtExit()
2325 addr = llvm::Constant::getNullValue(CGF.Int8PtrTy); in emitGlobalDtorWithCXAAtExit()
2329 llvm::ConstantExpr::getBitCast(addr, CGF.Int8PtrTy), in emitGlobalDtorWithCXAAtExit()
2332 CGF.EmitNounwindRuntimeCall(atexit, args); in emitGlobalDtorWithCXAAtExit()
2347 CodeGenFunction CGF(*this); in registerGlobalDtorsWithAtExit() local
2361 CGF.StartFunction(GlobalDecl(FD), ReturnTy, GlobalInitFn, in registerGlobalDtorsWithAtExit()
2369 emitGlobalDtorWithCXAAtExit(CGF, Dtor, nullptr, false); in registerGlobalDtorsWithAtExit()
2371 CGF.registerGlobalDtorWithAtExit(Dtor); in registerGlobalDtorsWithAtExit()
2374 CGF.FinishFunction(); in registerGlobalDtorsWithAtExit()
2380 void ItaniumCXXABI::registerGlobalDtor(CodeGenFunction &CGF, in registerGlobalDtor() argument
2389 return emitGlobalDtorWithCXAAtExit(CGF, dtor, addr, D.getTLSKind()); in registerGlobalDtor()
2401 CGF.registerGlobalDtorWithAtExit(D, dtor, addr); in registerGlobalDtor()
2619 LValue ItaniumCXXABI::EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF, in EmitThreadLocalVarDeclLValue() argument
2622 llvm::Value *Val = CGF.CGM.GetAddrOfGlobalVar(VD); in EmitThreadLocalVarDeclLValue()
2625 llvm::CallInst *CallVal = CGF.Builder.CreateCall(Wrapper); in EmitThreadLocalVarDeclLValue()
2630 LV = CGF.MakeNaturalAlignAddrLValue(CallVal, LValType); in EmitThreadLocalVarDeclLValue()
2632 LV = CGF.MakeAddrLValue(CallVal, LValType, in EmitThreadLocalVarDeclLValue()
2633 CGF.getContext().getDeclAlign(VD)); in EmitThreadLocalVarDeclLValue()
3959 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
3961 CGF.EmitNounwindRuntimeCall(getEndCatchFn(CGF.CGM)); in Emit()
3965 CGF.EmitRuntimeCallOrInvoke(getEndCatchFn(CGF.CGM)); in Emit()
3974 static llvm::Value *CallBeginCatch(CodeGenFunction &CGF, in CallBeginCatch() argument
3978 CGF.EmitNounwindRuntimeCall(getBeginCatchFn(CGF.CGM), Exn); in CallBeginCatch()
3980 CGF.EHStack.pushCleanup<CallEndCatch>(NormalAndEHCleanup, EndMightThrow); in CallBeginCatch()
3987 static void InitCatchParam(CodeGenFunction &CGF, in InitCatchParam() argument
3992 llvm::Value *Exn = CGF.getExceptionFromSlot(); in InitCatchParam()
3995 CGF.CGM.getContext().getCanonicalType(CatchParam.getType()); in InitCatchParam()
3996 llvm::Type *LLVMCatchTy = CGF.ConvertTypeForMem(CatchType); in InitCatchParam()
4005 llvm::Value *AdjustedExn = CallBeginCatch(CGF, Exn, EndCatchMightThrow); in InitCatchParam()
4020 CGF.CGM.getTargetCodeGenInfo().getSizeOfUnwindException(); in InitCatchParam()
4021 AdjustedExn = CGF.Builder.CreateConstGEP1_32(Exn, HeaderSize); in InitCatchParam()
4044 CGF.CreateTempAlloca(PtrTy, CGF.getPointerAlign(), "exn.byref.tmp"); in InitCatchParam()
4045 llvm::Value *Casted = CGF.Builder.CreateBitCast(AdjustedExn, PtrTy); in InitCatchParam()
4046 CGF.Builder.CreateStore(Casted, ExnPtrTmp); in InitCatchParam()
4054 CGF.Builder.CreateBitCast(AdjustedExn, LLVMCatchTy, "exn.byref"); in InitCatchParam()
4055 CGF.Builder.CreateStore(ExnCast, ParamAddr); in InitCatchParam()
4060 TypeEvaluationKind TEK = CGF.getEvaluationKind(CatchType); in InitCatchParam()
4062 llvm::Value *AdjustedExn = CallBeginCatch(CGF, Exn, false); in InitCatchParam()
4068 CGF.Builder.CreateBitCast(AdjustedExn, LLVMCatchTy, "exn.casted"); in InitCatchParam()
4072 CastExn = CGF.EmitARCRetainNonBlock(CastExn); in InitCatchParam()
4078 CGF.Builder.CreateStore(CastExn, ParamAddr); in InitCatchParam()
4082 CGF.EmitARCInitWeak(ParamAddr, CastExn); in InitCatchParam()
4091 llvm::Value *Cast = CGF.Builder.CreateBitCast(AdjustedExn, PtrTy); in InitCatchParam()
4093 LValue srcLV = CGF.MakeNaturalAlignAddrLValue(Cast, CatchType); in InitCatchParam()
4094 LValue destLV = CGF.MakeAddrLValue(ParamAddr, CatchType); in InitCatchParam()
4097 CGF.EmitStoreOfComplex(CGF.EmitLoadOfComplex(srcLV, Loc), destLV, in InitCatchParam()
4101 llvm::Value *ExnLoad = CGF.EmitLoadOfScalar(srcLV, Loc); in InitCatchParam()
4102 CGF.EmitStoreOfScalar(ExnLoad, destLV, /*init*/ true); in InitCatchParam()
4113 CharUnits caughtExnAlignment = CGF.CGM.getClassPointerAlignment(catchRD); in InitCatchParam()
4121 llvm::Value *rawAdjustedExn = CallBeginCatch(CGF, Exn, true); in InitCatchParam()
4122 Address adjustedExn(CGF.Builder.CreateBitCast(rawAdjustedExn, PtrTy), in InitCatchParam()
4124 LValue Dest = CGF.MakeAddrLValue(ParamAddr, CatchType); in InitCatchParam()
4125 LValue Src = CGF.MakeAddrLValue(adjustedExn, CatchType); in InitCatchParam()
4126 CGF.EmitAggregateCopy(Dest, Src, CatchType, AggValueSlot::DoesNotOverlap); in InitCatchParam()
4133 CGF.EmitNounwindRuntimeCall(getGetExceptionPtrFn(CGF.CGM), Exn); in InitCatchParam()
4136 Address adjustedExn(CGF.Builder.CreateBitCast(rawAdjustedExn, PtrTy), in InitCatchParam()
4142 opaque(CGF, OpaqueValueExpr::findInCopyConstruct(copyExpr), in InitCatchParam()
4143 CGF.MakeAddrLValue(adjustedExn, CatchParam.getType())); in InitCatchParam()
4146 CGF.EHStack.pushTerminate(); in InitCatchParam()
4149 CGF.EmitAggExpr(copyExpr, in InitCatchParam()
4157 CGF.EHStack.popTerminate(); in InitCatchParam()
4163 CallBeginCatch(CGF, Exn, true); in InitCatchParam()
4168 void ItaniumCXXABI::emitBeginCatch(CodeGenFunction &CGF, in emitBeginCatch() argument
4195 llvm::Value *Exn = CGF.getExceptionFromSlot(); in emitBeginCatch()
4196 CallBeginCatch(CGF, Exn, true); in emitBeginCatch()
4201 CodeGenFunction::AutoVarEmission var = CGF.EmitAutoVarAlloca(*CatchParam); in emitBeginCatch()
4202 InitCatchParam(CGF, *CatchParam, var.getObjectAddress(CGF), S->getBeginLoc()); in emitBeginCatch()
4203 CGF.EmitAutoVarCleanups(var); in emitBeginCatch()
4259 ItaniumCXXABI::emitTerminateForUnexpectedException(CodeGenFunction &CGF, in emitTerminateForUnexpectedException() argument
4263 assert(CGF.CGM.getLangOpts().CPlusPlus); in emitTerminateForUnexpectedException()
4264 return CGF.EmitNounwindRuntimeCall(getClangCallTerminateFn(CGF.CGM), Exn); in emitTerminateForUnexpectedException()
4266 return CGF.EmitNounwindRuntimeCall(CGF.CGM.getTerminateFn()); in emitTerminateForUnexpectedException()
4270 ItaniumCXXABI::LoadVTablePtr(CodeGenFunction &CGF, Address This, in LoadVTablePtr() argument
4272 return {CGF.GetVTablePtr(This, CGM.Int8PtrTy, RD), RD}; in LoadVTablePtr()
4275 void WebAssemblyCXXABI::emitBeginCatch(CodeGenFunction &CGF, in emitBeginCatch() argument
4277 if (CGF.getTarget().hasFeature("exception-handling")) in emitBeginCatch()
4278 CGF.EHStack.pushCleanup<CatchRetScope>( in emitBeginCatch()
4279 NormalCleanup, cast<llvm::CatchPadInst>(CGF.CurrentFuncletPad)); in emitBeginCatch()
4280 ItaniumCXXABI::emitBeginCatch(CGF, C); in emitBeginCatch()