21bool BinaryOperationHintToNumberOperationHint(
50bool BinaryOperationHintToBigIntOperationHint(
151 case IrOpcode::kJSAdd:
159 case IrOpcode::kJSSubtract:
167 case IrOpcode::kJSMultiply:
169 case IrOpcode::kJSExponentiate:
171 case IrOpcode::kJSDivide:
173 case IrOpcode::kJSModulus:
175 case IrOpcode::kJSBitwiseAnd:
177 case IrOpcode::kJSBitwiseOr:
179 case IrOpcode::kJSBitwiseXor:
181 case IrOpcode::kJSShiftLeft:
183 case IrOpcode::kJSShiftRight:
185 case IrOpcode::kJSShiftRightLogical:
195 case IrOpcode::kJSAdd:
197 case IrOpcode::kJSSubtract:
199 case IrOpcode::kJSMultiply:
201 case IrOpcode::kJSDivide:
203 case IrOpcode::kJSModulus:
205 case IrOpcode::kJSBitwiseAnd:
207 case IrOpcode::kJSBitwiseOr:
209 case IrOpcode::kJSBitwiseXor:
211 case IrOpcode::kJSShiftLeft:
213 case IrOpcode::kJSShiftRight:
223 case IrOpcode::kJSEqual:
225 case IrOpcode::kJSLessThan:
227 case IrOpcode::kJSGreaterThan:
230 case IrOpcode::kJSLessThanOrEqual:
232 case IrOpcode::kJSGreaterThanOrEqual:
243 case IrOpcode::kJSEqual:
245 case IrOpcode::kJSLessThan:
247 case IrOpcode::kJSGreaterThan:
250 case IrOpcode::kJSLessThanOrEqual:
252 case IrOpcode::kJSGreaterThanOrEqual:
343 feedback_vector_(feedback_vector) {}
363 slot, effect, control,
364 DeoptimizeReason::kInsufficientTypeFeedbackForUnaryOperation)) {
372 Node* check =
nullptr;
374 case IrOpcode::kJSBitwiseNot: {
378 this,
jsgraph()->javascript()->BitwiseXor(feedback), operand,
379 jsgraph()->SmiConstant(-1), effect, control, slot);
383 case IrOpcode::kJSDecrement: {
387 this,
jsgraph()->javascript()->Subtract(feedback), operand,
388 jsgraph()->SmiConstant(1), effect, control, slot);
392 case IrOpcode::kJSIncrement: {
396 operand,
jsgraph()->SmiConstant(1), effect,
401 case IrOpcode::kJSNegate: {
405 this,
jsgraph()->javascript()->Multiply(feedback), operand,
406 jsgraph()->SmiConstant(-1), effect, control, slot);
419 case IrOpcode::kTypeOf: {
455 if (node !=
nullptr) {
466 case IrOpcode::kJSStrictEqual: {
468 slot, effect, control,
469 DeoptimizeReason::kInsufficientTypeFeedbackForCompareOperation)) {
476 case IrOpcode::kJSEqual:
477 case IrOpcode::kJSLessThan:
478 case IrOpcode::kJSGreaterThan:
479 case IrOpcode::kJSLessThanOrEqual:
480 case IrOpcode::kJSGreaterThanOrEqual: {
482 slot, effect, control,
483 DeoptimizeReason::kInsufficientTypeFeedbackForCompareOperation)) {
495 case IrOpcode::kJSInstanceOf: {
497 slot, effect, control,
498 DeoptimizeReason::kInsufficientTypeFeedbackForCompareOperation)) {
505 case IrOpcode::kJSBitwiseOr:
506 case IrOpcode::kJSBitwiseXor:
507 case IrOpcode::kJSBitwiseAnd:
508 case IrOpcode::kJSShiftLeft:
509 case IrOpcode::kJSShiftRight:
510 case IrOpcode::kJSShiftRightLogical:
511 case IrOpcode::kJSAdd:
512 case IrOpcode::kJSSubtract:
513 case IrOpcode::kJSMultiply:
514 case IrOpcode::kJSDivide:
515 case IrOpcode::kJSModulus:
516 case IrOpcode::kJSExponentiate: {
518 slot, effect, control,
519 DeoptimizeReason::kInsufficientTypeFeedbackForBinaryOperation)) {
526 if (op->
opcode() != IrOpcode::kJSShiftRightLogical &&
527 op->
opcode() != IrOpcode::kJSExponentiate) {
544 slot, effect, control,
545 DeoptimizeReason::kInsufficientTypeFeedbackForForIn)) {
556 slot, effect, control,
557 DeoptimizeReason::kInsufficientTypeFeedbackForForIn)) {
571 input, effect, control);
581 op->
opcode() == IrOpcode::kJSCallWithSpread);
583 slot, effect, control,
584 DeoptimizeReason::kInsufficientTypeFeedbackForCall)) {
594 op->
opcode() == IrOpcode::kJSConstructWithSpread ||
595 op->
opcode() == IrOpcode::kJSConstructForwardAllArgs);
597 slot, effect, control,
598 DeoptimizeReason::kInsufficientTypeFeedbackForConstruct)) {
612 load_slot, effect, control,
613 DeoptimizeReason::kInsufficientTypeFeedbackForGenericNamedAccess)) {
622 op->
opcode() == IrOpcode::kJSLoadNamedFromSuper);
624 slot, effect, control,
625 DeoptimizeReason::kInsufficientTypeFeedbackForGenericNamedAccess)) {
636 slot, effect, control,
637 DeoptimizeReason::kInsufficientTypeFeedbackForGenericKeyedAccess)) {
649 op->
opcode() == IrOpcode::kJSDefineNamedOwnProperty);
651 slot, effect, control,
652 DeoptimizeReason::kInsufficientTypeFeedbackForGenericNamedAccess)) {
664 op->
opcode() == IrOpcode::kJSStoreInArrayLiteral ||
665 op->
opcode() == IrOpcode::kJSDefineKeyedOwnPropertyInLiteral ||
666 op->
opcode() == IrOpcode::kJSDefineKeyedOwnProperty);
668 slot, effect, control,
669 DeoptimizeReason::kInsufficientTypeFeedbackForGenericKeyedAccess)) {
681 if (!
broker()->FeedbackIsInsufficient(source))
return nullptr;
685 jsgraph()->Dead(), effect, control);
SimplifiedOperatorBuilder * simplified
JSOperatorBuilder * javascript() const
SimplifiedOperatorBuilder * simplified() const
Isolate * isolate() const
Node * ConstantNoHole(ObjectRef ref, JSHeapBroker *broker)
BinaryOperationHint GetFeedbackForBinaryOperation(FeedbackSource const &source)
TypeOfFeedback::Result GetFeedbackForTypeOf(FeedbackSource const &source)
CompareOperationHint GetFeedbackForCompareOperation(FeedbackSource const &source)
Node * TryBuildBigIntCompare()
JSOperatorBuilder * javascript()
bool GetBinaryBigIntOperationHint(BigIntOperationHint *hint)
CompareOperationHint GetCompareOperationHint()
bool GetCompareNumberOperationHint(NumberOperationHint *hint)
JSGraph * jsgraph() const
Node * TryBuildNumberBinop()
bool GetBinaryNumberOperationHint(NumberOperationHint *hint)
Node * TryBuildNumberCompare()
Isolate * isolate() const
Operator const *const op_
const Operator * SpeculativeNumberCompareOp(NumberOperationHint hint)
JSSpeculativeBinopBuilder(const JSTypeHintLowering *lowering, const Operator *op, Node *left, Node *right, Node *effect, Node *control, FeedbackSlot slot)
const Operator * SpeculativeNumberOp(NumberOperationHint hint)
Node * TryBuildBigIntBinop()
CommonOperatorBuilder * common()
bool GetCompareBigIntOperationHint(BigIntOperationHint *hint)
Node * BuildSpeculativeOperation(const Operator *op)
SimplifiedOperatorBuilder * simplified()
const Operator * SpeculativeBigIntCompareOp(BigIntOperationHint hint)
JSTypeHintLowering const *const lowering_
BinaryOperationHint GetBinaryOperationHint()
const Operator * SpeculativeBigIntOp(BigIntOperationHint hint)
static LoweringResult SideEffectFree(Node *value, Node *effect, Node *control)
static LoweringResult NoChange()
static LoweringResult Exit(Node *control)
CompareOperationHint GetCompareOperationHint(FeedbackSlot slot) const
BinaryOperationHint GetBinaryOperationHint(FeedbackSlot slot) const
LoweringResult ReduceLoadNamedOperation(const Operator *op, Node *effect, Node *control, FeedbackSlot slot) const
LoweringResult ReduceConstructOperation(const Operator *op, Node *const *args, int arg_count, Node *effect, Node *control, FeedbackSlot slot) const
Node * BuildDeoptIfFeedbackIsInsufficient(FeedbackSlot slot, Node *effect, Node *control, DeoptimizeReason reson) const
LoweringResult ReduceForInPrepareOperation(Node *enumerator, Node *effect, Node *control, FeedbackSlot slot) const
Isolate * isolate() const
JSGraph * jsgraph() const
LoweringResult ReduceLoadKeyedOperation(const Operator *op, Node *obj, Node *key, Node *effect, Node *control, FeedbackSlot slot) const
LoweringResult ReduceForInNextOperation(Node *receiver, Node *cache_array, Node *cache_type, Node *index, Node *effect, Node *control, FeedbackSlot slot) const
JSTypeHintLowering(JSHeapBroker *broker, JSGraph *jsgraph, FeedbackVectorRef feedback_vector, Flags flags)
LoweringResult ReduceToNumberOperation(Node *value, Node *effect, Node *control, FeedbackSlot slot) const
JSHeapBroker * broker() const
@ kBailoutOnUninitialized
LoweringResult ReduceBinaryOperation(const Operator *op, Node *left, Node *right, Node *effect, Node *control, FeedbackSlot slot) const
LoweringResult ReduceGetIteratorOperation(const Operator *op, Node *obj, Node *effect, Node *control, FeedbackSlot load_slot, FeedbackSlot call_slot) const
LoweringResult ReduceUnaryOperation(const Operator *op, Node *operand, Node *effect, Node *control, FeedbackSlot slot) const
FeedbackVectorRef feedback_vector() const
LoweringResult ReduceStoreKeyedOperation(const Operator *op, Node *obj, Node *key, Node *val, Node *effect, Node *control, FeedbackSlot slot) const
LoweringResult ReduceStoreNamedOperation(const Operator *op, Node *obj, Node *val, Node *effect, Node *control, FeedbackSlot slot) const
LoweringResult ReduceCallOperation(const Operator *op, Node *const *args, int arg_count, Node *effect, Node *control, FeedbackSlot slot) const
CommonOperatorBuilder * common() const
static Node * FindFrameStateBefore(Node *node, Node *unreachable_sentinel)
void ReplaceInput(int index, Node *new_to)
static bool HasContextInput(const Operator *op)
static bool HasFrameStateInput(const Operator *op)
int ControlInputCount() const
int ValueInputCount() const
int EffectOutputCount() const
int ControlOutputCount() const
int EffectInputCount() const
constexpr Opcode opcode() const
const Operator * SpeculativeSmallIntegerSubtract(NumberOperationHint hint)
const Operator * SpeculativeAdditiveSafeIntegerAdd(NumberOperationHint hint)
const Operator * SpeculativeNumberLessThanOrEqual(NumberOperationHint hint)
const Operator * SpeculativeBigIntLessThanOrEqual(BigIntOperationHint hint)
const Operator * SpeculativeBigIntLessThan(BigIntOperationHint hint)
const Operator * SpeculativeBigIntModulus(BigIntOperationHint hint)
const Operator * SpeculativeNumberLessThan(NumberOperationHint hint)
const Operator * SpeculativeBigIntBitwiseXor(BigIntOperationHint hint)
const Operator * SpeculativeNumberSubtract(NumberOperationHint hint)
const Operator * SpeculativeBigIntAdd(BigIntOperationHint hint)
const Operator * SpeculativeBigIntSubtract(BigIntOperationHint hint)
const Operator * SpeculativeBigIntEqual(BigIntOperationHint hint)
const Operator * SpeculativeBigIntBitwiseOr(BigIntOperationHint hint)
const Operator * SpeculativeNumberAdd(NumberOperationHint hint)
const Operator * SpeculativeAdditiveSafeIntegerSubtract(NumberOperationHint hint)
const Operator * SpeculativeNumberModulus(NumberOperationHint hint)
const Operator * SpeculativeBigIntShiftRight(BigIntOperationHint hint)
const Operator * SpeculativeNumberBitwiseAnd(NumberOperationHint hint)
const Operator * SpeculativeNumberShiftLeft(NumberOperationHint hint)
const Operator * SpeculativeNumberShiftRightLogical(NumberOperationHint hint)
const Operator * SpeculativeNumberMultiply(NumberOperationHint hint)
const Operator * SpeculativeNumberShiftRight(NumberOperationHint hint)
const Operator * SpeculativeSmallIntegerAdd(NumberOperationHint hint)
const Operator * SpeculativeBigIntBitwiseAnd(BigIntOperationHint hint)
const Operator * SpeculativeNumberBitwiseXor(NumberOperationHint hint)
const Operator * SpeculativeBigIntNegate(BigIntOperationHint hint)
const Operator * SpeculativeNumberDivide(NumberOperationHint hint)
const Operator * SpeculativeBigIntDivide(BigIntOperationHint hint)
const Operator * SpeculativeNumberBitwiseOr(NumberOperationHint hint)
const Operator * SpeculativeBigIntMultiply(BigIntOperationHint hint)
const Operator * SpeculativeNumberPow(NumberOperationHint hint)
const Operator * SpeculativeBigIntShiftLeft(BigIntOperationHint hint)
const Operator * SpeculativeNumberEqual(NumberOperationHint hint)
Node * NewNode(const Operator *op, int input_count, Node *const *inputs, bool incomplete=false)
JSHeapBroker *const broker_
base::Vector< const DirectHandle< Object > > args
InstructionOperand source
@ kReceiverOrNullOrUndefined
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)