Lines Matching refs:CGF
311 static void EmitNullBaseClassInitialization(CodeGenFunction &CGF, in EmitNullBaseClassInitialization() argument
317 DestPtr = CGF.EmitCastToVoidPtr(DestPtr); in EmitNullBaseClassInitialization()
319 const ASTRecordLayout &Layout = CGF.getContext().getASTRecordLayout(Base); in EmitNullBaseClassInitialization()
323 llvm::Value *SizeVal = CGF.CGM.getSize(Size); in EmitNullBaseClassInitialization()
331 if (!CGF.CGM.getTypes().isZeroInitializable(Base)) { in EmitNullBaseClassInitialization()
332 llvm::Constant *NullConstant = CGF.CGM.EmitNullConstantForBase(Base); in EmitNullBaseClassInitialization()
335 new llvm::GlobalVariable(CGF.CGM.getModule(), NullConstant->getType(), in EmitNullBaseClassInitialization()
340 llvm::Value *SrcPtr = CGF.EmitCastToVoidPtr(NullVariable); in EmitNullBaseClassInitialization()
343 CGF.Builder.CreateMemCpy(DestPtr, SrcPtr, SizeVal, Align.getQuantity()); in EmitNullBaseClassInitialization()
350 CGF.Builder.CreateMemSet(DestPtr, CGF.Builder.getInt8(0), SizeVal, in EmitNullBaseClassInitialization()
451 static CharUnits CalculateCookiePadding(CodeGenFunction &CGF, in CalculateCookiePadding() argument
461 return CGF.CGM.getCXXABI().GetArrayCookieSize(E); in CalculateCookiePadding()
464 static llvm::Value *EmitCXXNewAllocSize(CodeGenFunction &CGF, in EmitCXXNewAllocSize() argument
472 CharUnits typeSize = CGF.getContext().getTypeSizeInChars(type); in EmitCXXNewAllocSize()
474 = llvm::ConstantInt::get(CGF.SizeTy, typeSize.getQuantity()); in EmitCXXNewAllocSize()
479 unsigned sizeWidth = CGF.SizeTy->getBitWidth(); in EmitCXXNewAllocSize()
483 CalculateCookiePadding(CGF, e).getQuantity()); in EmitCXXNewAllocSize()
488 numElements = CGF.EmitScalarExpr(e->getArraySize()); in EmitCXXNewAllocSize()
506 = CGF.getContext().getAsConstantArrayType(type)) { in EmitCXXNewAllocSize()
511 CharUnits typeSize = CGF.getContext().getTypeSizeInChars(type); in EmitCXXNewAllocSize()
548 numElements = llvm::ConstantInt::get(CGF.SizeTy, in EmitCXXNewAllocSize()
561 sizeWithoutCookie = llvm::ConstantInt::get(CGF.SizeTy, allocationSize); in EmitCXXNewAllocSize()
569 size = llvm::Constant::getAllOnesValue(CGF.SizeTy); in EmitCXXNewAllocSize()
571 size = llvm::ConstantInt::get(CGF.SizeTy, allocationSize); in EmitCXXNewAllocSize()
601 hasOverflow = CGF.Builder.CreateICmpUGE(numElements, thresholdV); in EmitCXXNewAllocSize()
602 numElements = CGF.Builder.CreateTrunc(numElements, CGF.SizeTy); in EmitCXXNewAllocSize()
607 numElements = CGF.Builder.CreateSExt(numElements, CGF.SizeTy); in EmitCXXNewAllocSize()
615 hasOverflow = CGF.Builder.CreateICmpSLT(numElements, in EmitCXXNewAllocSize()
616 llvm::ConstantInt::get(CGF.SizeTy, minElements)); in EmitCXXNewAllocSize()
620 numElements = CGF.Builder.CreateZExt(numElements, CGF.SizeTy); in EmitCXXNewAllocSize()
623 assert(numElements->getType() == CGF.SizeTy); in EmitCXXNewAllocSize()
628 hasOverflow = CGF.Builder.CreateICmpULT(numElements, in EmitCXXNewAllocSize()
629 llvm::ConstantInt::get(CGF.SizeTy, minElements)); in EmitCXXNewAllocSize()
634 hasOverflow = CGF.Builder.CreateOr(hasOverflow, in EmitCXXNewAllocSize()
635 CGF.Builder.CreateICmpULT(numElements, in EmitCXXNewAllocSize()
636 llvm::ConstantInt::get(CGF.SizeTy, minElements))); in EmitCXXNewAllocSize()
651 = CGF.CGM.getIntrinsic(llvm::Intrinsic::umul_with_overflow, CGF.SizeTy); in EmitCXXNewAllocSize()
654 llvm::ConstantInt::get(CGF.SizeTy, typeSizeMultiplier); in EmitCXXNewAllocSize()
656 CGF.Builder.CreateCall2(umul_with_overflow, size, tsmV); in EmitCXXNewAllocSize()
658 llvm::Value *overflowed = CGF.Builder.CreateExtractValue(result, 1); in EmitCXXNewAllocSize()
660 hasOverflow = CGF.Builder.CreateOr(hasOverflow, overflowed); in EmitCXXNewAllocSize()
664 size = CGF.Builder.CreateExtractValue(result, 0); in EmitCXXNewAllocSize()
677 llvm::ConstantInt::get(CGF.SizeTy, arraySizeMultiplier); in EmitCXXNewAllocSize()
678 numElements = CGF.Builder.CreateMul(numElements, asmV); in EmitCXXNewAllocSize()
691 = CGF.CGM.getIntrinsic(llvm::Intrinsic::uadd_with_overflow, CGF.SizeTy); in EmitCXXNewAllocSize()
693 llvm::Value *cookieSizeV = llvm::ConstantInt::get(CGF.SizeTy, cookieSize); in EmitCXXNewAllocSize()
695 CGF.Builder.CreateCall2(uadd_with_overflow, size, cookieSizeV); in EmitCXXNewAllocSize()
697 llvm::Value *overflowed = CGF.Builder.CreateExtractValue(result, 1); in EmitCXXNewAllocSize()
699 hasOverflow = CGF.Builder.CreateOr(hasOverflow, overflowed); in EmitCXXNewAllocSize()
703 size = CGF.Builder.CreateExtractValue(result, 0); in EmitCXXNewAllocSize()
710 size = CGF.Builder.CreateSelect(hasOverflow, in EmitCXXNewAllocSize()
711 llvm::Constant::getAllOnesValue(CGF.SizeTy), in EmitCXXNewAllocSize()
723 static void StoreAnyExprIntoOneUnit(CodeGenFunction &CGF, const Expr *Init, in StoreAnyExprIntoOneUnit() argument
726 CharUnits Alignment = CGF.getContext().getTypeAlignInChars(AllocType); in StoreAnyExprIntoOneUnit()
727 switch (CGF.getEvaluationKind(AllocType)) { in StoreAnyExprIntoOneUnit()
729 CGF.EmitScalarInit(Init, nullptr, CGF.MakeAddrLValue(NewPtr, AllocType, in StoreAnyExprIntoOneUnit()
734 CGF.EmitComplexExprIntoLValue(Init, CGF.MakeAddrLValue(NewPtr, AllocType, in StoreAnyExprIntoOneUnit()
744 CGF.EmitAggExpr(Init, Slot); in StoreAnyExprIntoOneUnit()
985 static void EmitNewInitializer(CodeGenFunction &CGF, const CXXNewExpr *E, in EmitNewInitializer() argument
991 CGF.EmitNewArrayInitializer(E, ElementType, NewPtr, NumElements, in EmitNewInitializer()
994 StoreAnyExprIntoOneUnit(CGF, Init, E->getAllocatedType(), NewPtr); in EmitNewInitializer()
999 static RValue EmitNewDeleteCall(CodeGenFunction &CGF, in EmitNewDeleteCall() argument
1004 llvm::Value *CalleeAddr = CGF.CGM.GetAddrOfFunction(Callee); in EmitNewDeleteCall()
1006 CGF.EmitCall(CGF.CGM.getTypes().arrangeFreeFunctionCall(Args, CalleeType), in EmitNewDeleteCall()
1078 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1099 EmitNewDeleteCall(CGF, OperatorDelete, FPT, DeleteArgs); in Emit()
1133 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1143 DeleteArgs.add(Ptr.restore(CGF), *AI++); in Emit()
1147 RValue RV = AllocSize.restore(CGF); in Emit()
1153 RValue RV = getPlacementArgs()[I].restore(CGF); in Emit()
1158 EmitNewDeleteCall(CGF, OperatorDelete, FPT, DeleteArgs); in Emit()
1165 static void EnterNewDeleteCleanup(CodeGenFunction &CGF, in EnterNewDeleteCleanup() argument
1172 if (!CGF.isInConditionalBranch()) { in EnterNewDeleteCleanup()
1173 CallDeleteDuringNew *Cleanup = CGF.EHStack in EnterNewDeleteCleanup()
1186 DominatingValue<RValue>::save(CGF, RValue::get(NewPtr)); in EnterNewDeleteCleanup()
1188 DominatingValue<RValue>::save(CGF, RValue::get(AllocSize)); in EnterNewDeleteCleanup()
1190 CallDeleteDuringConditionalNew *Cleanup = CGF.EHStack in EnterNewDeleteCleanup()
1198 DominatingValue<RValue>::save(CGF, NewArgs[I+1].RV)); in EnterNewDeleteCleanup()
1200 CGF.initFullExprCleanup(); in EnterNewDeleteCleanup()
1383 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1384 CGF.EmitDeleteCall(OperatorDelete, Ptr, ElementType); in Emit()
1390 static void EmitObjectDelete(CodeGenFunction &CGF, in EmitObjectDelete() argument
1411 CGF.CGM.getCXXABI().adjustToCompleteObject(CGF, Ptr, ElementType); in EmitObjectDelete()
1413 CGF.EHStack.pushCleanup<CallObjectDelete>(NormalAndEHCleanup, in EmitObjectDelete()
1420 CGF.CGM.getCXXABI().EmitVirtualDestructorCall(CGF, Dtor, DtorType, in EmitObjectDelete()
1424 CGF.PopCleanupBlock(); in EmitObjectDelete()
1435 CGF.EHStack.pushCleanup<CallObjectDelete>(NormalAndEHCleanup, in EmitObjectDelete()
1439 CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete, in EmitObjectDelete()
1443 else if (CGF.getLangOpts().ObjCAutoRefCount && in EmitObjectDelete()
1453 llvm::Value *PtrValue = CGF.Builder.CreateLoad(Ptr, in EmitObjectDelete()
1456 CGF.EmitARCRelease(PtrValue, ARCPreciseLifetime); in EmitObjectDelete()
1461 CGF.EmitARCDestroyWeak(Ptr); in EmitObjectDelete()
1466 CGF.PopCleanupBlock(); in EmitObjectDelete()
1486 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1496 = CGF.Builder.CreateBitCast(Ptr, CGF.ConvertType(VoidPtrTy)); in Emit()
1503 = cast<llvm::IntegerType>(CGF.ConvertType(size_t)); in Emit()
1506 CGF.CGM.getContext().getTypeSizeInChars(ElementType); in Emit()
1511 Size = CGF.Builder.CreateMul(Size, NumElements); in Emit()
1517 Size = CGF.Builder.CreateAdd(Size, CookieSizeV); in Emit()
1524 EmitNewDeleteCall(CGF, OperatorDelete, DeleteFTy, Args); in Emit()
1530 static void EmitArrayDelete(CodeGenFunction &CGF, in EmitArrayDelete() argument
1537 CGF.CGM.getCXXABI().ReadArrayCookie(CGF, deletedPtr, E, elementType, in EmitArrayDelete()
1544 CGF.EHStack.pushCleanup<CallArrayDelete>(NormalAndEHCleanup, in EmitArrayDelete()
1554 CGF.Builder.CreateInBoundsGEP(deletedPtr, numElements, "delete.end"); in EmitArrayDelete()
1559 CGF.emitArrayDestroy(deletedPtr, arrayEnd, elementType, in EmitArrayDelete()
1560 CGF.getDestroyer(dtorKind), in EmitArrayDelete()
1562 CGF.needsEHCleanup(dtorKind)); in EmitArrayDelete()
1566 CGF.PopCleanupBlock(); in EmitArrayDelete()
1618 static llvm::Value *EmitTypeidFromVTable(CodeGenFunction &CGF, const Expr *E, in EmitTypeidFromVTable() argument
1621 llvm::Value *ThisPtr = CGF.EmitLValue(E).getAddress(); in EmitTypeidFromVTable()
1633 if (CGF.CGM.getCXXABI().shouldTypeidBeNullChecked(IsDeref, SrcRecordTy)) { in EmitTypeidFromVTable()
1635 CGF.createBasicBlock("typeid.bad_typeid"); in EmitTypeidFromVTable()
1636 llvm::BasicBlock *EndBlock = CGF.createBasicBlock("typeid.end"); in EmitTypeidFromVTable()
1638 llvm::Value *IsNull = CGF.Builder.CreateIsNull(ThisPtr); in EmitTypeidFromVTable()
1639 CGF.Builder.CreateCondBr(IsNull, BadTypeidBlock, EndBlock); in EmitTypeidFromVTable()
1641 CGF.EmitBlock(BadTypeidBlock); in EmitTypeidFromVTable()
1642 CGF.CGM.getCXXABI().EmitBadTypeidCall(CGF); in EmitTypeidFromVTable()
1643 CGF.EmitBlock(EndBlock); in EmitTypeidFromVTable()
1646 return CGF.CGM.getCXXABI().EmitTypeid(CGF, SrcRecordTy, ThisPtr, in EmitTypeidFromVTable()
1674 static llvm::Value *EmitDynamicCastToNull(CodeGenFunction &CGF, in EmitDynamicCastToNull() argument
1676 llvm::Type *DestLTy = CGF.ConvertType(DestTy); in EmitDynamicCastToNull()
1682 if (!CGF.CGM.getCXXABI().EmitBadCastCall(CGF)) in EmitDynamicCastToNull()
1685 CGF.EmitBlock(CGF.createBasicBlock("dynamic_cast.end")); in EmitDynamicCastToNull()