Lines Matching defs:CGF

34   CodeGenFunction &CGF;
56 return CGF.CreateAggTemp(T, "agg.tmp.ensured");
60 Dest = CGF.CreateAggTemp(T, "agg.tmp.ensured");
65 : CGF(cgf), Builder(CGF.Builder), Dest(Dest) {
90 if (CGF.getLangOpts().getGC() && TypeRequiresGCollection(T))
102 CGF.ErrorUnsupported(S, "aggregate expression");
123 = CGF.tryEmitAsConstant(E)) {
124 EmitFinalDestCopy(E->getType(), result.getReferenceLValue(CGF, E));
165 CodeGenFunction::CXXDefaultInitExprScope Scope(CGF);
180 LValue LV = CGF.EmitPseudoObjectLValue(E);
184 CGF.EmitPseudoObjectRValue(E, EnsureSlot(E->getType()));
192 void VisitCXXThrowExpr(const CXXThrowExpr *E) { CGF.EmitCXXThrowExpr(E); }
194 CGF.EmitAtomicExpr(E, EnsureSlot(E->getType()).getAddr());
207 LValue LV = CGF.EmitLValue(E);
211 CGF.EmitAtomicLoad(LV, E->getExprLoc(), Dest);
256 CGF.getContext().getTypeInfoInChars(E->getType());
264 LValue srcLV = CGF.MakeAddrLValue(src.getAggregateAddr(), type, srcAlign);
290 CharUnits sz = CGF.getContext().getTypeSizeInChars(type);
291 llvm::Value *size = llvm::ConstantInt::get(CGF.SizeTy, sz.getQuantity());
292 CGF.CGM.getObjCRuntime().EmitGCMemmoveCollectable(CGF,
302 CGF.EmitAggregateCopy(dest.getAddr(), src.getAddr(), type,
313 ASTContext &Ctx = CGF.getContext();
314 LValue Array = CGF.EmitLValue(E->getSubExpr());
326 CGF.ErrorUnsupported(E, "weird std::initializer_list");
334 CGF.ErrorUnsupported(E, "weird std::initializer_list");
339 LValue DestLV = CGF.MakeAddrLValue(Dest.getAddr(), E->getType(),
341 LValue Start = CGF.EmitLValueForFieldInitialization(DestLV, *Field);
342 llvm::Value *Zero = llvm::ConstantInt::get(CGF.PtrDiffTy, 0);
346 CGF.EmitStoreThroughLValue(RValue::get(ArrayStart), Start);
350 CGF.ErrorUnsupported(E, "weird std::initializer_list");
355 LValue EndOrLength = CGF.EmitLValueForFieldInitialization(DestLV, *Field);
363 CGF.EmitStoreThroughLValue(RValue::get(ArrayEnd), EndOrLength);
366 CGF.EmitStoreThroughLValue(RValue::get(Size), EndOrLength);
368 CGF.ErrorUnsupported(E, "weird std::initializer_list");
406 llvm::Value *zero = llvm::ConstantInt::get(CGF.SizeTy, 0);
418 if (CGF.needsEHCleanup(dtorKind)) {
423 endOfInit = CGF.CreateTempAlloca(begin->getType(),
426 CGF.pushIrregularPartialArrayCleanup(begin, endOfInit, elementType,
427 CGF.getDestroyer(dtorKind));
428 cleanup = CGF.EHStack.stable_begin();
435 llvm::Value *one = llvm::ConstantInt::get(CGF.SizeTy, 1);
456 LValue elementLV = CGF.MakeAddrLValue(element, elementType);
469 CGF.getTypes().isZeroInitializable(elementType))) {
482 llvm::ConstantInt::get(CGF.SizeTy, NumArrayElements),
486 llvm::BasicBlock *bodyBB = CGF.createBasicBlock("arrayinit.body");
489 CGF.EmitBlock(bodyBB);
495 LValue elementLV = CGF.MakeAddrLValue(currentElement, elementType);
511 llvm::BasicBlock *endBB = CGF.createBasicBlock("arrayinit.end");
515 CGF.EmitBlock(endBB);
519 if (dtorKind) CGF.DeactivateCleanupBlock(cleanup, cleanupDominator);
531 EmitFinalDestCopy(e->getType(), CGF.getOpaqueLValueMapping(e));
537 E->getType().isPODType(CGF.getContext())) {
545 CGF.EmitAggExpr(E->getInitializer(), Slot);
568 LValue LV = CGF.EmitCheckedLValue(E->getSubExpr(),
572 CGF.EmitDynamicCast(LV.getAddress(), cast<CXXDynamicCastExpr>(E));
574 CGF.CGM.ErrorUnsupported(E, "non-simple lvalue dynamic_cast");
577 CGF.CGM.ErrorUnsupported(E, "lvalue dynamic_cast with a destination");
586 QualType PtrTy = CGF.getContext().getPointerType(Ty);
588 CGF.ConvertType(PtrTy));
590 CGF.MakeAddrLValue(CastPtr, Ty));
611 assert(CGF.getContext().hasSameUnqualifiedType(valueType,
616 if (Dest.isIgnored() || !CGF.CGM.isPaddedAtomicType(atomicType)) {
625 assert(CGF.getContext().hasSameUnqualifiedType(op->getType(),
635 if (!valueDest.isIgnored() && CGF.CGM.isPaddedAtomicType(atomicType)) {
639 CGF.EmitNullInitialization(Dest.getAddr(), atomicType);
643 CGF.Builder.CreateStructGEP(valueDest.getAddr(), 0);
653 CGF.EmitAggExpr(E->getSubExpr(), valueDest);
660 CGF.CreateAggTemp(atomicType, "atomic-to-nonatomic.temp");
661 CGF.EmitAggExpr(E->getSubExpr(), atomicSlot);
682 assert(CGF.getContext().hasSameUnqualifiedType(E->getSubExpr()->getType(),
744 RValue RV = CGF.EmitCallExpr(E, getReturnValueSlot());
749 RValue RV = CGF.EmitObjCMessageExpr(E, getReturnValueSlot());
754 CGF.EmitIgnoredExpr(E->getLHS());
759 CodeGenFunction::StmtExprEvaluation eval(CGF);
760 CGF.EmitCompoundStmt(*E->getSubStmt(), true, Dest);
767 CGF.ErrorUnsupported(E, "aggregate binary expression");
772 LValue LV = CGF.EmitPointerToDataMemberBinaryExpr(E);
845 assert(CGF.getContext().hasSameUnqualifiedType(E->getLHS()->getType(),
854 E->getRHS()->HasSideEffects(CGF.getContext())) {
860 LValue LHS = CGF.EmitCheckedLValue(E->getLHS(), CodeGenFunction::TCK_Store);
864 CGF.EmitAtomicStore(Dest.asRValue(), LHS, /*isInit*/ false);
876 LValue LHS = CGF.EmitLValue(E->getLHS());
883 CGF.EmitAtomicStore(Dest.asRValue(), LHS, /*isInit*/ false);
894 CGF.hasVolatileMember(E->getLHS()->getType()))
897 CGF.EmitAggExpr(E->getRHS(), LHSSlot);
905 llvm::BasicBlock *LHSBlock = CGF.createBasicBlock("cond.true");
906 llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("cond.false");
907 llvm::BasicBlock *ContBlock = CGF.createBasicBlock("cond.end");
910 CodeGenFunction::OpaqueValueMapping binding(CGF, E);
912 RegionCounter Cnt = CGF.getPGORegionCounter(E);
913 CodeGenFunction::ConditionalEvaluation eval(CGF);
914 CGF.EmitBranchOnBoolExpr(E->getCond(), LHSBlock, RHSBlock, Cnt.getCount());
919 eval.begin(CGF);
920 CGF.EmitBlock(LHSBlock);
923 eval.end(CGF);
925 assert(CGF.HaveInsertPoint() && "expression evaluation ended with no IP!");
926 CGF.Builder.CreateBr(ContBlock);
934 eval.begin(CGF);
935 CGF.EmitBlock(RHSBlock);
937 eval.end(CGF);
939 CGF.EmitBlock(ContBlock);
947 llvm::Value *ArgValue = CGF.EmitVAListRef(VE->getSubExpr());
948 llvm::Value *ArgPtr = CGF.EmitVAArg(ArgValue, VE->getType());
953 Builder.CreateVAArg(ArgValue, CGF.ConvertType(VE->getType()));
959 EmitFinalDestCopy(VE->getType(), CGF.MakeAddrLValue(ArgPtr, VE->getType()));
975 CGF.EmitCXXTemporary(E->getTemporary(), E->getType(), Dest.getAddr());
981 CGF.EmitCXXConstructExpr(E, Slot);
987 CGF.EmitLambdaExpr(E, Slot);
991 CGF.enterFullExpression(E);
992 CodeGenFunction::RunCleanupsScope cleanups(CGF);
999 EmitNullInitializationToLValue(CGF.MakeAddrLValue(Slot.getAddr(), T));
1005 EmitNullInitializationToLValue(CGF.MakeAddrLValue(Slot.getAddr(), T));
1011 static bool isSimpleZero(const Expr *E, CodeGenFunction &CGF) {
1022 CGF.getTypes().isZeroInitializable(E->getType()))
1041 if (Dest.isZeroed() && isSimpleZero(E, CGF)) {
1047 RValue RV = CGF.EmitReferenceBindingToExpr(E);
1048 return CGF.EmitStoreThroughLValue(RV, LV);
1051 switch (CGF.getEvaluationKind(type)) {
1053 CGF.EmitComplexExprIntoLValue(E, LV, /*isInit*/ true);
1056 CGF.EmitAggExpr(E, AggValueSlot::forLValue(LV,
1064 CGF.EmitScalarInit(E, /*D=*/nullptr, LV, /*Captured=*/false);
1066 CGF.EmitStoreThroughLValue(RValue::get(CGF.EmitScalarExpr(E)), LV);
1078 if (Dest.isZeroed() && CGF.getTypes().isZeroInitializable(type))
1081 if (CGF.hasScalarEvaluationKind(type)) {
1083 llvm::Value *null = CGF.CGM.EmitNullConstant(type);
1087 CGF.EmitStoreThroughBitfieldLValue(RValue::get(null), lv);
1090 CGF.EmitStoreOfScalar(null, lv, /* isInitialization */ true);
1096 CGF.EmitNullInitialization(lv.getAddress(), lv.getType());
1107 if (llvm::Constant* C = CGF.CGM.EmitConstantExpr(E, E->getType(), &CGF)) {
1109 new llvm::GlobalVariable(CGF.CGM.getModule(), C->getType(), true,
1111 EmitFinalDestCopy(E->getType(), CGF.MakeAddrLValue(GV, E->getType()));
1116 CGF.ErrorUnsupported(E, "GNU array range designator extension");
1120 LValue DestLV = CGF.MakeAddrLValue(Dest.getAddr(), E->getType(),
1129 CGF.getContext().getAsArrayType(E->getType())->getElementType();
1150 CodeGenFunction::FieldConstructionScope FCS(CGF, Dest.getAddr());
1170 LValue FieldLoc = CGF.EmitLValueForFieldInitialization(DestLV, Field);
1203 CGF.getTypes().isZeroInitializable(E->getType()))
1207 LValue LV = CGF.EmitLValueForFieldInitialization(DestLV, field);
1226 if (CGF.needsEHCleanup(dtorKind)) {
1228 cleanupDominator = CGF.Builder.CreateUnreachable(); // placeholder
1230 CGF.pushDestroy(EHCleanup, LV.getAddress(), field->getType(),
1231 CGF.getDestroyer(dtorKind), false);
1232 cleanups.push_back(CGF.EHStack.stable_begin());
1249 CGF.DeactivateCleanupBlock(cleanups[i-1], cleanupDominator);
1263 static CharUnits GetNumNonZeroBytesInInit(const Expr *E, CodeGenFunction &CGF) {
1267 if (isSimpleZero(E, CGF)) return CharUnits::Zero();
1272 if (!ILE || !CGF.getTypes().isZeroInitializable(ILE->getType()))
1273 return CGF.getContext().getTypeSizeInChars(E->getType());
1297 NumNonZeroBytes += CGF.getContext().toCharUnitsFromBits(
1298 CGF.getTarget().getPointerWidth(0));
1300 NumNonZeroBytes += GetNumNonZeroBytesInInit(E, CGF);
1310 NumNonZeroBytes += GetNumNonZeroBytesInInit(ILE->getInit(i), CGF);
1318 CodeGenFunction &CGF) {
1325 if (CGF.getLangOpts().CPlusPlus)
1326 if (const RecordType *RT = CGF.getContext()
1335 CGF.getContext().getTypeInfoInChars(E->getType());
1341 CharUnits NumNonZeroBytes = GetNumNonZeroBytesInInit(E, CGF);
1346 llvm::Constant *SizeVal = CGF.Builder.getInt64(TypeInfo.first.getQuantity());
1351 Loc = CGF.Builder.CreateBitCast(Loc, CGF.Int8PtrTy);
1352 CGF.Builder.CreateMemSet(Loc, CGF.Builder.getInt8(0), SizeVal,