Lines Matching refs:CGF

37 commonEmitCXXMemberOrOperatorCall(CodeGenFunction &CGF, const CXXMethodDecl *MD,  in commonEmitCXXMemberOrOperatorCall()  argument
45 ASTContext &C = CGF.getContext(); in commonEmitCXXMemberOrOperatorCall()
49 CGF.CGM.getCXXABI().getThisArgumentTypeForMethod(MD); in commonEmitCXXMemberOrOperatorCall()
71 CGF.EmitCallArgs(Args, FPT, drop_begin(CE->arguments(), ArgsToSkip), in commonEmitCXXMemberOrOperatorCall()
483 static void EmitNullBaseClassInitialization(CodeGenFunction &CGF, in EmitNullBaseClassInitialization() argument
489 DestPtr = CGF.Builder.CreateElementBitCast(DestPtr, CGF.Int8Ty); in EmitNullBaseClassInitialization()
491 const ASTRecordLayout &Layout = CGF.getContext().getASTRecordLayout(Base); in EmitNullBaseClassInitialization()
501 CharUnits VBPtrWidth = CGF.getPointerSize(); in EmitNullBaseClassInitialization()
503 CGF.CGM.getCXXABI().getVBPtrOffsets(Base); in EmitNullBaseClassInitialization()
531 llvm::Constant *NullConstantForBase = CGF.CGM.EmitNullConstantForBase(Base); in EmitNullBaseClassInitialization()
534 CGF.CGM.getModule(), NullConstantForBase->getType(), in EmitNullBaseClassInitialization()
542 Address SrcPtr = Address(CGF.EmitCastToVoidPtr(NullVariable), Align); in EmitNullBaseClassInitialization()
548 llvm::Value *StoreSizeVal = CGF.CGM.getSize(StoreSize); in EmitNullBaseClassInitialization()
549 CGF.Builder.CreateMemCpy( in EmitNullBaseClassInitialization()
550 CGF.Builder.CreateConstInBoundsByteGEP(DestPtr, StoreOffset), in EmitNullBaseClassInitialization()
551 CGF.Builder.CreateConstInBoundsByteGEP(SrcPtr, StoreOffset), in EmitNullBaseClassInitialization()
562 llvm::Value *StoreSizeVal = CGF.CGM.getSize(StoreSize); in EmitNullBaseClassInitialization()
563 CGF.Builder.CreateMemSet( in EmitNullBaseClassInitialization()
564 CGF.Builder.CreateConstInBoundsByteGEP(DestPtr, StoreOffset), in EmitNullBaseClassInitialization()
565 CGF.Builder.getInt8(0), StoreSizeVal); in EmitNullBaseClassInitialization()
667 static CharUnits CalculateCookiePadding(CodeGenFunction &CGF, in CalculateCookiePadding() argument
677 return CGF.CGM.getCXXABI().GetArrayCookieSize(E); in CalculateCookiePadding()
680 static llvm::Value *EmitCXXNewAllocSize(CodeGenFunction &CGF, in EmitCXXNewAllocSize() argument
688 CharUnits typeSize = CGF.getContext().getTypeSizeInChars(type); in EmitCXXNewAllocSize()
690 = llvm::ConstantInt::get(CGF.SizeTy, typeSize.getQuantity()); in EmitCXXNewAllocSize()
695 unsigned sizeWidth = CGF.SizeTy->getBitWidth(); in EmitCXXNewAllocSize()
699 CalculateCookiePadding(CGF, e).getQuantity()); in EmitCXXNewAllocSize()
705 ConstantEmitter(CGF).tryEmitAbstract(e->getArraySize(), e->getType()); in EmitCXXNewAllocSize()
707 numElements = CGF.EmitScalarExpr(e->getArraySize()); in EmitCXXNewAllocSize()
725 = CGF.getContext().getAsConstantArrayType(type)) { in EmitCXXNewAllocSize()
730 CharUnits typeSize = CGF.getContext().getTypeSizeInChars(type); in EmitCXXNewAllocSize()
767 numElements = llvm::ConstantInt::get(CGF.SizeTy, in EmitCXXNewAllocSize()
780 sizeWithoutCookie = llvm::ConstantInt::get(CGF.SizeTy, allocationSize); in EmitCXXNewAllocSize()
788 size = llvm::Constant::getAllOnesValue(CGF.SizeTy); in EmitCXXNewAllocSize()
790 size = llvm::ConstantInt::get(CGF.SizeTy, allocationSize); in EmitCXXNewAllocSize()
820 hasOverflow = CGF.Builder.CreateICmpUGE(numElements, thresholdV); in EmitCXXNewAllocSize()
821 numElements = CGF.Builder.CreateTrunc(numElements, CGF.SizeTy); in EmitCXXNewAllocSize()
826 numElements = CGF.Builder.CreateSExt(numElements, CGF.SizeTy); in EmitCXXNewAllocSize()
834 hasOverflow = CGF.Builder.CreateICmpSLT(numElements, in EmitCXXNewAllocSize()
835 llvm::ConstantInt::get(CGF.SizeTy, minElements)); in EmitCXXNewAllocSize()
839 numElements = CGF.Builder.CreateZExt(numElements, CGF.SizeTy); in EmitCXXNewAllocSize()
842 assert(numElements->getType() == CGF.SizeTy); in EmitCXXNewAllocSize()
847 hasOverflow = CGF.Builder.CreateICmpULT(numElements, in EmitCXXNewAllocSize()
848 llvm::ConstantInt::get(CGF.SizeTy, minElements)); in EmitCXXNewAllocSize()
853 hasOverflow = CGF.Builder.CreateOr(hasOverflow, in EmitCXXNewAllocSize()
854 CGF.Builder.CreateICmpULT(numElements, in EmitCXXNewAllocSize()
855 llvm::ConstantInt::get(CGF.SizeTy, minElements))); in EmitCXXNewAllocSize()
870 = CGF.CGM.getIntrinsic(llvm::Intrinsic::umul_with_overflow, CGF.SizeTy); in EmitCXXNewAllocSize()
873 llvm::ConstantInt::get(CGF.SizeTy, typeSizeMultiplier); in EmitCXXNewAllocSize()
875 CGF.Builder.CreateCall(umul_with_overflow, {size, tsmV}); in EmitCXXNewAllocSize()
877 llvm::Value *overflowed = CGF.Builder.CreateExtractValue(result, 1); in EmitCXXNewAllocSize()
879 hasOverflow = CGF.Builder.CreateOr(hasOverflow, overflowed); in EmitCXXNewAllocSize()
883 size = CGF.Builder.CreateExtractValue(result, 0); in EmitCXXNewAllocSize()
896 llvm::ConstantInt::get(CGF.SizeTy, arraySizeMultiplier); in EmitCXXNewAllocSize()
897 numElements = CGF.Builder.CreateMul(numElements, asmV); in EmitCXXNewAllocSize()
910 = CGF.CGM.getIntrinsic(llvm::Intrinsic::uadd_with_overflow, CGF.SizeTy); in EmitCXXNewAllocSize()
912 llvm::Value *cookieSizeV = llvm::ConstantInt::get(CGF.SizeTy, cookieSize); in EmitCXXNewAllocSize()
914 CGF.Builder.CreateCall(uadd_with_overflow, {size, cookieSizeV}); in EmitCXXNewAllocSize()
916 llvm::Value *overflowed = CGF.Builder.CreateExtractValue(result, 1); in EmitCXXNewAllocSize()
918 hasOverflow = CGF.Builder.CreateOr(hasOverflow, overflowed); in EmitCXXNewAllocSize()
922 size = CGF.Builder.CreateExtractValue(result, 0); in EmitCXXNewAllocSize()
929 size = CGF.Builder.CreateSelect(hasOverflow, in EmitCXXNewAllocSize()
930 llvm::Constant::getAllOnesValue(CGF.SizeTy), in EmitCXXNewAllocSize()
942 static void StoreAnyExprIntoOneUnit(CodeGenFunction &CGF, const Expr *Init, in StoreAnyExprIntoOneUnit() argument
946 switch (CGF.getEvaluationKind(AllocType)) { in StoreAnyExprIntoOneUnit()
948 CGF.EmitScalarInit(Init, nullptr, in StoreAnyExprIntoOneUnit()
949 CGF.MakeAddrLValue(NewPtr, AllocType), false); in StoreAnyExprIntoOneUnit()
952 CGF.EmitComplexExprIntoLValue(Init, CGF.MakeAddrLValue(NewPtr, AllocType), in StoreAnyExprIntoOneUnit()
963 CGF.EmitAggExpr(Init, Slot); in StoreAnyExprIntoOneUnit()
1277 static void EmitNewInitializer(CodeGenFunction &CGF, const CXXNewExpr *E, in EmitNewInitializer() argument
1281 ApplyDebugLocation DL(CGF, E); in EmitNewInitializer()
1283 CGF.EmitNewArrayInitializer(E, ElementType, ElementTy, NewPtr, NumElements, in EmitNewInitializer()
1286 StoreAnyExprIntoOneUnit(CGF, Init, E->getAllocatedType(), NewPtr, in EmitNewInitializer()
1292 static RValue EmitNewDeleteCall(CodeGenFunction &CGF, in EmitNewDeleteCall() argument
1297 llvm::Constant *CalleePtr = CGF.CGM.GetAddrOfFunction(CalleeDecl); in EmitNewDeleteCall()
1300 CGF.EmitCall(CGF.CGM.getTypes().arrangeFreeFunctionCall( in EmitNewDeleteCall()
1428 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1435 DeleteArgs.add(Traits::get(CGF, Ptr), FPT->getParamType(0)); in Emit()
1454 DeleteArgs.add(Traits::get(CGF, AllocSize), in Emit()
1455 CGF.getContext().getSizeType()); in Emit()
1463 CGF.SizeTy, AllocAlign.getQuantity())), in Emit()
1464 CGF.getContext().getSizeType()); in Emit()
1469 DeleteArgs.add(Traits::get(CGF, Arg.ArgValue), Arg.ArgType); in Emit()
1473 EmitNewDeleteCall(CGF, OperatorDelete, FPT, DeleteArgs); in Emit()
1480 static void EnterNewDeleteCleanup(CodeGenFunction &CGF, in EnterNewDeleteCleanup() argument
1490 if (!CGF.isInConditionalBranch()) { in EnterNewDeleteCleanup()
1500 DirectCleanup *Cleanup = CGF.EHStack in EnterNewDeleteCleanup()
1510 Cleanup->setPlacementArg(I, Arg.getRValue(CGF), Arg.Ty); in EnterNewDeleteCleanup()
1518 DominatingValue<RValue>::save(CGF, RValue::get(NewPtr.getPointer())); in EnterNewDeleteCleanup()
1520 DominatingValue<RValue>::save(CGF, RValue::get(AllocSize)); in EnterNewDeleteCleanup()
1525 static RValue get(CodeGenFunction &CGF, ValueTy V) { in EnterNewDeleteCleanup()
1526 return V.restore(CGF); in EnterNewDeleteCleanup()
1531 ConditionalCleanup *Cleanup = CGF.EHStack in EnterNewDeleteCleanup()
1542 I, DominatingValue<RValue>::save(CGF, Arg.getRValue(CGF)), Arg.Ty); in EnterNewDeleteCleanup()
1545 CGF.initFullExprCleanup(); in EnterNewDeleteCleanup()
1835 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1836 CGF.EmitDeleteCall(OperatorDelete, Ptr, ElementType); in Emit()
1853 static void EmitDestroyingObjectDelete(CodeGenFunction &CGF, in EmitDestroyingObjectDelete() argument
1858 CGF.CGM.getCXXABI().emitVirtualObjectDelete(CGF, DE, Ptr, ElementType, in EmitDestroyingObjectDelete()
1861 CGF.EmitDeleteCall(DE->getOperatorDelete(), Ptr.getPointer(), ElementType); in EmitDestroyingObjectDelete()
1865 static void EmitObjectDelete(CodeGenFunction &CGF, in EmitObjectDelete() argument
1874 CGF.EmitTypeCheck(CodeGenFunction::TCK_MemberCall, in EmitObjectDelete()
1890 CGF.CGM.getCXXABI().emitVirtualObjectDelete(CGF, DE, Ptr, ElementType, in EmitObjectDelete()
1900 CGF.EHStack.pushCleanup<CallObjectDelete>(NormalAndEHCleanup, in EmitObjectDelete()
1905 CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete, in EmitObjectDelete()
1917 CGF.EmitARCDestroyStrong(Ptr, ARCPreciseLifetime); in EmitObjectDelete()
1921 CGF.EmitARCDestroyWeak(Ptr); in EmitObjectDelete()
1926 CGF.PopCleanupBlock(); in EmitObjectDelete()
1946 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1947 CGF.EmitDeleteCall(OperatorDelete, Ptr, ElementType, NumElements, in Emit()
1954 static void EmitArrayDelete(CodeGenFunction &CGF, in EmitArrayDelete() argument
1961 CGF.CGM.getCXXABI().ReadArrayCookie(CGF, deletedPtr, E, elementType, in EmitArrayDelete()
1968 CGF.EHStack.pushCleanup<CallArrayDelete>(NormalAndEHCleanup, in EmitArrayDelete()
1977 CharUnits elementSize = CGF.getContext().getTypeSizeInChars(elementType); in EmitArrayDelete()
1983 CGF.Builder.CreateInBoundsGEP(arrayBegin, numElements, "delete.end"); in EmitArrayDelete()
1988 CGF.emitArrayDestroy(arrayBegin, arrayEnd, elementType, elementAlign, in EmitArrayDelete()
1989 CGF.getDestroyer(dtorKind), in EmitArrayDelete()
1991 CGF.needsEHCleanup(dtorKind)); in EmitArrayDelete()
1995 CGF.PopCleanupBlock(); in EmitArrayDelete()
2087 static llvm::Value *EmitTypeidFromVTable(CodeGenFunction &CGF, const Expr *E, in EmitTypeidFromVTable() argument
2090 Address ThisPtr = CGF.EmitLValue(E).getAddress(); in EmitTypeidFromVTable()
2098 CGF.EmitTypeCheck(CodeGenFunction::TCK_DynamicOperation, E->getExprLoc(), in EmitTypeidFromVTable()
2109 if (CGF.CGM.getCXXABI().shouldTypeidBeNullChecked( in EmitTypeidFromVTable()
2112 CGF.createBasicBlock("typeid.bad_typeid"); in EmitTypeidFromVTable()
2113 llvm::BasicBlock *EndBlock = CGF.createBasicBlock("typeid.end"); in EmitTypeidFromVTable()
2115 llvm::Value *IsNull = CGF.Builder.CreateIsNull(ThisPtr.getPointer()); in EmitTypeidFromVTable()
2116 CGF.Builder.CreateCondBr(IsNull, BadTypeidBlock, EndBlock); in EmitTypeidFromVTable()
2118 CGF.EmitBlock(BadTypeidBlock); in EmitTypeidFromVTable()
2119 CGF.CGM.getCXXABI().EmitBadTypeidCall(CGF); in EmitTypeidFromVTable()
2120 CGF.EmitBlock(EndBlock); in EmitTypeidFromVTable()
2123 return CGF.CGM.getCXXABI().EmitTypeid(CGF, SrcRecordTy, ThisPtr, in EmitTypeidFromVTable()
2151 static llvm::Value *EmitDynamicCastToNull(CodeGenFunction &CGF, in EmitDynamicCastToNull() argument
2153 llvm::Type *DestLTy = CGF.ConvertType(DestTy); in EmitDynamicCastToNull()
2159 if (!CGF.CGM.getCXXABI().EmitBadCastCall(CGF)) in EmitDynamicCastToNull()
2162 CGF.EmitBlock(CGF.createBasicBlock("dynamic_cast.end")); in EmitDynamicCastToNull()