Lines Matching refs:CGF

36 commonEmitCXXMemberOrOperatorCall(CodeGenFunction &CGF, GlobalDecl GD,  in commonEmitCXXMemberOrOperatorCall()  argument
49 CGF.CGM.getCXXABI().getThisArgumentTypeForMethod(GD); in commonEmitCXXMemberOrOperatorCall()
50 Args.add(RValue::get(This), CGF.getTypes().DeriveThisType(RD, MD)); in commonEmitCXXMemberOrOperatorCall()
75 CGF.EmitCallArgs(Args, FPT, drop_begin(CE->arguments(), ArgsToSkip), in commonEmitCXXMemberOrOperatorCall()
504 static void EmitNullBaseClassInitialization(CodeGenFunction &CGF, in EmitNullBaseClassInitialization() argument
510 DestPtr = DestPtr.withElementType(CGF.Int8Ty); in EmitNullBaseClassInitialization()
512 const ASTRecordLayout &Layout = CGF.getContext().getASTRecordLayout(Base); in EmitNullBaseClassInitialization()
522 CharUnits VBPtrWidth = CGF.getPointerSize(); in EmitNullBaseClassInitialization()
524 CGF.CGM.getCXXABI().getVBPtrOffsets(Base); in EmitNullBaseClassInitialization()
552 llvm::Constant *NullConstantForBase = CGF.CGM.EmitNullConstantForBase(Base); in EmitNullBaseClassInitialization()
555 CGF.CGM.getModule(), NullConstantForBase->getType(), in EmitNullBaseClassInitialization()
563 Address SrcPtr(NullVariable, CGF.Int8Ty, Align); in EmitNullBaseClassInitialization()
569 llvm::Value *StoreSizeVal = CGF.CGM.getSize(StoreSize); in EmitNullBaseClassInitialization()
570 CGF.Builder.CreateMemCpy( in EmitNullBaseClassInitialization()
571 CGF.Builder.CreateConstInBoundsByteGEP(DestPtr, StoreOffset), in EmitNullBaseClassInitialization()
572 CGF.Builder.CreateConstInBoundsByteGEP(SrcPtr, StoreOffset), in EmitNullBaseClassInitialization()
583 llvm::Value *StoreSizeVal = CGF.CGM.getSize(StoreSize); in EmitNullBaseClassInitialization()
584 CGF.Builder.CreateMemSet( in EmitNullBaseClassInitialization()
585 CGF.Builder.CreateConstInBoundsByteGEP(DestPtr, StoreOffset), in EmitNullBaseClassInitialization()
586 CGF.Builder.getInt8(0), StoreSizeVal); in EmitNullBaseClassInitialization()
689 static CharUnits CalculateCookiePadding(CodeGenFunction &CGF, in CalculateCookiePadding() argument
699 return CGF.CGM.getCXXABI().GetArrayCookieSize(E); in CalculateCookiePadding()
702 static llvm::Value *EmitCXXNewAllocSize(CodeGenFunction &CGF, in EmitCXXNewAllocSize() argument
710 CharUnits typeSize = CGF.getContext().getTypeSizeInChars(type); in EmitCXXNewAllocSize()
712 = llvm::ConstantInt::get(CGF.SizeTy, typeSize.getQuantity()); in EmitCXXNewAllocSize()
717 unsigned sizeWidth = CGF.SizeTy->getBitWidth(); in EmitCXXNewAllocSize()
721 CalculateCookiePadding(CGF, e).getQuantity()); in EmitCXXNewAllocSize()
727 ConstantEmitter(CGF).tryEmitAbstract(*e->getArraySize(), e->getType()); in EmitCXXNewAllocSize()
729 numElements = CGF.EmitScalarExpr(*e->getArraySize()); in EmitCXXNewAllocSize()
747 = CGF.getContext().getAsConstantArrayType(type)) { in EmitCXXNewAllocSize()
752 CharUnits typeSize = CGF.getContext().getTypeSizeInChars(type); in EmitCXXNewAllocSize()
789 numElements = llvm::ConstantInt::get(CGF.SizeTy, in EmitCXXNewAllocSize()
802 sizeWithoutCookie = llvm::ConstantInt::get(CGF.SizeTy, allocationSize); in EmitCXXNewAllocSize()
810 size = llvm::Constant::getAllOnesValue(CGF.SizeTy); in EmitCXXNewAllocSize()
812 size = llvm::ConstantInt::get(CGF.SizeTy, allocationSize); in EmitCXXNewAllocSize()
842 hasOverflow = CGF.Builder.CreateICmpUGE(numElements, thresholdV); in EmitCXXNewAllocSize()
843 numElements = CGF.Builder.CreateTrunc(numElements, CGF.SizeTy); in EmitCXXNewAllocSize()
848 numElements = CGF.Builder.CreateSExt(numElements, CGF.SizeTy); in EmitCXXNewAllocSize()
856 hasOverflow = CGF.Builder.CreateICmpSLT(numElements, in EmitCXXNewAllocSize()
857 llvm::ConstantInt::get(CGF.SizeTy, minElements)); in EmitCXXNewAllocSize()
861 numElements = CGF.Builder.CreateZExt(numElements, CGF.SizeTy); in EmitCXXNewAllocSize()
864 assert(numElements->getType() == CGF.SizeTy); in EmitCXXNewAllocSize()
869 hasOverflow = CGF.Builder.CreateICmpULT(numElements, in EmitCXXNewAllocSize()
870 llvm::ConstantInt::get(CGF.SizeTy, minElements)); in EmitCXXNewAllocSize()
875 hasOverflow = CGF.Builder.CreateOr(hasOverflow, in EmitCXXNewAllocSize()
876 CGF.Builder.CreateICmpULT(numElements, in EmitCXXNewAllocSize()
877 llvm::ConstantInt::get(CGF.SizeTy, minElements))); in EmitCXXNewAllocSize()
892 = CGF.CGM.getIntrinsic(llvm::Intrinsic::umul_with_overflow, CGF.SizeTy); in EmitCXXNewAllocSize()
895 llvm::ConstantInt::get(CGF.SizeTy, typeSizeMultiplier); in EmitCXXNewAllocSize()
897 CGF.Builder.CreateCall(umul_with_overflow, {size, tsmV}); in EmitCXXNewAllocSize()
899 llvm::Value *overflowed = CGF.Builder.CreateExtractValue(result, 1); in EmitCXXNewAllocSize()
901 hasOverflow = CGF.Builder.CreateOr(hasOverflow, overflowed); in EmitCXXNewAllocSize()
905 size = CGF.Builder.CreateExtractValue(result, 0); in EmitCXXNewAllocSize()
918 llvm::ConstantInt::get(CGF.SizeTy, arraySizeMultiplier); in EmitCXXNewAllocSize()
919 numElements = CGF.Builder.CreateMul(numElements, asmV); in EmitCXXNewAllocSize()
932 = CGF.CGM.getIntrinsic(llvm::Intrinsic::uadd_with_overflow, CGF.SizeTy); in EmitCXXNewAllocSize()
934 llvm::Value *cookieSizeV = llvm::ConstantInt::get(CGF.SizeTy, cookieSize); in EmitCXXNewAllocSize()
936 CGF.Builder.CreateCall(uadd_with_overflow, {size, cookieSizeV}); in EmitCXXNewAllocSize()
938 llvm::Value *overflowed = CGF.Builder.CreateExtractValue(result, 1); in EmitCXXNewAllocSize()
940 hasOverflow = CGF.Builder.CreateOr(hasOverflow, overflowed); in EmitCXXNewAllocSize()
944 size = CGF.Builder.CreateExtractValue(result, 0); in EmitCXXNewAllocSize()
951 size = CGF.Builder.CreateSelect(hasOverflow, in EmitCXXNewAllocSize()
952 llvm::Constant::getAllOnesValue(CGF.SizeTy), in EmitCXXNewAllocSize()
964 static void StoreAnyExprIntoOneUnit(CodeGenFunction &CGF, const Expr *Init, in StoreAnyExprIntoOneUnit() argument
968 switch (CGF.getEvaluationKind(AllocType)) { in StoreAnyExprIntoOneUnit()
970 CGF.EmitScalarInit(Init, nullptr, in StoreAnyExprIntoOneUnit()
971 CGF.MakeAddrLValue(NewPtr, AllocType), false); in StoreAnyExprIntoOneUnit()
974 CGF.EmitComplexExprIntoLValue(Init, CGF.MakeAddrLValue(NewPtr, AllocType), in StoreAnyExprIntoOneUnit()
985 CGF.EmitAggExpr(Init, Slot); in StoreAnyExprIntoOneUnit()
1312 static void EmitNewInitializer(CodeGenFunction &CGF, const CXXNewExpr *E, in EmitNewInitializer() argument
1316 ApplyDebugLocation DL(CGF, E); in EmitNewInitializer()
1318 CGF.EmitNewArrayInitializer(E, ElementType, ElementTy, NewPtr, NumElements, in EmitNewInitializer()
1321 StoreAnyExprIntoOneUnit(CGF, Init, E->getAllocatedType(), NewPtr, in EmitNewInitializer()
1327 static RValue EmitNewDeleteCall(CodeGenFunction &CGF, in EmitNewDeleteCall() argument
1332 llvm::Constant *CalleePtr = CGF.CGM.GetAddrOfFunction(CalleeDecl); in EmitNewDeleteCall()
1335 CGF.EmitCall(CGF.CGM.getTypes().arrangeFreeFunctionCall( in EmitNewDeleteCall()
1455 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1461 DeleteArgs.add(Traits::get(CGF, Ptr), FPT->getParamType(0)); in Emit()
1480 DeleteArgs.add(Traits::get(CGF, AllocSize), in Emit()
1481 CGF.getContext().getSizeType()); in Emit()
1489 CGF.SizeTy, AllocAlign.getQuantity())), in Emit()
1490 CGF.getContext().getSizeType()); in Emit()
1495 DeleteArgs.add(Traits::get(CGF, Arg.ArgValue), Arg.ArgType); in Emit()
1499 EmitNewDeleteCall(CGF, OperatorDelete, FPT, DeleteArgs); in Emit()
1506 static void EnterNewDeleteCleanup(CodeGenFunction &CGF, in EnterNewDeleteCleanup() argument
1516 if (!CGF.isInConditionalBranch()) { in EnterNewDeleteCleanup()
1526 DirectCleanup *Cleanup = CGF.EHStack in EnterNewDeleteCleanup()
1536 Cleanup->setPlacementArg(I, Arg.getRValue(CGF), Arg.Ty); in EnterNewDeleteCleanup()
1544 DominatingValue<RValue>::save(CGF, RValue::get(NewPtr.getPointer())); in EnterNewDeleteCleanup()
1546 DominatingValue<RValue>::save(CGF, RValue::get(AllocSize)); in EnterNewDeleteCleanup()
1551 static RValue get(CodeGenFunction &CGF, ValueTy V) { in EnterNewDeleteCleanup()
1552 return V.restore(CGF); in EnterNewDeleteCleanup()
1557 ConditionalCleanup *Cleanup = CGF.EHStack in EnterNewDeleteCleanup()
1568 I, DominatingValue<RValue>::save(CGF, Arg.getRValue(CGF)), Arg.Ty); in EnterNewDeleteCleanup()
1571 CGF.initFullExprCleanup(); in EnterNewDeleteCleanup()
1887 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1888 CGF.EmitDeleteCall(OperatorDelete, Ptr, ElementType); in Emit()
1905 static void EmitDestroyingObjectDelete(CodeGenFunction &CGF, in EmitDestroyingObjectDelete() argument
1910 CGF.CGM.getCXXABI().emitVirtualObjectDelete(CGF, DE, Ptr, ElementType, in EmitDestroyingObjectDelete()
1913 CGF.EmitDeleteCall(DE->getOperatorDelete(), Ptr.getPointer(), ElementType); in EmitDestroyingObjectDelete()
1919 static bool EmitObjectDelete(CodeGenFunction &CGF, in EmitObjectDelete() argument
1929 CGF.EmitTypeCheck(CodeGenFunction::TCK_MemberCall, in EmitObjectDelete()
1950 Base, CGF.CGM.getLangOpts().AppleKext))) { in EmitObjectDelete()
1968 CGF.CGM.getCXXABI().emitVirtualObjectDelete(CGF, DE, Ptr, ElementType, in EmitObjectDelete()
1979 CGF.EHStack.pushCleanup<CallObjectDelete>(NormalAndEHCleanup, in EmitObjectDelete()
1984 CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete, in EmitObjectDelete()
1996 CGF.EmitARCDestroyStrong(Ptr, ARCPreciseLifetime); in EmitObjectDelete()
2000 CGF.EmitARCDestroyWeak(Ptr); in EmitObjectDelete()
2006 if (CGF.CGM.getCodeGenOpts().OptimizeSize > 1) { in EmitObjectDelete()
2007 CGF.EmitBlock(UnconditionalDeleteBlock); in EmitObjectDelete()
2008 CGF.PopCleanupBlock(); in EmitObjectDelete()
2012 CGF.PopCleanupBlock(); in EmitObjectDelete()
2033 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
2034 CGF.EmitDeleteCall(OperatorDelete, Ptr, ElementType, NumElements, in Emit()
2041 static void EmitArrayDelete(CodeGenFunction &CGF, in EmitArrayDelete() argument
2048 CGF.CGM.getCXXABI().ReadArrayCookie(CGF, deletedPtr, E, elementType, in EmitArrayDelete()
2055 CGF.EHStack.pushCleanup<CallArrayDelete>(NormalAndEHCleanup, in EmitArrayDelete()
2064 CharUnits elementSize = CGF.getContext().getTypeSizeInChars(elementType); in EmitArrayDelete()
2069 llvm::Value *arrayEnd = CGF.Builder.CreateInBoundsGEP( in EmitArrayDelete()
2075 CGF.emitArrayDestroy(arrayBegin, arrayEnd, elementType, elementAlign, in EmitArrayDelete()
2076 CGF.getDestroyer(dtorKind), in EmitArrayDelete()
2078 CGF.needsEHCleanup(dtorKind)); in EmitArrayDelete()
2082 CGF.PopCleanupBlock(); in EmitArrayDelete()
2183 static llvm::Value *EmitTypeidFromVTable(CodeGenFunction &CGF, const Expr *E, in EmitTypeidFromVTable() argument
2186 Address ThisPtr = CGF.EmitLValue(E).getAddress(CGF); in EmitTypeidFromVTable()
2194 CGF.EmitTypeCheck(CodeGenFunction::TCK_DynamicOperation, E->getExprLoc(), in EmitTypeidFromVTable()
2205 if (CGF.CGM.getCXXABI().shouldTypeidBeNullChecked( in EmitTypeidFromVTable()
2208 CGF.createBasicBlock("typeid.bad_typeid"); in EmitTypeidFromVTable()
2209 llvm::BasicBlock *EndBlock = CGF.createBasicBlock("typeid.end"); in EmitTypeidFromVTable()
2211 llvm::Value *IsNull = CGF.Builder.CreateIsNull(ThisPtr.getPointer()); in EmitTypeidFromVTable()
2212 CGF.Builder.CreateCondBr(IsNull, BadTypeidBlock, EndBlock); in EmitTypeidFromVTable()
2214 CGF.EmitBlock(BadTypeidBlock); in EmitTypeidFromVTable()
2215 CGF.CGM.getCXXABI().EmitBadTypeidCall(CGF); in EmitTypeidFromVTable()
2216 CGF.EmitBlock(EndBlock); in EmitTypeidFromVTable()
2219 return CGF.CGM.getCXXABI().EmitTypeid(CGF, SrcRecordTy, ThisPtr, in EmitTypeidFromVTable()
2253 static llvm::Value *EmitDynamicCastToNull(CodeGenFunction &CGF, in EmitDynamicCastToNull() argument
2255 llvm::Type *DestLTy = CGF.ConvertType(DestTy); in EmitDynamicCastToNull()
2261 if (!CGF.CGM.getCXXABI().EmitBadCastCall(CGF)) in EmitDynamicCastToNull()
2264 CGF.Builder.ClearInsertionPoint(); in EmitDynamicCastToNull()