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()
507 static void EmitNullBaseClassInitialization(CodeGenFunction &CGF, in EmitNullBaseClassInitialization() argument
513 DestPtr = DestPtr.withElementType(CGF.Int8Ty); in EmitNullBaseClassInitialization()
515 const ASTRecordLayout &Layout = CGF.getContext().getASTRecordLayout(Base); in EmitNullBaseClassInitialization()
525 CharUnits VBPtrWidth = CGF.getPointerSize(); in EmitNullBaseClassInitialization()
527 CGF.CGM.getCXXABI().getVBPtrOffsets(Base); in EmitNullBaseClassInitialization()
555 llvm::Constant *NullConstantForBase = CGF.CGM.EmitNullConstantForBase(Base); in EmitNullBaseClassInitialization()
558 CGF.CGM.getModule(), NullConstantForBase->getType(), in EmitNullBaseClassInitialization()
566 Address SrcPtr(NullVariable, CGF.Int8Ty, Align); in EmitNullBaseClassInitialization()
572 llvm::Value *StoreSizeVal = CGF.CGM.getSize(StoreSize); in EmitNullBaseClassInitialization()
573 CGF.Builder.CreateMemCpy( in EmitNullBaseClassInitialization()
574 CGF.Builder.CreateConstInBoundsByteGEP(DestPtr, StoreOffset), in EmitNullBaseClassInitialization()
575 CGF.Builder.CreateConstInBoundsByteGEP(SrcPtr, StoreOffset), in EmitNullBaseClassInitialization()
586 llvm::Value *StoreSizeVal = CGF.CGM.getSize(StoreSize); in EmitNullBaseClassInitialization()
587 CGF.Builder.CreateMemSet( in EmitNullBaseClassInitialization()
588 CGF.Builder.CreateConstInBoundsByteGEP(DestPtr, StoreOffset), in EmitNullBaseClassInitialization()
589 CGF.Builder.getInt8(0), StoreSizeVal); in EmitNullBaseClassInitialization()
692 static CharUnits CalculateCookiePadding(CodeGenFunction &CGF, in CalculateCookiePadding() argument
702 return CGF.CGM.getCXXABI().GetArrayCookieSize(E); in CalculateCookiePadding()
705 static llvm::Value *EmitCXXNewAllocSize(CodeGenFunction &CGF, in EmitCXXNewAllocSize() argument
713 CharUnits typeSize = CGF.getContext().getTypeSizeInChars(type); in EmitCXXNewAllocSize()
715 = llvm::ConstantInt::get(CGF.SizeTy, typeSize.getQuantity()); in EmitCXXNewAllocSize()
720 unsigned sizeWidth = CGF.SizeTy->getBitWidth(); in EmitCXXNewAllocSize()
724 CalculateCookiePadding(CGF, e).getQuantity()); in EmitCXXNewAllocSize()
730 ConstantEmitter(CGF).tryEmitAbstract(*e->getArraySize(), e->getType()); in EmitCXXNewAllocSize()
732 numElements = CGF.EmitScalarExpr(*e->getArraySize()); in EmitCXXNewAllocSize()
750 = CGF.getContext().getAsConstantArrayType(type)) { in EmitCXXNewAllocSize()
755 CharUnits typeSize = CGF.getContext().getTypeSizeInChars(type); in EmitCXXNewAllocSize()
792 numElements = llvm::ConstantInt::get(CGF.SizeTy, in EmitCXXNewAllocSize()
805 sizeWithoutCookie = llvm::ConstantInt::get(CGF.SizeTy, allocationSize); in EmitCXXNewAllocSize()
813 size = llvm::Constant::getAllOnesValue(CGF.SizeTy); in EmitCXXNewAllocSize()
815 size = llvm::ConstantInt::get(CGF.SizeTy, allocationSize); in EmitCXXNewAllocSize()
845 hasOverflow = CGF.Builder.CreateICmpUGE(numElements, thresholdV); in EmitCXXNewAllocSize()
846 numElements = CGF.Builder.CreateTrunc(numElements, CGF.SizeTy); in EmitCXXNewAllocSize()
851 numElements = CGF.Builder.CreateSExt(numElements, CGF.SizeTy); in EmitCXXNewAllocSize()
859 hasOverflow = CGF.Builder.CreateICmpSLT(numElements, in EmitCXXNewAllocSize()
860 llvm::ConstantInt::get(CGF.SizeTy, minElements)); in EmitCXXNewAllocSize()
864 numElements = CGF.Builder.CreateZExt(numElements, CGF.SizeTy); in EmitCXXNewAllocSize()
867 assert(numElements->getType() == CGF.SizeTy); in EmitCXXNewAllocSize()
872 hasOverflow = CGF.Builder.CreateICmpULT(numElements, in EmitCXXNewAllocSize()
873 llvm::ConstantInt::get(CGF.SizeTy, minElements)); in EmitCXXNewAllocSize()
878 hasOverflow = CGF.Builder.CreateOr(hasOverflow, in EmitCXXNewAllocSize()
879 CGF.Builder.CreateICmpULT(numElements, in EmitCXXNewAllocSize()
880 llvm::ConstantInt::get(CGF.SizeTy, minElements))); in EmitCXXNewAllocSize()
895 = CGF.CGM.getIntrinsic(llvm::Intrinsic::umul_with_overflow, CGF.SizeTy); in EmitCXXNewAllocSize()
898 llvm::ConstantInt::get(CGF.SizeTy, typeSizeMultiplier); in EmitCXXNewAllocSize()
900 CGF.Builder.CreateCall(umul_with_overflow, {size, tsmV}); in EmitCXXNewAllocSize()
902 llvm::Value *overflowed = CGF.Builder.CreateExtractValue(result, 1); in EmitCXXNewAllocSize()
904 hasOverflow = CGF.Builder.CreateOr(hasOverflow, overflowed); in EmitCXXNewAllocSize()
908 size = CGF.Builder.CreateExtractValue(result, 0); in EmitCXXNewAllocSize()
921 llvm::ConstantInt::get(CGF.SizeTy, arraySizeMultiplier); in EmitCXXNewAllocSize()
922 numElements = CGF.Builder.CreateMul(numElements, asmV); in EmitCXXNewAllocSize()
935 = CGF.CGM.getIntrinsic(llvm::Intrinsic::uadd_with_overflow, CGF.SizeTy); in EmitCXXNewAllocSize()
937 llvm::Value *cookieSizeV = llvm::ConstantInt::get(CGF.SizeTy, cookieSize); in EmitCXXNewAllocSize()
939 CGF.Builder.CreateCall(uadd_with_overflow, {size, cookieSizeV}); in EmitCXXNewAllocSize()
941 llvm::Value *overflowed = CGF.Builder.CreateExtractValue(result, 1); in EmitCXXNewAllocSize()
943 hasOverflow = CGF.Builder.CreateOr(hasOverflow, overflowed); in EmitCXXNewAllocSize()
947 size = CGF.Builder.CreateExtractValue(result, 0); in EmitCXXNewAllocSize()
954 size = CGF.Builder.CreateSelect(hasOverflow, in EmitCXXNewAllocSize()
955 llvm::Constant::getAllOnesValue(CGF.SizeTy), in EmitCXXNewAllocSize()
967 static void StoreAnyExprIntoOneUnit(CodeGenFunction &CGF, const Expr *Init, in StoreAnyExprIntoOneUnit() argument
971 switch (CGF.getEvaluationKind(AllocType)) { in StoreAnyExprIntoOneUnit()
973 CGF.EmitScalarInit(Init, nullptr, in StoreAnyExprIntoOneUnit()
974 CGF.MakeAddrLValue(NewPtr, AllocType), false); in StoreAnyExprIntoOneUnit()
977 CGF.EmitComplexExprIntoLValue(Init, CGF.MakeAddrLValue(NewPtr, AllocType), in StoreAnyExprIntoOneUnit()
988 CGF.EmitAggExpr(Init, Slot); in StoreAnyExprIntoOneUnit()
1316 static void EmitNewInitializer(CodeGenFunction &CGF, const CXXNewExpr *E, in EmitNewInitializer() argument
1320 ApplyDebugLocation DL(CGF, E); in EmitNewInitializer()
1322 CGF.EmitNewArrayInitializer(E, ElementType, ElementTy, NewPtr, NumElements, in EmitNewInitializer()
1325 StoreAnyExprIntoOneUnit(CGF, Init, E->getAllocatedType(), NewPtr, in EmitNewInitializer()
1331 static RValue EmitNewDeleteCall(CodeGenFunction &CGF, in EmitNewDeleteCall() argument
1336 llvm::Constant *CalleePtr = CGF.CGM.GetAddrOfFunction(CalleeDecl); in EmitNewDeleteCall()
1339 CGF.EmitCall(CGF.CGM.getTypes().arrangeFreeFunctionCall( in EmitNewDeleteCall()
1460 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit() argument
1466 DeleteArgs.add(Traits::get(CGF, Ptr), FPT->getParamType(0)); in Emit()
1485 DeleteArgs.add(Traits::get(CGF, AllocSize), in Emit()
1486 CGF.getContext().getSizeType()); in Emit()
1494 CGF.SizeTy, AllocAlign.getQuantity())), in Emit()
1495 CGF.getContext().getSizeType()); in Emit()
1500 DeleteArgs.add(Traits::get(CGF, Arg.ArgValue), Arg.ArgType); in Emit()
1504 EmitNewDeleteCall(CGF, OperatorDelete, FPT, DeleteArgs); in Emit()
1511 static void EnterNewDeleteCleanup(CodeGenFunction &CGF, in EnterNewDeleteCleanup() argument
1521 if (!CGF.isInConditionalBranch()) { in EnterNewDeleteCleanup()
1531 DirectCleanup *Cleanup = CGF.EHStack.pushCleanupWithExtra<DirectCleanup>( in EnterNewDeleteCleanup()
1533 NewPtr.emitRawPointer(CGF), AllocSize, E->passAlignment(), AllocAlign); in EnterNewDeleteCleanup()
1536 Cleanup->setPlacementArg(I, Arg.getRValue(CGF), Arg.Ty); in EnterNewDeleteCleanup()
1544 DominatingValue<RValue>::save(CGF, RValue::get(NewPtr, CGF)); 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()
1885 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1886 CGF.EmitDeleteCall(OperatorDelete, Ptr, ElementType); in Emit()
1903 static void EmitDestroyingObjectDelete(CodeGenFunction &CGF, in EmitDestroyingObjectDelete() argument
1908 CGF.CGM.getCXXABI().emitVirtualObjectDelete(CGF, DE, Ptr, ElementType, in EmitDestroyingObjectDelete()
1911 CGF.EmitDeleteCall(DE->getOperatorDelete(), Ptr.emitRawPointer(CGF), in EmitDestroyingObjectDelete()
1918 static bool EmitObjectDelete(CodeGenFunction &CGF, in EmitObjectDelete() argument
1928 CGF.EmitTypeCheck(CodeGenFunction::TCK_MemberCall, DE->getExprLoc(), Ptr, in EmitObjectDelete()
1948 Base, CGF.CGM.getLangOpts().AppleKext))) { in EmitObjectDelete()
1966 CGF.CGM.getCXXABI().emitVirtualObjectDelete(CGF, DE, Ptr, ElementType, in EmitObjectDelete()
1977 CGF.EHStack.pushCleanup<CallObjectDelete>( in EmitObjectDelete()
1978 NormalAndEHCleanup, Ptr.emitRawPointer(CGF), OperatorDelete, ElementType); in EmitObjectDelete()
1981 CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete, in EmitObjectDelete()
1993 CGF.EmitARCDestroyStrong(Ptr, ARCPreciseLifetime); in EmitObjectDelete()
1997 CGF.EmitARCDestroyWeak(Ptr); in EmitObjectDelete()
2003 if (CGF.CGM.getCodeGenOpts().OptimizeSize > 1) { in EmitObjectDelete()
2004 CGF.EmitBlock(UnconditionalDeleteBlock); in EmitObjectDelete()
2005 CGF.PopCleanupBlock(); in EmitObjectDelete()
2009 CGF.PopCleanupBlock(); in EmitObjectDelete()
2030 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
2031 CGF.EmitDeleteCall(OperatorDelete, Ptr, ElementType, NumElements, in Emit()
2038 static void EmitArrayDelete(CodeGenFunction &CGF, in EmitArrayDelete() argument
2045 CGF.CGM.getCXXABI().ReadArrayCookie(CGF, deletedPtr, E, elementType, in EmitArrayDelete()
2052 CGF.EHStack.pushCleanup<CallArrayDelete>(NormalAndEHCleanup, in EmitArrayDelete()
2061 CharUnits elementSize = CGF.getContext().getTypeSizeInChars(elementType); in EmitArrayDelete()
2065 llvm::Value *arrayBegin = deletedPtr.emitRawPointer(CGF); in EmitArrayDelete()
2066 llvm::Value *arrayEnd = CGF.Builder.CreateInBoundsGEP( in EmitArrayDelete()
2072 CGF.emitArrayDestroy(arrayBegin, arrayEnd, elementType, elementAlign, in EmitArrayDelete()
2073 CGF.getDestroyer(dtorKind), in EmitArrayDelete()
2075 CGF.needsEHCleanup(dtorKind)); in EmitArrayDelete()
2079 CGF.PopCleanupBlock(); in EmitArrayDelete()
2146 static llvm::Value *EmitTypeidFromVTable(CodeGenFunction &CGF, const Expr *E, in EmitTypeidFromVTable() argument
2150 Address ThisPtr = CGF.EmitLValue(E).getAddress(); in EmitTypeidFromVTable()
2158 CGF.EmitTypeCheck(CodeGenFunction::TCK_DynamicOperation, E->getExprLoc(), in EmitTypeidFromVTable()
2165 CGF.CGM.getCXXABI().shouldTypeidBeNullChecked(SrcRecordTy)) { in EmitTypeidFromVTable()
2167 CGF.createBasicBlock("typeid.bad_typeid"); in EmitTypeidFromVTable()
2168 llvm::BasicBlock *EndBlock = CGF.createBasicBlock("typeid.end"); in EmitTypeidFromVTable()
2170 llvm::Value *IsNull = CGF.Builder.CreateIsNull(ThisPtr); in EmitTypeidFromVTable()
2171 CGF.Builder.CreateCondBr(IsNull, BadTypeidBlock, EndBlock); in EmitTypeidFromVTable()
2173 CGF.EmitBlock(BadTypeidBlock); in EmitTypeidFromVTable()
2174 CGF.CGM.getCXXABI().EmitBadTypeidCall(CGF); in EmitTypeidFromVTable()
2175 CGF.EmitBlock(EndBlock); in EmitTypeidFromVTable()
2178 return CGF.CGM.getCXXABI().EmitTypeid(CGF, SrcRecordTy, ThisPtr, in EmitTypeidFromVTable()
2218 static llvm::Value *EmitDynamicCastToNull(CodeGenFunction &CGF, in EmitDynamicCastToNull() argument
2220 llvm::Type *DestLTy = CGF.ConvertType(DestTy); in EmitDynamicCastToNull()
2226 if (!CGF.CGM.getCXXABI().EmitBadCastCall(CGF)) in EmitDynamicCastToNull()
2229 CGF.Builder.ClearInsertionPoint(); in EmitDynamicCastToNull()