Lines Matching refs:BO

348 bool ByteCodeExprGen<Emitter>::VisitBinaryOperator(const BinaryOperator *BO) {  in VisitBinaryOperator()  argument
350 if (BO->isLogicalOp()) in VisitBinaryOperator()
351 return this->VisitLogicalBinOp(BO); in VisitBinaryOperator()
353 if (BO->getType()->isAnyComplexType()) in VisitBinaryOperator()
354 return this->VisitComplexBinOp(BO); in VisitBinaryOperator()
356 const Expr *LHS = BO->getLHS(); in VisitBinaryOperator()
357 const Expr *RHS = BO->getRHS(); in VisitBinaryOperator()
359 if (BO->isPtrMemOp()) in VisitBinaryOperator()
365 std::optional<PrimType> T = classify(BO->getType()); in VisitBinaryOperator()
368 if (BO->isCommaOp()) { in VisitBinaryOperator()
384 Ctx.getASTContext().CompCategories.lookupInfoForType(BO->getType()); in VisitBinaryOperator()
389 std::optional<unsigned> ResultIndex = this->allocateLocal(BO, false); in VisitBinaryOperator()
390 if (!this->emitGetPtrLocal(*ResultIndex, BO)) in VisitBinaryOperator()
397 return this->emitCMP3(*LT, CmpInfo, BO); in VisitBinaryOperator()
404 if (BO->getOpcode() == BO_Add || BO->getOpcode() == BO_Sub) { in VisitBinaryOperator()
406 return this->VisitPointerArithBinOp(BO); in VisitBinaryOperator()
414 auto MaybeCastToBool = [this, T, BO](bool Result) { in VisitBinaryOperator()
418 return this->emitPop(*T, BO); in VisitBinaryOperator()
420 return this->emitCast(PT_Bool, *T, BO); in VisitBinaryOperator()
424 auto Discard = [this, T, BO](bool Result) { in VisitBinaryOperator()
427 return DiscardResult ? this->emitPop(*T, BO) : true; in VisitBinaryOperator()
430 switch (BO->getOpcode()) { in VisitBinaryOperator()
432 return MaybeCastToBool(this->emitEQ(*LT, BO)); in VisitBinaryOperator()
434 return MaybeCastToBool(this->emitNE(*LT, BO)); in VisitBinaryOperator()
436 return MaybeCastToBool(this->emitLT(*LT, BO)); in VisitBinaryOperator()
438 return MaybeCastToBool(this->emitLE(*LT, BO)); in VisitBinaryOperator()
440 return MaybeCastToBool(this->emitGT(*LT, BO)); in VisitBinaryOperator()
442 return MaybeCastToBool(this->emitGE(*LT, BO)); in VisitBinaryOperator()
444 if (BO->getType()->isFloatingType()) in VisitBinaryOperator()
445 return Discard(this->emitSubf(getRoundingMode(BO), BO)); in VisitBinaryOperator()
446 return Discard(this->emitSub(*T, BO)); in VisitBinaryOperator()
448 if (BO->getType()->isFloatingType()) in VisitBinaryOperator()
449 return Discard(this->emitAddf(getRoundingMode(BO), BO)); in VisitBinaryOperator()
450 return Discard(this->emitAdd(*T, BO)); in VisitBinaryOperator()
452 if (BO->getType()->isFloatingType()) in VisitBinaryOperator()
453 return Discard(this->emitMulf(getRoundingMode(BO), BO)); in VisitBinaryOperator()
454 return Discard(this->emitMul(*T, BO)); in VisitBinaryOperator()
456 return Discard(this->emitRem(*T, BO)); in VisitBinaryOperator()
458 if (BO->getType()->isFloatingType()) in VisitBinaryOperator()
459 return Discard(this->emitDivf(getRoundingMode(BO), BO)); in VisitBinaryOperator()
460 return Discard(this->emitDiv(*T, BO)); in VisitBinaryOperator()
463 return LHS->refersToBitField() ? this->emitStoreBitFieldPop(*T, BO) in VisitBinaryOperator()
464 : this->emitStorePop(*T, BO); in VisitBinaryOperator()
465 return LHS->refersToBitField() ? this->emitStoreBitField(*T, BO) in VisitBinaryOperator()
466 : this->emitStore(*T, BO); in VisitBinaryOperator()
468 return Discard(this->emitBitAnd(*T, BO)); in VisitBinaryOperator()
470 return Discard(this->emitBitOr(*T, BO)); in VisitBinaryOperator()
472 return Discard(this->emitShl(*LT, *RT, BO)); in VisitBinaryOperator()
474 return Discard(this->emitShr(*LT, *RT, BO)); in VisitBinaryOperator()
476 return Discard(this->emitBitXor(*T, BO)); in VisitBinaryOperator()