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, 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");
383 llvm::Value *zero = llvm::ConstantInt::get(CGF.SizeTy, 0);
395 if (CGF.needsEHCleanup(dtorKind)) {
400 endOfInit = CGF.CreateTempAlloca(begin->getType(),
403 CGF.pushIrregularPartialArrayCleanup(begin, endOfInit, elementType,
404 CGF.getDestroyer(dtorKind));
405 cleanup = CGF.EHStack.stable_begin();
412 llvm::Value *one = llvm::ConstantInt::get(CGF.SizeTy, 1);
433 LValue elementLV = CGF.MakeAddrLValue(element, elementType);
452 CGF.getTypes().isZeroInitializable(elementType))) {
465 llvm::ConstantInt::get(CGF.SizeTy, NumArrayElements),
469 llvm::BasicBlock *bodyBB = CGF.createBasicBlock("arrayinit.body");
472 CGF.EmitBlock(bodyBB);
478 LValue elementLV = CGF.MakeAddrLValue(currentElement, elementType);
494 llvm::BasicBlock *endBB = CGF.createBasicBlock("arrayinit.end");
498 CGF.EmitBlock(endBB);
502 if (dtorKind) CGF.DeactivateCleanupBlock(cleanup, cleanupDominator);
514 EmitFinalDestCopy(e->getType(), CGF.getOpaqueLValueMapping(e));
520 E->getType().isPODType(CGF.getContext())) {
528 CGF.EmitAggExpr(E->getInitializer(), Slot);
551 LValue LV = CGF.EmitCheckedLValue(E->getSubExpr(),
555 CGF.EmitDynamicCast(LV.getAddress(), cast<CXXDynamicCastExpr>(E));
557 CGF.CGM.ErrorUnsupported(E, "non-simple lvalue dynamic_cast");
560 CGF.CGM.ErrorUnsupported(E, "lvalue dynamic_cast with a destination");
569 QualType PtrTy = CGF.getContext().getPointerType(Ty);
571 CGF.ConvertType(PtrTy));
573 CGF.MakeAddrLValue(CastPtr, Ty));
594 assert(CGF.getContext().hasSameUnqualifiedType(valueType,
599 if (Dest.isIgnored() || !CGF.CGM.isPaddedAtomicType(atomicType)) {
608 assert(CGF.getContext().hasSameUnqualifiedType(op->getType(),
618 if (!valueDest.isIgnored() && CGF.CGM.isPaddedAtomicType(atomicType)) {
622 CGF.EmitNullInitialization(Dest.getAddr(), atomicType);
626 CGF.Builder.CreateStructGEP(valueDest.getAddr(), 0);
636 CGF.EmitAggExpr(E->getSubExpr(), valueDest);
643 CGF.CreateAggTemp(atomicType, "atomic-to-nonatomic.temp");
644 CGF.EmitAggExpr(E->getSubExpr(), atomicSlot);
665 assert(CGF.getContext().hasSameUnqualifiedType(E->getSubExpr()->getType(),
726 RValue RV = CGF.EmitCallExpr(E, getReturnValueSlot());
731 RValue RV = CGF.EmitObjCMessageExpr(E, getReturnValueSlot());
736 CGF.EmitIgnoredExpr(E->getLHS());
741 CodeGenFunction::StmtExprEvaluation eval(CGF);
742 CGF.EmitCompoundStmt(*E->getSubStmt(), true, Dest);
749 CGF.ErrorUnsupported(E, "aggregate binary expression");
754 LValue LV = CGF.EmitPointerToDataMemberBinaryExpr(E);
827 assert(CGF.getContext().hasSameUnqualifiedType(E->getLHS()->getType(),
836 E->getRHS()->HasSideEffects(CGF.getContext())) {
842 LValue LHS = CGF.EmitCheckedLValue(E->getLHS(), CodeGenFunction::TCK_Store);
846 CGF.EmitAtomicStore(Dest.asRValue(), LHS, /*isInit*/ false);
858 LValue LHS = CGF.EmitLValue(E->getLHS());
865 CGF.EmitAtomicStore(Dest.asRValue(), LHS, /*isInit*/ false);
876 CGF.hasVolatileMember(E->getLHS()->getType()))
879 CGF.EmitAggExpr(E->getRHS(), LHSSlot);
887 llvm::BasicBlock *LHSBlock = CGF.createBasicBlock("cond.true");
888 llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("cond.false");
889 llvm::BasicBlock *ContBlock = CGF.createBasicBlock("cond.end");
892 CodeGenFunction::OpaqueValueMapping binding(CGF, E);
894 CodeGenFunction::ConditionalEvaluation eval(CGF);
895 CGF.EmitBranchOnBoolExpr(E->getCond(), LHSBlock, RHSBlock);
900 eval.begin(CGF);
901 CGF.EmitBlock(LHSBlock);
903 eval.end(CGF);
905 assert(CGF.HaveInsertPoint() && "expression evaluation ended with no IP!");
906 CGF.Builder.CreateBr(ContBlock);
914 eval.begin(CGF);
915 CGF.EmitBlock(RHSBlock);
917 eval.end(CGF);
919 CGF.EmitBlock(ContBlock);
927 llvm::Value *ArgValue = CGF.EmitVAListRef(VE->getSubExpr());
928 llvm::Value *ArgPtr = CGF.EmitVAArg(ArgValue, VE->getType());
931 CGF.ErrorUnsupported(VE, "aggregate va_arg expression");
935 EmitFinalDestCopy(VE->getType(), CGF.MakeAddrLValue(ArgPtr, VE->getType()));
951 CGF.EmitCXXTemporary(E->getTemporary(), E->getType(), Dest.getAddr());
957 CGF.EmitCXXConstructExpr(E, Slot);
963 CGF.EmitLambdaExpr(E, Slot);
967 CGF.enterFullExpression(E);
968 CodeGenFunction::RunCleanupsScope cleanups(CGF);
975 EmitNullInitializationToLValue(CGF.MakeAddrLValue(Slot.getAddr(), T));
981 EmitNullInitializationToLValue(CGF.MakeAddrLValue(Slot.getAddr(), T));
987 static bool isSimpleZero(const Expr *E, CodeGenFunction &CGF) {
998 CGF.getTypes().isZeroInitializable(E->getType()))
1017 if (Dest.isZeroed() && isSimpleZero(E, CGF)) {
1023 RValue RV = CGF.EmitReferenceBindingToExpr(E);
1024 return CGF.EmitStoreThroughLValue(RV, LV);
1027 switch (CGF.getEvaluationKind(type)) {
1029 CGF.EmitComplexExprIntoLValue(E, LV, /*isInit*/ true);
1032 CGF.EmitAggExpr(E, AggValueSlot::forLValue(LV,
1040 CGF.EmitScalarInit(E, /*D=*/0, LV, /*Captured=*/false);
1042 CGF.EmitStoreThroughLValue(RValue::get(CGF.EmitScalarExpr(E)), LV);
1054 if (Dest.isZeroed() && CGF.getTypes().isZeroInitializable(type))
1057 if (CGF.hasScalarEvaluationKind(type)) {
1059 llvm::Value *null = CGF.CGM.EmitNullConstant(type);
1063 CGF.EmitStoreThroughBitfieldLValue(RValue::get(null), lv);
1066 CGF.EmitStoreOfScalar(null, lv, /* isInitialization */ true);
1072 CGF.EmitNullInitialization(lv.getAddress(), lv.getType());
1083 if (llvm::Constant* C = CGF.CGM.EmitConstantExpr(E, E->getType(), &CGF)) {
1085 new llvm::GlobalVariable(CGF.CGM.getModule(), C->getType(), true,
1087 EmitFinalDestCopy(E->getType(), CGF.MakeAddrLValue(GV, E->getType()));
1092 CGF.ErrorUnsupported(E, "GNU array range designator extension");
1096 LValue DestLV = CGF.MakeAddrLValue(Dest.getAddr(), E->getType(),
1105 CGF.getContext().getAsArrayType(E->getType())->getElementType();
1126 CodeGenFunction::FieldConstructionScope FCS(CGF, Dest.getAddr());
1148 LValue FieldLoc = CGF.EmitLValueForFieldInitialization(DestLV, Field);
1183 CGF.getTypes().isZeroInitializable(E->getType()))
1187 LValue LV = CGF.EmitLValueForFieldInitialization(DestLV, *field);
1206 if (CGF.needsEHCleanup(dtorKind)) {
1208 cleanupDominator = CGF.Builder.CreateUnreachable(); // placeholder
1210 CGF.pushDestroy(EHCleanup, LV.getAddress(), field->getType(),
1211 CGF.getDestroyer(dtorKind), false);
1212 cleanups.push_back(CGF.EHStack.stable_begin());
1229 CGF.DeactivateCleanupBlock(cleanups[i-1], cleanupDominator);
1243 static CharUnits GetNumNonZeroBytesInInit(const Expr *E, CodeGenFunction &CGF) {
1247 if (isSimpleZero(E, CGF)) return CharUnits::Zero();
1252 if (ILE == 0 || !CGF.getTypes().isZeroInitializable(ILE->getType()))
1253 return CGF.getContext().getTypeSizeInChars(E->getType());
1278 NumNonZeroBytes += CGF.getContext().toCharUnitsFromBits(
1279 CGF.getTarget().getPointerWidth(0));
1281 NumNonZeroBytes += GetNumNonZeroBytesInInit(E, CGF);
1291 NumNonZeroBytes += GetNumNonZeroBytesInInit(ILE->getInit(i), CGF);
1299 CodeGenFunction &CGF) {
1305 if (CGF.getLangOpts().CPlusPlus)
1306 if (const RecordType *RT = CGF.getContext()
1315 CGF.getContext().getTypeInfoInChars(E->getType());
1321 CharUnits NumNonZeroBytes = GetNumNonZeroBytesInInit(E, CGF);
1326 llvm::Constant *SizeVal = CGF.Builder.getInt64(TypeInfo.first.getQuantity());
1331 Loc = CGF.Builder.CreateBitCast(Loc, CGF.Int8PtrTy);
1332 CGF.Builder.CreateMemSet(Loc, CGF.Builder.getInt8(0), SizeVal,