Home | History | Annotate | Download | only in CodeGen

Lines Matching refs:CGF

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