Lines Matching refs:E
74 ComplexPairTy EmitLoadOfLValue(const Expr *E) { in EmitLoadOfLValue() argument
75 return EmitLoadOfLValue(CGF.EmitLValue(E), E->getExprLoc()); in EmitLoadOfLValue()
95 ComplexPairTy Visit(Expr *E) { in Visit() argument
96 ApplyDebugLocation DL(CGF, E); in Visit()
97 return StmtVisitor<ComplexExprEmitter, ComplexPairTy>::Visit(E); in Visit()
105 ComplexPairTy VisitConstantExpr(ConstantExpr *E) { in VisitConstantExpr() argument
106 if (llvm::Constant *Result = ConstantEmitter(CGF).tryEmitConstantExpr(E)) in VisitConstantExpr()
109 return Visit(E->getSubExpr()); in VisitConstantExpr()
126 ComplexPairTy VisitUnaryCoawait(const UnaryOperator *E) { in VisitUnaryCoawait() argument
127 return Visit(E->getSubExpr()); in VisitUnaryCoawait()
131 Expr *E) { in emitConstant() argument
134 return EmitLoadOfLValue(Constant.getReferenceLValue(CGF, E), in emitConstant()
135 E->getExprLoc()); in emitConstant()
143 ComplexPairTy VisitDeclRefExpr(DeclRefExpr *E) { in VisitDeclRefExpr() argument
144 if (CodeGenFunction::ConstantEmission Constant = CGF.tryEmitAsConstant(E)) in VisitDeclRefExpr()
145 return emitConstant(Constant, E); in VisitDeclRefExpr()
146 return EmitLoadOfLValue(E); in VisitDeclRefExpr()
148 ComplexPairTy VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { in VisitObjCIvarRefExpr() argument
149 return EmitLoadOfLValue(E); in VisitObjCIvarRefExpr()
151 ComplexPairTy VisitObjCMessageExpr(ObjCMessageExpr *E) { in VisitObjCMessageExpr() argument
152 return CGF.EmitObjCMessageExpr(E).getComplexVal(); in VisitObjCMessageExpr()
154 ComplexPairTy VisitArraySubscriptExpr(Expr *E) { return EmitLoadOfLValue(E); } in VisitArraySubscriptExpr() argument
163 ComplexPairTy VisitOpaqueValueExpr(OpaqueValueExpr *E) { in VisitOpaqueValueExpr() argument
164 if (E->isGLValue()) in VisitOpaqueValueExpr()
165 return EmitLoadOfLValue(CGF.getOrCreateOpaqueLValueMapping(E), in VisitOpaqueValueExpr()
166 E->getExprLoc()); in VisitOpaqueValueExpr()
167 return CGF.getOrCreateOpaqueRValueMapping(E).getComplexVal(); in VisitOpaqueValueExpr()
170 ComplexPairTy VisitPseudoObjectExpr(PseudoObjectExpr *E) { in VisitPseudoObjectExpr() argument
171 return CGF.EmitPseudoObjectRValue(E).getComplexVal(); in VisitPseudoObjectExpr()
177 ComplexPairTy VisitImplicitCastExpr(ImplicitCastExpr *E) { in VisitImplicitCastExpr() argument
180 return EmitCast(E->getCastKind(), E->getSubExpr(), E->getType()); in VisitImplicitCastExpr()
182 ComplexPairTy VisitCastExpr(CastExpr *E) { in VisitCastExpr() argument
183 if (const auto *ECE = dyn_cast<ExplicitCastExpr>(E)) in VisitCastExpr()
185 return EmitCast(E->getCastKind(), E->getSubExpr(), E->getType()); in VisitCastExpr()
187 ComplexPairTy VisitCallExpr(const CallExpr *E);
188 ComplexPairTy VisitStmtExpr(const StmtExpr *E);
191 ComplexPairTy VisitPrePostIncDec(const UnaryOperator *E, in VisitPrePostIncDec() argument
193 LValue LV = CGF.EmitLValue(E->getSubExpr()); in VisitPrePostIncDec()
194 return CGF.EmitComplexPrePostIncDec(E, LV, isInc, isPre); in VisitPrePostIncDec()
196 ComplexPairTy VisitUnaryPostDec(const UnaryOperator *E) { in VisitUnaryPostDec() argument
197 return VisitPrePostIncDec(E, false, false); in VisitUnaryPostDec()
199 ComplexPairTy VisitUnaryPostInc(const UnaryOperator *E) { in VisitUnaryPostInc() argument
200 return VisitPrePostIncDec(E, true, false); in VisitUnaryPostInc()
202 ComplexPairTy VisitUnaryPreDec(const UnaryOperator *E) { in VisitUnaryPreDec() argument
203 return VisitPrePostIncDec(E, false, true); in VisitUnaryPreDec()
205 ComplexPairTy VisitUnaryPreInc(const UnaryOperator *E) { in VisitUnaryPreInc() argument
206 return VisitPrePostIncDec(E, true, true); in VisitUnaryPreInc()
208 ComplexPairTy VisitUnaryDeref(const Expr *E) { return EmitLoadOfLValue(E); } in VisitUnaryDeref() argument
210 ComplexPairTy VisitUnaryPlus(const UnaryOperator *E,
212 ComplexPairTy VisitPlus(const UnaryOperator *E, QualType PromotionType);
213 ComplexPairTy VisitUnaryMinus(const UnaryOperator *E,
215 ComplexPairTy VisitMinus(const UnaryOperator *E, QualType PromotionType);
216 ComplexPairTy VisitUnaryNot (const UnaryOperator *E);
218 ComplexPairTy VisitUnaryExtension(const UnaryOperator *E) { in VisitUnaryExtension() argument
219 return Visit(E->getSubExpr()); in VisitUnaryExtension()
229 ComplexPairTy VisitExprWithCleanups(ExprWithCleanups *E) { in VisitExprWithCleanups() argument
231 ComplexPairTy Vals = Visit(E->getSubExpr()); in VisitExprWithCleanups()
237 ComplexPairTy VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) { in VisitCXXScalarValueInitExpr() argument
238 assert(E->getType()->isAnyComplexType() && "Expected complex type!"); in VisitCXXScalarValueInitExpr()
239 QualType Elem = E->getType()->castAs<ComplexType>()->getElementType(); in VisitCXXScalarValueInitExpr()
243 ComplexPairTy VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) { in VisitImplicitValueInitExpr() argument
244 assert(E->getType()->isAnyComplexType() && "Expected complex type!"); in VisitImplicitValueInitExpr()
245 QualType Elem = E->getType()->castAs<ComplexType>()->getElementType(); in VisitImplicitValueInitExpr()
258 BinOpInfo EmitBinOps(const BinaryOperator *E,
260 ComplexPairTy EmitPromoted(const Expr *E, QualType PromotionTy);
261 ComplexPairTy EmitPromotedComplexOperand(const Expr *E, QualType PromotionTy);
262 LValue EmitCompoundAssignLValue(const CompoundAssignOperator *E,
266 ComplexPairTy EmitCompoundAssign(const CompoundAssignOperator *E,
290 ComplexPairTy VisitBin##OP(const BinaryOperator *E) { \
291 QualType promotionTy = getPromotionType(E->getType()); \
292 ComplexPairTy result = EmitBin##OP(EmitBinOps(E, promotionTy)); \
295 CGF.EmitUnPromotedValue(result, E->getType()); \
305 ComplexPairTy VisitCXXRewrittenBinaryOperator(CXXRewrittenBinaryOperator *E) { in HANDLEBINOP()
306 return Visit(E->getSemanticForm()); in HANDLEBINOP()
310 ComplexPairTy VisitBinAddAssign(const CompoundAssignOperator *E) { in VisitBinAddAssign() argument
311 return EmitCompoundAssign(E, &ComplexExprEmitter::EmitBinAdd); in VisitBinAddAssign()
313 ComplexPairTy VisitBinSubAssign(const CompoundAssignOperator *E) { in VisitBinSubAssign() argument
314 return EmitCompoundAssign(E, &ComplexExprEmitter::EmitBinSub); in VisitBinSubAssign()
316 ComplexPairTy VisitBinMulAssign(const CompoundAssignOperator *E) { in VisitBinMulAssign() argument
317 return EmitCompoundAssign(E, &ComplexExprEmitter::EmitBinMul); in VisitBinMulAssign()
319 ComplexPairTy VisitBinDivAssign(const CompoundAssignOperator *E) { in VisitBinDivAssign() argument
320 return EmitCompoundAssign(E, &ComplexExprEmitter::EmitBinDiv); in VisitBinDivAssign()
328 LValue EmitBinAssignLValue(const BinaryOperator *E,
330 ComplexPairTy VisitBinAssign (const BinaryOperator *E);
331 ComplexPairTy VisitBinComma (const BinaryOperator *E);
338 ComplexPairTy VisitInitListExpr(InitListExpr *E);
340 ComplexPairTy VisitCompoundLiteralExpr(CompoundLiteralExpr *E) { in VisitCompoundLiteralExpr() argument
341 return EmitLoadOfLValue(E); in VisitCompoundLiteralExpr()
344 ComplexPairTy VisitVAArgExpr(VAArgExpr *E);
346 ComplexPairTy VisitAtomicExpr(AtomicExpr *E) { in VisitAtomicExpr() argument
347 return CGF.EmitAtomicExpr(E).getComplexVal(); in VisitAtomicExpr()
414 ComplexPairTy ComplexExprEmitter::VisitExpr(Expr *E) { in VisitExpr() argument
415 CGF.ErrorUnsupported(E, "complex expression"); in VisitExpr()
417 CGF.ConvertType(getComplexType(E->getType())->getElementType()); in VisitExpr()
429 ComplexPairTy ComplexExprEmitter::VisitCallExpr(const CallExpr *E) { in VisitCallExpr() argument
430 if (E->getCallReturnType(CGF.getContext())->isReferenceType()) in VisitCallExpr()
431 return EmitLoadOfLValue(E); in VisitCallExpr()
433 return CGF.EmitCallExpr(E).getComplexVal(); in VisitCallExpr()
436 ComplexPairTy ComplexExprEmitter::VisitStmtExpr(const StmtExpr *E) { in VisitStmtExpr() argument
438 Address RetAlloca = CGF.EmitCompoundStmt(*E->getSubStmt(), true); in VisitStmtExpr()
440 return EmitLoadOfLValue(CGF.MakeAddrLValue(RetAlloca, E->getType()), in VisitStmtExpr()
441 E->getExprLoc()); in VisitStmtExpr()
578 ComplexPairTy ComplexExprEmitter::VisitUnaryPlus(const UnaryOperator *E, in VisitUnaryPlus() argument
581 ? getPromotionType(E->getSubExpr()->getType()) in VisitUnaryPlus()
583 ComplexPairTy result = VisitPlus(E, promotionTy); in VisitUnaryPlus()
585 return CGF.EmitUnPromotedValue(result, E->getSubExpr()->getType()); in VisitUnaryPlus()
589 ComplexPairTy ComplexExprEmitter::VisitPlus(const UnaryOperator *E, in VisitPlus() argument
594 return CGF.EmitPromotedComplexExpr(E->getSubExpr(), PromotionType); in VisitPlus()
595 return Visit(E->getSubExpr()); in VisitPlus()
598 ComplexPairTy ComplexExprEmitter::VisitUnaryMinus(const UnaryOperator *E, in VisitUnaryMinus() argument
601 ? getPromotionType(E->getSubExpr()->getType()) in VisitUnaryMinus()
603 ComplexPairTy result = VisitMinus(E, promotionTy); in VisitUnaryMinus()
605 return CGF.EmitUnPromotedValue(result, E->getSubExpr()->getType()); in VisitUnaryMinus()
608 ComplexPairTy ComplexExprEmitter::VisitMinus(const UnaryOperator *E, in VisitMinus() argument
614 Op = CGF.EmitPromotedComplexExpr(E->getSubExpr(), PromotionType); in VisitMinus()
616 Op = Visit(E->getSubExpr()); in VisitMinus()
629 ComplexPairTy ComplexExprEmitter::VisitUnaryNot(const UnaryOperator *E) { in VisitUnaryNot() argument
633 ComplexPairTy Op = Visit(E->getSubExpr()); in VisitUnaryNot()
962 ComplexPairTy ComplexExprEmitter::EmitPromoted(const Expr *E, in EmitPromoted() argument
964 E = E->IgnoreParens(); in EmitPromoted()
965 if (auto BO = dyn_cast<BinaryOperator>(E)) { in EmitPromoted()
978 } else if (auto UO = dyn_cast<UnaryOperator>(E)) { in EmitPromoted()
988 auto result = Visit(const_cast<Expr *>(E)); in EmitPromoted()
995 ComplexPairTy CodeGenFunction::EmitPromotedComplexExpr(const Expr *E, in EmitPromotedComplexExpr() argument
997 return ComplexExprEmitter(*this).EmitPromoted(E, DstTy); in EmitPromotedComplexExpr()
1001 ComplexExprEmitter::EmitPromotedComplexOperand(const Expr *E, in EmitPromotedComplexOperand() argument
1003 if (E->getType()->isAnyComplexType()) { in EmitPromotedComplexOperand()
1005 return CGF.EmitPromotedComplexExpr(E, OverallPromotionType); in EmitPromotedComplexOperand()
1007 return Visit(const_cast<Expr *>(E)); in EmitPromotedComplexOperand()
1012 return ComplexPairTy(CGF.EmitPromotedScalarExpr(E, ComplexElementTy), in EmitPromotedComplexOperand()
1015 return ComplexPairTy(CGF.EmitScalarExpr(E), nullptr); in EmitPromotedComplexOperand()
1021 ComplexExprEmitter::EmitBinOps(const BinaryOperator *E, in EmitBinOps() argument
1027 Ops.LHS = EmitPromotedComplexOperand(E->getLHS(), PromotionType); in EmitBinOps()
1028 Ops.RHS = EmitPromotedComplexOperand(E->getRHS(), PromotionType); in EmitBinOps()
1032 Ops.Ty = E->getType(); in EmitBinOps()
1033 Ops.FPFeatures = E->getFPFeaturesInEffect(CGF.getLangOpts()); in EmitBinOps()
1039 EmitCompoundAssignLValue(const CompoundAssignOperator *E, in EmitCompoundAssignLValue() argument
1044 QualType LHSTy = E->getLHS()->getType(); in EmitCompoundAssignLValue()
1049 OpInfo.FPFeatures = E->getFPFeaturesInEffect(CGF.getLangOpts()); in EmitCompoundAssignLValue()
1056 PromotionTypeCR = getPromotionType(E->getComputationResultType()); in EmitCompoundAssignLValue()
1058 PromotionTypeCR = E->getComputationResultType(); in EmitCompoundAssignLValue()
1062 QualType PromotionTypeRHS = getPromotionType(E->getRHS()->getType()); in EmitCompoundAssignLValue()
1065 if (E->getRHS()->getType()->isRealFloatingType()) { in EmitCompoundAssignLValue()
1068 CGF.EmitPromotedScalarExpr(E->getRHS(), PromotionTypeRHS), nullptr); in EmitCompoundAssignLValue()
1071 E->getRHS()->getType())); in EmitCompoundAssignLValue()
1073 OpInfo.RHS = ComplexPairTy(CGF.EmitScalarExpr(E->getRHS()), nullptr); in EmitCompoundAssignLValue()
1078 CGF.EmitPromotedComplexExpr(E->getRHS(), PromotionTypeRHS)); in EmitCompoundAssignLValue()
1081 E->getRHS()->getType())); in EmitCompoundAssignLValue()
1082 OpInfo.RHS = Visit(E->getRHS()); in EmitCompoundAssignLValue()
1086 LValue LHS = CGF.EmitLValue(E->getLHS()); in EmitCompoundAssignLValue()
1089 SourceLocation Loc = E->getExprLoc(); in EmitCompoundAssignLValue()
1090 QualType PromotionTypeLHS = getPromotionType(E->getComputationLHSType()); in EmitCompoundAssignLValue()
1143 EmitCompoundAssign(const CompoundAssignOperator *E, in EmitCompoundAssign() argument
1146 LValue LV = EmitCompoundAssignLValue(E, Func, Val); in EmitCompoundAssign()
1156 return EmitLoadOfLValue(LV, E->getExprLoc()); in EmitCompoundAssign()
1159 LValue ComplexExprEmitter::EmitBinAssignLValue(const BinaryOperator *E, in EmitBinAssignLValue() argument
1161 assert(CGF.getContext().hasSameUnqualifiedType(E->getLHS()->getType(), in EmitBinAssignLValue()
1162 E->getRHS()->getType()) && in EmitBinAssignLValue()
1168 Val = Visit(E->getRHS()); in EmitBinAssignLValue()
1171 LValue LHS = CGF.EmitLValue(E->getLHS()); in EmitBinAssignLValue()
1179 ComplexPairTy ComplexExprEmitter::VisitBinAssign(const BinaryOperator *E) { in VisitBinAssign() argument
1181 LValue LV = EmitBinAssignLValue(E, Val); in VisitBinAssign()
1191 return EmitLoadOfLValue(LV, E->getExprLoc()); in VisitBinAssign()
1194 ComplexPairTy ComplexExprEmitter::VisitBinComma(const BinaryOperator *E) { in VisitBinComma() argument
1195 CGF.EmitIgnoredExpr(E->getLHS()); in VisitBinComma()
1196 return Visit(E->getRHS()); in VisitBinComma()
1200 VisitAbstractConditionalOperator(const AbstractConditionalOperator *E) { in VisitAbstractConditionalOperator() argument
1208 CodeGenFunction::OpaqueValueMapping binding(CGF, E); in VisitAbstractConditionalOperator()
1212 CGF.EmitBranchOnBoolExpr(E->getCond(), LHSBlock, RHSBlock, in VisitAbstractConditionalOperator()
1213 CGF.getProfileCount(E)); in VisitAbstractConditionalOperator()
1217 CGF.incrementProfileCounter(E); in VisitAbstractConditionalOperator()
1218 ComplexPairTy LHS = Visit(E->getTrueExpr()); in VisitAbstractConditionalOperator()
1225 ComplexPairTy RHS = Visit(E->getFalseExpr()); in VisitAbstractConditionalOperator()
1243 ComplexPairTy ComplexExprEmitter::VisitChooseExpr(ChooseExpr *E) { in VisitChooseExpr() argument
1244 return Visit(E->getChosenSubExpr()); in VisitChooseExpr()
1247 ComplexPairTy ComplexExprEmitter::VisitInitListExpr(InitListExpr *E) { in VisitInitListExpr() argument
1255 if (E->getNumInits() == 2) { in VisitInitListExpr()
1256 llvm::Value *Real = CGF.EmitScalarExpr(E->getInit(0)); in VisitInitListExpr()
1257 llvm::Value *Imag = CGF.EmitScalarExpr(E->getInit(1)); in VisitInitListExpr()
1259 } else if (E->getNumInits() == 1) { in VisitInitListExpr()
1260 return Visit(E->getInit(0)); in VisitInitListExpr()
1264 assert(E->getNumInits() == 0 && "Unexpected number of inits"); in VisitInitListExpr()
1265 QualType Ty = E->getType()->castAs<ComplexType>()->getElementType(); in VisitInitListExpr()
1271 ComplexPairTy ComplexExprEmitter::VisitVAArgExpr(VAArgExpr *E) { in VisitVAArgExpr() argument
1273 Address ArgPtr = CGF.EmitVAArg(E, ArgValue); in VisitVAArgExpr()
1276 CGF.ErrorUnsupported(E, "complex va_arg expression"); in VisitVAArgExpr()
1278 CGF.ConvertType(E->getType()->castAs<ComplexType>()->getElementType()); in VisitVAArgExpr()
1283 return EmitLoadOfLValue(CGF.MakeAddrLValue(ArgPtr, E->getType()), in VisitVAArgExpr()
1284 E->getExprLoc()); in VisitVAArgExpr()
1293 ComplexPairTy CodeGenFunction::EmitComplexExpr(const Expr *E, bool IgnoreReal, in EmitComplexExpr() argument
1295 assert(E && getComplexType(E->getType()) && in EmitComplexExpr()
1299 .Visit(const_cast<Expr *>(E)); in EmitComplexExpr()
1302 void CodeGenFunction::EmitComplexExprIntoLValue(const Expr *E, LValue dest, in EmitComplexExprIntoLValue() argument
1304 assert(E && getComplexType(E->getType()) && in EmitComplexExprIntoLValue()
1307 ComplexPairTy Val = Emitter.Visit(const_cast<Expr*>(E)); in EmitComplexExprIntoLValue()
1323 LValue CodeGenFunction::EmitComplexAssignmentLValue(const BinaryOperator *E) { in EmitComplexAssignmentLValue() argument
1324 assert(E->getOpcode() == BO_Assign); in EmitComplexAssignmentLValue()
1326 LValue LVal = ComplexExprEmitter(*this).EmitBinAssignLValue(E, Val); in EmitComplexAssignmentLValue()
1329 E->getLHS()); in EmitComplexAssignmentLValue()
1348 EmitComplexCompoundAssignmentLValue(const CompoundAssignOperator *E) { in EmitComplexCompoundAssignmentLValue() argument
1349 CompoundFunc Op = getComplexOp(E->getOpcode()); in EmitComplexCompoundAssignmentLValue()
1351 return ComplexExprEmitter(*this).EmitCompoundAssignLValue(E, Op, Val); in EmitComplexCompoundAssignmentLValue()
1355 EmitScalarCompoundAssignWithComplex(const CompoundAssignOperator *E, in EmitScalarCompoundAssignWithComplex() argument
1357 CompoundFunc Op = getComplexOp(E->getOpcode()); in EmitScalarCompoundAssignWithComplex()
1359 LValue Ret = ComplexExprEmitter(*this).EmitCompoundAssignLValue(E, Op, Val); in EmitScalarCompoundAssignWithComplex()