Lines Matching refs:CGF
34 CodeGenFunction &CGF; member in __anon6b61e7f80111::AggExprEmitter
56 return CGF.CreateAggTemp(T, "agg.tmp.ensured"); in EnsureSlot()
60 Dest = CGF.CreateAggTemp(T, "agg.tmp.ensured"); in EnsureDest()
65 : CGF(cgf), Builder(CGF.Builder), Dest(Dest) { in AggExprEmitter()
90 if (CGF.getLangOpts().getGC() && TypeRequiresGCollection(T)) in needsGC()
102 ApplyDebugLocation DL(CGF, E); in Visit()
107 CGF.ErrorUnsupported(S, "aggregate expression"); in VisitStmt()
128 = CGF.tryEmitAsConstant(E)) { in VisitDeclRefExpr()
129 EmitFinalDestCopy(E->getType(), result.getReferenceLValue(CGF, E)); in VisitDeclRefExpr()
170 CodeGenFunction::CXXDefaultInitExprScope Scope(CGF); in VisitCXXDefaultInitExpr()
185 LValue LV = CGF.EmitPseudoObjectLValue(E); in VisitPseudoObjectExpr()
189 CGF.EmitPseudoObjectRValue(E, EnsureSlot(E->getType())); in VisitPseudoObjectExpr()
197 void VisitCXXThrowExpr(const CXXThrowExpr *E) { CGF.EmitCXXThrowExpr(E); } in VisitCXXThrowExpr()
199 CGF.EmitAtomicExpr(E, EnsureSlot(E->getType()).getAddr()); in VisitAtomicExpr()
212 LValue LV = CGF.EmitLValue(E); in EmitAggLoadOfLValue()
215 if (LV.getType()->isAtomicType() || CGF.LValueIsSuitableForInlineAtomic(LV)) { in EmitAggLoadOfLValue()
216 CGF.EmitAtomicLoad(LV, E->getExprLoc(), Dest); in EmitAggLoadOfLValue()
261 CGF.getContext().getTypeInfoInChars(E->getType()); in EmitMoveFromReturnSlot()
269 LValue srcLV = CGF.MakeAddrLValue(src.getAggregateAddr(), type, srcAlign); in EmitFinalDestCopy()
295 CharUnits sz = CGF.getContext().getTypeSizeInChars(type); in EmitCopy()
296 llvm::Value *size = llvm::ConstantInt::get(CGF.SizeTy, sz.getQuantity()); in EmitCopy()
297 CGF.CGM.getObjCRuntime().EmitGCMemmoveCollectable(CGF, in EmitCopy()
307 CGF.EmitAggregateCopy(dest.getAddr(), src.getAddr(), type, in EmitCopy()
318 ASTContext &Ctx = CGF.getContext(); in VisitCXXStdInitializerListExpr()
319 LValue Array = CGF.EmitLValue(E->getSubExpr()); in VisitCXXStdInitializerListExpr()
331 CGF.ErrorUnsupported(E, "weird std::initializer_list"); in VisitCXXStdInitializerListExpr()
339 CGF.ErrorUnsupported(E, "weird std::initializer_list"); in VisitCXXStdInitializerListExpr()
344 LValue DestLV = CGF.MakeAddrLValue(Dest.getAddr(), E->getType(), in VisitCXXStdInitializerListExpr()
346 LValue Start = CGF.EmitLValueForFieldInitialization(DestLV, *Field); in VisitCXXStdInitializerListExpr()
347 llvm::Value *Zero = llvm::ConstantInt::get(CGF.PtrDiffTy, 0); in VisitCXXStdInitializerListExpr()
351 CGF.EmitStoreThroughLValue(RValue::get(ArrayStart), Start); in VisitCXXStdInitializerListExpr()
355 CGF.ErrorUnsupported(E, "weird std::initializer_list"); in VisitCXXStdInitializerListExpr()
360 LValue EndOrLength = CGF.EmitLValueForFieldInitialization(DestLV, *Field); in VisitCXXStdInitializerListExpr()
368 CGF.EmitStoreThroughLValue(RValue::get(ArrayEnd), EndOrLength); in VisitCXXStdInitializerListExpr()
371 CGF.EmitStoreThroughLValue(RValue::get(Size), EndOrLength); in VisitCXXStdInitializerListExpr()
373 CGF.ErrorUnsupported(E, "weird std::initializer_list"); in VisitCXXStdInitializerListExpr()
411 llvm::Value *zero = llvm::ConstantInt::get(CGF.SizeTy, 0); in EmitArrayInit()
423 if (CGF.needsEHCleanup(dtorKind)) { in EmitArrayInit()
428 endOfInit = CGF.CreateTempAlloca(begin->getType(), in EmitArrayInit()
431 CGF.pushIrregularPartialArrayCleanup(begin, endOfInit, elementType, in EmitArrayInit()
432 CGF.getDestroyer(dtorKind)); in EmitArrayInit()
433 cleanup = CGF.EHStack.stable_begin(); in EmitArrayInit()
440 llvm::Value *one = llvm::ConstantInt::get(CGF.SizeTy, 1); in EmitArrayInit()
461 LValue elementLV = CGF.MakeAddrLValue(element, elementType); in EmitArrayInit()
474 CGF.getTypes().isZeroInitializable(elementType))) { in EmitArrayInit()
487 llvm::ConstantInt::get(CGF.SizeTy, NumArrayElements), in EmitArrayInit()
491 llvm::BasicBlock *bodyBB = CGF.createBasicBlock("arrayinit.body"); in EmitArrayInit()
494 CGF.EmitBlock(bodyBB); in EmitArrayInit()
500 LValue elementLV = CGF.MakeAddrLValue(currentElement, elementType); in EmitArrayInit()
516 llvm::BasicBlock *endBB = CGF.createBasicBlock("arrayinit.end"); in EmitArrayInit()
520 CGF.EmitBlock(endBB); in EmitArrayInit()
524 if (dtorKind) CGF.DeactivateCleanupBlock(cleanup, cleanupDominator); in EmitArrayInit()
536 EmitFinalDestCopy(e->getType(), CGF.getOpaqueLValueMapping(e)); in VisitOpaqueValueExpr()
542 E->getType().isPODType(CGF.getContext())) { in VisitCompoundLiteralExpr()
550 CGF.EmitAggExpr(E->getInitializer(), Slot); in VisitCompoundLiteralExpr()
573 LValue LV = CGF.EmitCheckedLValue(E->getSubExpr(), in VisitCastExpr()
577 CGF.EmitDynamicCast(LV.getAddress(), cast<CXXDynamicCastExpr>(E)); in VisitCastExpr()
579 CGF.CGM.ErrorUnsupported(E, "non-simple lvalue dynamic_cast"); in VisitCastExpr()
582 CGF.CGM.ErrorUnsupported(E, "lvalue dynamic_cast with a destination"); in VisitCastExpr()
591 QualType PtrTy = CGF.getContext().getPointerType(Ty); in VisitCastExpr()
593 CGF.ConvertType(PtrTy)); in VisitCastExpr()
595 CGF.MakeAddrLValue(CastPtr, Ty)); in VisitCastExpr()
616 assert(CGF.getContext().hasSameUnqualifiedType(valueType, in VisitCastExpr()
621 if (Dest.isIgnored() || !CGF.CGM.isPaddedAtomicType(atomicType)) { in VisitCastExpr()
630 assert(CGF.getContext().hasSameUnqualifiedType(op->getType(), in VisitCastExpr()
640 if (!valueDest.isIgnored() && CGF.CGM.isPaddedAtomicType(atomicType)) { in VisitCastExpr()
644 CGF.EmitNullInitialization(Dest.getAddr(), atomicType); in VisitCastExpr()
648 CGF.Builder.CreateStructGEP(nullptr, valueDest.getAddr(), 0); in VisitCastExpr()
658 CGF.EmitAggExpr(E->getSubExpr(), valueDest); in VisitCastExpr()
665 CGF.CreateAggTemp(atomicType, "atomic-to-nonatomic.temp"); in VisitCastExpr()
666 CGF.EmitAggExpr(E->getSubExpr(), atomicSlot); in VisitCastExpr()
687 assert(CGF.getContext().hasSameUnqualifiedType(E->getSubExpr()->getType(), in VisitCastExpr()
744 if (E->getCallReturnType(CGF.getContext())->isReferenceType()) { in VisitCallExpr()
749 RValue RV = CGF.EmitCallExpr(E, getReturnValueSlot()); in VisitCallExpr()
754 RValue RV = CGF.EmitObjCMessageExpr(E, getReturnValueSlot()); in VisitObjCMessageExpr()
759 CGF.EmitIgnoredExpr(E->getLHS()); in VisitBinComma()
764 CodeGenFunction::StmtExprEvaluation eval(CGF); in VisitStmtExpr()
765 CGF.EmitCompoundStmt(*E->getSubStmt(), true, Dest); in VisitStmtExpr()
772 CGF.ErrorUnsupported(E, "aggregate binary expression"); in VisitBinaryOperator()
777 LValue LV = CGF.EmitPointerToDataMemberBinaryExpr(E); in VisitPointerToDataMemberBinaryOperator()
850 assert(CGF.getContext().hasSameUnqualifiedType(E->getLHS()->getType(), in VisitBinAssign()
859 E->getRHS()->HasSideEffects(CGF.getContext())) { in VisitBinAssign()
865 LValue LHS = CGF.EmitCheckedLValue(E->getLHS(), CodeGenFunction::TCK_Store); in VisitBinAssign()
869 CGF.LValueIsSuitableForInlineAtomic(LHS)) { in VisitBinAssign()
870 CGF.EmitAtomicStore(Dest.asRValue(), LHS, /*isInit*/ false); in VisitBinAssign()
882 LValue LHS = CGF.EmitLValue(E->getLHS()); in VisitBinAssign()
887 CGF.LValueIsSuitableForInlineAtomic(LHS)) { in VisitBinAssign()
890 CGF.EmitAtomicStore(Dest.asRValue(), LHS, /*isInit*/ false); in VisitBinAssign()
901 CGF.hasVolatileMember(E->getLHS()->getType())) in VisitBinAssign()
904 CGF.EmitAggExpr(E->getRHS(), LHSSlot); in VisitBinAssign()
912 llvm::BasicBlock *LHSBlock = CGF.createBasicBlock("cond.true"); in VisitAbstractConditionalOperator()
913 llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("cond.false"); in VisitAbstractConditionalOperator()
914 llvm::BasicBlock *ContBlock = CGF.createBasicBlock("cond.end"); in VisitAbstractConditionalOperator()
917 CodeGenFunction::OpaqueValueMapping binding(CGF, E); in VisitAbstractConditionalOperator()
919 RegionCounter Cnt = CGF.getPGORegionCounter(E); in VisitAbstractConditionalOperator()
920 CodeGenFunction::ConditionalEvaluation eval(CGF); in VisitAbstractConditionalOperator()
921 CGF.EmitBranchOnBoolExpr(E->getCond(), LHSBlock, RHSBlock, Cnt.getCount()); in VisitAbstractConditionalOperator()
926 eval.begin(CGF); in VisitAbstractConditionalOperator()
927 CGF.EmitBlock(LHSBlock); in VisitAbstractConditionalOperator()
930 eval.end(CGF); in VisitAbstractConditionalOperator()
932 assert(CGF.HaveInsertPoint() && "expression evaluation ended with no IP!"); in VisitAbstractConditionalOperator()
933 CGF.Builder.CreateBr(ContBlock); in VisitAbstractConditionalOperator()
941 eval.begin(CGF); in VisitAbstractConditionalOperator()
942 CGF.EmitBlock(RHSBlock); in VisitAbstractConditionalOperator()
944 eval.end(CGF); in VisitAbstractConditionalOperator()
946 CGF.EmitBlock(ContBlock); in VisitAbstractConditionalOperator()
954 llvm::Value *ArgValue = CGF.EmitVAListRef(VE->getSubExpr()); in VisitVAArgExpr()
955 llvm::Value *ArgPtr = CGF.EmitVAArg(ArgValue, VE->getType()); in VisitVAArgExpr()
960 Builder.CreateVAArg(ArgValue, CGF.ConvertType(VE->getType())); in VisitVAArgExpr()
966 EmitFinalDestCopy(VE->getType(), CGF.MakeAddrLValue(ArgPtr, VE->getType())); in VisitVAArgExpr()
982 CGF.EmitCXXTemporary(E->getTemporary(), E->getType(), Dest.getAddr()); in VisitCXXBindTemporaryExpr()
988 CGF.EmitCXXConstructExpr(E, Slot); in VisitCXXConstructExpr()
994 CGF.EmitLambdaExpr(E, Slot); in VisitLambdaExpr()
998 CGF.enterFullExpression(E); in VisitExprWithCleanups()
999 CodeGenFunction::RunCleanupsScope cleanups(CGF); in VisitExprWithCleanups()
1006 EmitNullInitializationToLValue(CGF.MakeAddrLValue(Slot.getAddr(), T)); in VisitCXXScalarValueInitExpr()
1012 EmitNullInitializationToLValue(CGF.MakeAddrLValue(Slot.getAddr(), T)); in VisitImplicitValueInitExpr()
1018 static bool isSimpleZero(const Expr *E, CodeGenFunction &CGF) { in isSimpleZero() argument
1029 CGF.getTypes().isZeroInitializable(E->getType())) in isSimpleZero()
1048 if (Dest.isZeroed() && isSimpleZero(E, CGF)) { in EmitInitializationToLValue()
1054 RValue RV = CGF.EmitReferenceBindingToExpr(E); in EmitInitializationToLValue()
1055 return CGF.EmitStoreThroughLValue(RV, LV); in EmitInitializationToLValue()
1058 switch (CGF.getEvaluationKind(type)) { in EmitInitializationToLValue()
1060 CGF.EmitComplexExprIntoLValue(E, LV, /*isInit*/ true); in EmitInitializationToLValue()
1063 CGF.EmitAggExpr(E, AggValueSlot::forLValue(LV, in EmitInitializationToLValue()
1071 CGF.EmitScalarInit(E, /*D=*/nullptr, LV, /*Captured=*/false); in EmitInitializationToLValue()
1073 CGF.EmitStoreThroughLValue(RValue::get(CGF.EmitScalarExpr(E)), LV); in EmitInitializationToLValue()
1085 if (Dest.isZeroed() && CGF.getTypes().isZeroInitializable(type)) in EmitNullInitializationToLValue()
1088 if (CGF.hasScalarEvaluationKind(type)) { in EmitNullInitializationToLValue()
1090 llvm::Value *null = CGF.CGM.EmitNullConstant(type); in EmitNullInitializationToLValue()
1094 CGF.EmitStoreThroughBitfieldLValue(RValue::get(null), lv); in EmitNullInitializationToLValue()
1097 CGF.EmitStoreOfScalar(null, lv, /* isInitialization */ true); in EmitNullInitializationToLValue()
1103 CGF.EmitNullInitialization(lv.getAddress(), lv.getType()); in EmitNullInitializationToLValue()
1114 if (llvm::Constant* C = CGF.CGM.EmitConstantExpr(E, E->getType(), &CGF)) { in VisitInitListExpr()
1116 new llvm::GlobalVariable(CGF.CGM.getModule(), C->getType(), true, in VisitInitListExpr()
1118 EmitFinalDestCopy(E->getType(), CGF.MakeAddrLValue(GV, E->getType())); in VisitInitListExpr()
1123 CGF.ErrorUnsupported(E, "GNU array range designator extension"); in VisitInitListExpr()
1127 LValue DestLV = CGF.MakeAddrLValue(Dest.getAddr(), E->getType(), in VisitInitListExpr()
1136 CGF.getContext().getAsArrayType(E->getType())->getElementType(); in VisitInitListExpr()
1151 CGF.getContext().hasSameUnqualifiedType(E->getInit(0)->getType(), in VisitInitListExpr()
1167 CodeGenFunction::FieldConstructionScope FCS(CGF, Dest.getAddr()); in VisitInitListExpr()
1187 LValue FieldLoc = CGF.EmitLValueForFieldInitialization(DestLV, Field); in VisitInitListExpr()
1220 CGF.getTypes().isZeroInitializable(E->getType())) in VisitInitListExpr()
1224 LValue LV = CGF.EmitLValueForFieldInitialization(DestLV, field); in VisitInitListExpr()
1243 if (CGF.needsEHCleanup(dtorKind)) { in VisitInitListExpr()
1245 cleanupDominator = CGF.Builder.CreateUnreachable(); // placeholder in VisitInitListExpr()
1247 CGF.pushDestroy(EHCleanup, LV.getAddress(), field->getType(), in VisitInitListExpr()
1248 CGF.getDestroyer(dtorKind), false); in VisitInitListExpr()
1249 cleanups.push_back(CGF.EHStack.stable_begin()); in VisitInitListExpr()
1266 CGF.DeactivateCleanupBlock(cleanups[i-1], cleanupDominator); in VisitInitListExpr()
1280 static CharUnits GetNumNonZeroBytesInInit(const Expr *E, CodeGenFunction &CGF) { in GetNumNonZeroBytesInInit() argument
1284 if (isSimpleZero(E, CGF)) return CharUnits::Zero(); in GetNumNonZeroBytesInInit()
1289 if (!ILE || !CGF.getTypes().isZeroInitializable(ILE->getType())) in GetNumNonZeroBytesInInit()
1290 return CGF.getContext().getTypeSizeInChars(E->getType()); in GetNumNonZeroBytesInInit()
1314 NumNonZeroBytes += CGF.getContext().toCharUnitsFromBits( in GetNumNonZeroBytesInInit()
1315 CGF.getTarget().getPointerWidth(0)); in GetNumNonZeroBytesInInit()
1317 NumNonZeroBytes += GetNumNonZeroBytesInInit(E, CGF); in GetNumNonZeroBytesInInit()
1327 NumNonZeroBytes += GetNumNonZeroBytesInInit(ILE->getInit(i), CGF); in GetNumNonZeroBytesInInit()
1335 CodeGenFunction &CGF) { in CheckAggExprForMemSetUse() argument
1342 if (CGF.getLangOpts().CPlusPlus) in CheckAggExprForMemSetUse()
1343 if (const RecordType *RT = CGF.getContext() in CheckAggExprForMemSetUse()
1352 CGF.getContext().getTypeInfoInChars(E->getType()); in CheckAggExprForMemSetUse()
1358 CharUnits NumNonZeroBytes = GetNumNonZeroBytesInInit(E, CGF); in CheckAggExprForMemSetUse()
1363 llvm::Constant *SizeVal = CGF.Builder.getInt64(TypeInfo.first.getQuantity()); in CheckAggExprForMemSetUse()
1368 Loc = CGF.Builder.CreateBitCast(Loc, CGF.Int8PtrTy); in CheckAggExprForMemSetUse()
1369 CGF.Builder.CreateMemSet(Loc, CGF.Builder.getInt8(0), SizeVal, in CheckAggExprForMemSetUse()