Lines Matching refs:E

75   void EmitAggLoadOfLValue(const Expr *E);
84 void EmitMoveFromReturnSlot(const Expr *E, RValue Src);
87 QualType elementType, InitListExpr *E);
108 void VisitUnaryExtension(UnaryOperator *E) { Visit(E->getSubExpr()); } in VisitUnaryExtension() argument
109 void VisitSubstNonTypeTemplateParmExpr(SubstNonTypeTemplateParmExpr *E) { in VisitSubstNonTypeTemplateParmExpr() argument
110 return Visit(E->getReplacement()); in VisitSubstNonTypeTemplateParmExpr()
114 void VisitDeclRefExpr(DeclRefExpr *E) { in VisitDeclRefExpr() argument
121 if (E->getDecl()->getType()->isReferenceType()) { in VisitDeclRefExpr()
123 = CGF.tryEmitAsConstant(E)) { in VisitDeclRefExpr()
124 EmitFinalDestCopy(E->getType(), result.getReferenceLValue(CGF, E)); in VisitDeclRefExpr()
129 EmitAggLoadOfLValue(E); in VisitDeclRefExpr()
133 void VisitUnaryDeref(UnaryOperator *E) { EmitAggLoadOfLValue(E); } in VisitUnaryDeref() argument
134 void VisitStringLiteral(StringLiteral *E) { EmitAggLoadOfLValue(E); } in VisitStringLiteral() argument
135 void VisitCompoundLiteralExpr(CompoundLiteralExpr *E);
136 void VisitArraySubscriptExpr(ArraySubscriptExpr *E) { in VisitArraySubscriptExpr() argument
137 EmitAggLoadOfLValue(E); in VisitArraySubscriptExpr()
139 void VisitPredefinedExpr(const PredefinedExpr *E) { in VisitPredefinedExpr() argument
140 EmitAggLoadOfLValue(E); in VisitPredefinedExpr()
144 void VisitCastExpr(CastExpr *E);
145 void VisitCallExpr(const CallExpr *E);
146 void VisitStmtExpr(const StmtExpr *E);
149 void VisitBinAssign(const BinaryOperator *E);
150 void VisitBinComma(const BinaryOperator *E);
152 void VisitObjCMessageExpr(ObjCMessageExpr *E);
153 void VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { in VisitObjCIvarRefExpr() argument
154 EmitAggLoadOfLValue(E); in VisitObjCIvarRefExpr()
159 void VisitInitListExpr(InitListExpr *E);
160 void VisitImplicitValueInitExpr(ImplicitValueInitExpr *E);
168 void VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E);
169 void VisitCXXConstructExpr(const CXXConstructExpr *E);
170 void VisitLambdaExpr(LambdaExpr *E);
171 void VisitCXXStdInitializerListExpr(CXXStdInitializerListExpr *E);
172 void VisitExprWithCleanups(ExprWithCleanups *E);
173 void VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E);
174 void VisitCXXTypeidExpr(CXXTypeidExpr *E) { EmitAggLoadOfLValue(E); } in VisitCXXTypeidExpr() argument
175 void VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E);
176 void VisitOpaqueValueExpr(OpaqueValueExpr *E);
178 void VisitPseudoObjectExpr(PseudoObjectExpr *E) { in VisitPseudoObjectExpr() argument
179 if (E->isGLValue()) { in VisitPseudoObjectExpr()
180 LValue LV = CGF.EmitPseudoObjectLValue(E); in VisitPseudoObjectExpr()
181 return EmitFinalDestCopy(E->getType(), LV); in VisitPseudoObjectExpr()
184 CGF.EmitPseudoObjectRValue(E, EnsureSlot(E->getType())); in VisitPseudoObjectExpr()
187 void VisitVAArgExpr(VAArgExpr *E);
189 void EmitInitializationToLValue(Expr *E, LValue Address);
192 void VisitCXXThrowExpr(const CXXThrowExpr *E) { CGF.EmitCXXThrowExpr(E); } in VisitCXXThrowExpr() argument
193 void VisitAtomicExpr(AtomicExpr *E) { in VisitAtomicExpr() argument
194 CGF.EmitAtomicExpr(E, EnsureSlot(E->getType()).getAddr()); in VisitAtomicExpr()
206 void AggExprEmitter::EmitAggLoadOfLValue(const Expr *E) { in EmitAggLoadOfLValue() argument
207 LValue LV = CGF.EmitLValue(E); in EmitAggLoadOfLValue()
211 CGF.EmitAtomicLoad(LV, E->getExprLoc(), Dest); in EmitAggLoadOfLValue()
215 EmitFinalDestCopy(E->getType(), LV); in EmitAggLoadOfLValue()
245 void AggExprEmitter::EmitMoveFromReturnSlot(const Expr *E, RValue src) { in EmitMoveFromReturnSlot() argument
256 CGF.getContext().getTypeInfoInChars(E->getType()); in EmitMoveFromReturnSlot()
257 EmitFinalDestCopy(E->getType(), src, typeInfo.second); in EmitMoveFromReturnSlot()
310 AggExprEmitter::VisitCXXStdInitializerListExpr(CXXStdInitializerListExpr *E) { in VisitCXXStdInitializerListExpr() argument
314 LValue Array = CGF.EmitLValue(E->getSubExpr()); in VisitCXXStdInitializerListExpr()
319 Ctx.getAsConstantArrayType(E->getSubExpr()->getType()); in VisitCXXStdInitializerListExpr()
323 RecordDecl *Record = E->getType()->castAs<RecordType>()->getDecl(); in VisitCXXStdInitializerListExpr()
326 CGF.ErrorUnsupported(E, "weird std::initializer_list"); in VisitCXXStdInitializerListExpr()
334 CGF.ErrorUnsupported(E, "weird std::initializer_list"); in VisitCXXStdInitializerListExpr()
338 AggValueSlot Dest = EnsureSlot(E->getType()); in VisitCXXStdInitializerListExpr()
339 LValue DestLV = CGF.MakeAddrLValue(Dest.getAddr(), E->getType(), in VisitCXXStdInitializerListExpr()
350 CGF.ErrorUnsupported(E, "weird std::initializer_list"); in VisitCXXStdInitializerListExpr()
368 CGF.ErrorUnsupported(E, "weird std::initializer_list"); in VisitCXXStdInitializerListExpr()
375 QualType elementType, InitListExpr *E) { in EmitArrayInit() argument
376 uint64_t NumInitElements = E->getNumInits(); in EmitArrayInit()
434 EmitInitializationToLValue(E->getInit(i), elementLV); in EmitArrayInit()
440 Expr *filler = E->getArrayFiller(); in EmitArrayInit()
509 void AggExprEmitter::VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E){ in VisitMaterializeTemporaryExpr() argument
510 Visit(E->GetTemporaryExpr()); in VisitMaterializeTemporaryExpr()
518 AggExprEmitter::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) { in VisitCompoundLiteralExpr() argument
520 E->getType().isPODType(CGF.getContext())) { in VisitCompoundLiteralExpr()
523 EmitAggLoadOfLValue(E); in VisitCompoundLiteralExpr()
527 AggValueSlot Slot = EnsureSlot(E->getType()); in VisitCompoundLiteralExpr()
528 CGF.EmitAggExpr(E->getInitializer(), Slot); in VisitCompoundLiteralExpr()
546 void AggExprEmitter::VisitCastExpr(CastExpr *E) { in VisitCastExpr() argument
547 switch (E->getCastKind()) { in VisitCastExpr()
550 assert(isa<CXXDynamicCastExpr>(E) && "CK_Dynamic without a dynamic_cast?"); in VisitCastExpr()
551 LValue LV = CGF.EmitCheckedLValue(E->getSubExpr(), in VisitCastExpr()
555 CGF.EmitDynamicCast(LV.getAddress(), cast<CXXDynamicCastExpr>(E)); in VisitCastExpr()
557 CGF.CGM.ErrorUnsupported(E, "non-simple lvalue dynamic_cast"); in VisitCastExpr()
560 CGF.CGM.ErrorUnsupported(E, "lvalue dynamic_cast with a destination"); in VisitCastExpr()
568 QualType Ty = E->getSubExpr()->getType(); in VisitCastExpr()
572 EmitInitializationToLValue(E->getSubExpr(), in VisitCastExpr()
586 bool isToAtomic = (E->getCastKind() == CK_NonAtomicToAtomic); in VisitCastExpr()
589 QualType atomicType = E->getSubExpr()->getType(); in VisitCastExpr()
590 QualType valueType = E->getType(); in VisitCastExpr()
600 return Visit(E->getSubExpr()); in VisitCastExpr()
607 if (Expr *op = findPeephole(E->getSubExpr(), peepholeTarget)) { in VisitCastExpr()
609 E->getType()) && in VisitCastExpr()
636 CGF.EmitAggExpr(E->getSubExpr(), valueDest); in VisitCastExpr()
644 CGF.EmitAggExpr(E->getSubExpr(), atomicSlot); in VisitCastExpr()
655 if (E->getSubExpr()->getType().isVolatileQualified()) { in VisitCastExpr()
656 EnsureDest(E->getType()); in VisitCastExpr()
657 return Visit(E->getSubExpr()); in VisitCastExpr()
665 assert(CGF.getContext().hasSameUnqualifiedType(E->getSubExpr()->getType(), in VisitCastExpr()
666 E->getType()) && in VisitCastExpr()
668 Visit(E->getSubExpr()); in VisitCastExpr()
720 void AggExprEmitter::VisitCallExpr(const CallExpr *E) { in VisitCallExpr() argument
721 if (E->getCallReturnType()->isReferenceType()) { in VisitCallExpr()
722 EmitAggLoadOfLValue(E); in VisitCallExpr()
726 RValue RV = CGF.EmitCallExpr(E, getReturnValueSlot()); in VisitCallExpr()
727 EmitMoveFromReturnSlot(E, RV); in VisitCallExpr()
730 void AggExprEmitter::VisitObjCMessageExpr(ObjCMessageExpr *E) { in VisitObjCMessageExpr() argument
731 RValue RV = CGF.EmitObjCMessageExpr(E, getReturnValueSlot()); in VisitObjCMessageExpr()
732 EmitMoveFromReturnSlot(E, RV); in VisitObjCMessageExpr()
735 void AggExprEmitter::VisitBinComma(const BinaryOperator *E) { in VisitBinComma() argument
736 CGF.EmitIgnoredExpr(E->getLHS()); in VisitBinComma()
737 Visit(E->getRHS()); in VisitBinComma()
740 void AggExprEmitter::VisitStmtExpr(const StmtExpr *E) { in VisitStmtExpr() argument
742 CGF.EmitCompoundStmt(*E->getSubStmt(), true, Dest); in VisitStmtExpr()
745 void AggExprEmitter::VisitBinaryOperator(const BinaryOperator *E) { in VisitBinaryOperator() argument
746 if (E->getOpcode() == BO_PtrMemD || E->getOpcode() == BO_PtrMemI) in VisitBinaryOperator()
747 VisitPointerToDataMemberBinaryOperator(E); in VisitBinaryOperator()
749 CGF.ErrorUnsupported(E, "aggregate binary expression"); in VisitBinaryOperator()
753 const BinaryOperator *E) { in VisitPointerToDataMemberBinaryOperator() argument
754 LValue LV = CGF.EmitPointerToDataMemberBinaryExpr(E); in VisitPointerToDataMemberBinaryOperator()
755 EmitFinalDestCopy(E->getType(), LV); in VisitPointerToDataMemberBinaryOperator()
760 static bool isBlockVarRef(const Expr *E) { in isBlockVarRef() argument
762 E = E->IgnoreParens(); in isBlockVarRef()
765 if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) { in isBlockVarRef()
773 if (const BinaryOperator *op = dyn_cast<BinaryOperator>(E)) { in isBlockVarRef()
788 = dyn_cast<AbstractConditionalOperator>(E)) { in isBlockVarRef()
794 = dyn_cast<OpaqueValueExpr>(E)) { in isBlockVarRef()
802 } else if (const CastExpr *cast = dyn_cast<CastExpr>(E)) { in isBlockVarRef()
809 } else if (const UnaryOperator *uop = dyn_cast<UnaryOperator>(E)) { in isBlockVarRef()
813 } else if (const MemberExpr *mem = dyn_cast<MemberExpr>(E)) { in isBlockVarRef()
817 } else if (const ArraySubscriptExpr *sub = dyn_cast<ArraySubscriptExpr>(E)) { in isBlockVarRef()
824 void AggExprEmitter::VisitBinAssign(const BinaryOperator *E) { in VisitBinAssign() argument
827 assert(CGF.getContext().hasSameUnqualifiedType(E->getLHS()->getType(), in VisitBinAssign()
828 E->getRHS()->getType()) in VisitBinAssign()
835 if (isBlockVarRef(E->getLHS()) && in VisitBinAssign()
836 E->getRHS()->HasSideEffects(CGF.getContext())) { in VisitBinAssign()
838 EnsureDest(E->getRHS()->getType()); in VisitBinAssign()
839 Visit(E->getRHS()); in VisitBinAssign()
842 LValue LHS = CGF.EmitCheckedLValue(E->getLHS(), CodeGenFunction::TCK_Store); in VisitBinAssign()
850 EmitCopy(E->getLHS()->getType(), in VisitBinAssign()
852 needsGC(E->getLHS()->getType()), in VisitBinAssign()
858 LValue LHS = CGF.EmitLValue(E->getLHS()); in VisitBinAssign()
863 EnsureDest(E->getRHS()->getType()); in VisitBinAssign()
864 Visit(E->getRHS()); in VisitBinAssign()
872 needsGC(E->getLHS()->getType()), in VisitBinAssign()
876 CGF.hasVolatileMember(E->getLHS()->getType())) in VisitBinAssign()
879 CGF.EmitAggExpr(E->getRHS(), LHSSlot); in VisitBinAssign()
882 EmitFinalDestCopy(E->getType(), LHS); in VisitBinAssign()
886 VisitAbstractConditionalOperator(const AbstractConditionalOperator *E) { in VisitAbstractConditionalOperator() argument
892 CodeGenFunction::OpaqueValueMapping binding(CGF, E); in VisitAbstractConditionalOperator()
895 CGF.EmitBranchOnBoolExpr(E->getCond(), LHSBlock, RHSBlock); in VisitAbstractConditionalOperator()
902 Visit(E->getTrueExpr()); in VisitAbstractConditionalOperator()
916 Visit(E->getFalseExpr()); in VisitAbstractConditionalOperator()
938 void AggExprEmitter::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) { in VisitCXXBindTemporaryExpr() argument
942 EnsureDest(E->getType()); in VisitCXXBindTemporaryExpr()
947 Visit(E->getSubExpr()); in VisitCXXBindTemporaryExpr()
951 CGF.EmitCXXTemporary(E->getTemporary(), E->getType(), Dest.getAddr()); in VisitCXXBindTemporaryExpr()
955 AggExprEmitter::VisitCXXConstructExpr(const CXXConstructExpr *E) { in VisitCXXConstructExpr() argument
956 AggValueSlot Slot = EnsureSlot(E->getType()); in VisitCXXConstructExpr()
957 CGF.EmitCXXConstructExpr(E, Slot); in VisitCXXConstructExpr()
961 AggExprEmitter::VisitLambdaExpr(LambdaExpr *E) { in VisitLambdaExpr() argument
962 AggValueSlot Slot = EnsureSlot(E->getType()); in VisitLambdaExpr()
963 CGF.EmitLambdaExpr(E, Slot); in VisitLambdaExpr()
966 void AggExprEmitter::VisitExprWithCleanups(ExprWithCleanups *E) { in VisitExprWithCleanups() argument
967 CGF.enterFullExpression(E); in VisitExprWithCleanups()
969 Visit(E->getSubExpr()); in VisitExprWithCleanups()
972 void AggExprEmitter::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) { in VisitCXXScalarValueInitExpr() argument
973 QualType T = E->getType(); in VisitCXXScalarValueInitExpr()
978 void AggExprEmitter::VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) { in VisitImplicitValueInitExpr() argument
979 QualType T = E->getType(); in VisitImplicitValueInitExpr()
987 static bool isSimpleZero(const Expr *E, CodeGenFunction &CGF) { in isSimpleZero() argument
988 E = E->IgnoreParens(); in isSimpleZero()
991 if (const IntegerLiteral *IL = dyn_cast<IntegerLiteral>(E)) in isSimpleZero()
994 if (const FloatingLiteral *FL = dyn_cast<FloatingLiteral>(E)) in isSimpleZero()
997 if ((isa<ImplicitValueInitExpr>(E) || isa<CXXScalarValueInitExpr>(E)) && in isSimpleZero()
998 CGF.getTypes().isZeroInitializable(E->getType())) in isSimpleZero()
1001 if (const CastExpr *ICE = dyn_cast<CastExpr>(E)) in isSimpleZero()
1004 if (const CharacterLiteral *CL = dyn_cast<CharacterLiteral>(E)) in isSimpleZero()
1013 AggExprEmitter::EmitInitializationToLValue(Expr *E, LValue LV) { in EmitInitializationToLValue() argument
1017 if (Dest.isZeroed() && isSimpleZero(E, CGF)) { in EmitInitializationToLValue()
1020 } else if (isa<ImplicitValueInitExpr>(E) || isa<CXXScalarValueInitExpr>(E)) { in EmitInitializationToLValue()
1023 RValue RV = CGF.EmitReferenceBindingToExpr(E); in EmitInitializationToLValue()
1029 CGF.EmitComplexExprIntoLValue(E, LV, /*isInit*/ true); in EmitInitializationToLValue()
1032 CGF.EmitAggExpr(E, AggValueSlot::forLValue(LV, in EmitInitializationToLValue()
1040 CGF.EmitScalarInit(E, /*D=*/0, LV, /*Captured=*/false); in EmitInitializationToLValue()
1042 CGF.EmitStoreThroughLValue(RValue::get(CGF.EmitScalarExpr(E)), LV); in EmitInitializationToLValue()
1076 void AggExprEmitter::VisitInitListExpr(InitListExpr *E) { in VisitInitListExpr() argument
1083 if (llvm::Constant* C = CGF.CGM.EmitConstantExpr(E, E->getType(), &CGF)) { in VisitInitListExpr()
1087 EmitFinalDestCopy(E->getType(), CGF.MakeAddrLValue(GV, E->getType())); in VisitInitListExpr()
1091 if (E->hadArrayRangeDesignator()) in VisitInitListExpr()
1092 CGF.ErrorUnsupported(E, "GNU array range designator extension"); in VisitInitListExpr()
1094 AggValueSlot Dest = EnsureSlot(E->getType()); in VisitInitListExpr()
1096 LValue DestLV = CGF.MakeAddrLValue(Dest.getAddr(), E->getType(), in VisitInitListExpr()
1100 if (E->getType()->isArrayType()) { in VisitInitListExpr()
1101 if (E->isStringLiteralInit()) in VisitInitListExpr()
1102 return Visit(E->getInit(0)); in VisitInitListExpr()
1105 CGF.getContext().getAsArrayType(E->getType())->getElementType(); in VisitInitListExpr()
1112 EmitArrayInit(Dest.getAddr(), AType, elementType, E); in VisitInitListExpr()
1116 assert(E->getType()->isRecordType() && "Only support structs/unions here!"); in VisitInitListExpr()
1122 unsigned NumInitElements = E->getNumInits(); in VisitInitListExpr()
1123 RecordDecl *record = E->getType()->castAs<RecordType>()->getDecl(); in VisitInitListExpr()
1131 if (!E->getInitializedFieldInUnion()) { in VisitInitListExpr()
1146 FieldDecl *Field = E->getInitializedFieldInUnion(); in VisitInitListExpr()
1151 EmitInitializationToLValue(E->getInit(0), FieldLoc); in VisitInitListExpr()
1183 CGF.getTypes().isZeroInitializable(E->getType())) in VisitInitListExpr()
1193 EmitInitializationToLValue(E->getInit(curInitIndex++), LV); in VisitInitListExpr()
1243 static CharUnits GetNumNonZeroBytesInInit(const Expr *E, CodeGenFunction &CGF) { in GetNumNonZeroBytesInInit() argument
1244 E = E->IgnoreParens(); in GetNumNonZeroBytesInInit()
1247 if (isSimpleZero(E, CGF)) return CharUnits::Zero(); in GetNumNonZeroBytesInInit()
1251 const InitListExpr *ILE = dyn_cast<InitListExpr>(E); in GetNumNonZeroBytesInInit()
1253 return CGF.getContext().getTypeSizeInChars(E->getType()); in GetNumNonZeroBytesInInit()
1258 if (const RecordType *RT = E->getType()->getAs<RecordType>()) { in GetNumNonZeroBytesInInit()
1260 RecordDecl *SD = E->getType()->getAs<RecordType>()->getDecl(); in GetNumNonZeroBytesInInit()
1274 const Expr *E = ILE->getInit(ILEElement++); in GetNumNonZeroBytesInInit() local
1281 NumNonZeroBytes += GetNumNonZeroBytesInInit(E, CGF); in GetNumNonZeroBytesInInit()
1298 static void CheckAggExprForMemSetUse(AggValueSlot &Slot, const Expr *E, in CheckAggExprForMemSetUse() argument
1307 .getBaseElementType(E->getType())->getAs<RecordType>()) { in CheckAggExprForMemSetUse()
1315 CGF.getContext().getTypeInfoInChars(E->getType()); in CheckAggExprForMemSetUse()
1321 CharUnits NumNonZeroBytes = GetNumNonZeroBytesInInit(E, CGF); in CheckAggExprForMemSetUse()
1346 void CodeGenFunction::EmitAggExpr(const Expr *E, AggValueSlot Slot) { in EmitAggExpr() argument
1347 assert(E && hasAggregateEvaluationKind(E->getType()) && in EmitAggExpr()
1353 CheckAggExprForMemSetUse(Slot, E, *this); in EmitAggExpr()
1355 AggExprEmitter(*this, Slot).Visit(const_cast<Expr*>(E)); in EmitAggExpr()
1358 LValue CodeGenFunction::EmitAggExprToLValue(const Expr *E) { in EmitAggExprToLValue() argument
1359 assert(hasAggregateEvaluationKind(E->getType()) && "Invalid argument!"); in EmitAggExprToLValue()
1360 llvm::Value *Temp = CreateMemTemp(E->getType()); in EmitAggExprToLValue()
1361 LValue LV = MakeAddrLValue(Temp, E->getType()); in EmitAggExprToLValue()
1362 EmitAggExpr(E, AggValueSlot::forLValue(LV, AggValueSlot::IsNotDestructed, in EmitAggExprToLValue()