Index: src/compiler/bytecode-graph-builder.cc |
diff --git a/src/compiler/bytecode-graph-builder.cc b/src/compiler/bytecode-graph-builder.cc |
index 768811dfe8dbd76aae54d1113edd5ee8d2e42442..a17947a246b88b6499c467a3b23ce58a7f4a14dc 100644 |
--- a/src/compiler/bytecode-graph-builder.cc |
+++ b/src/compiler/bytecode-graph-builder.cc |
@@ -1203,21 +1203,10 @@ void BytecodeGraphBuilder::BuildBinaryOp(const Operator* js_op) { |
// Helper function to create binary operation hint from the recorded type |
// feedback. |
-BinaryOperationHint BytecodeGraphBuilder::GetBinaryOperationHint() { |
- FeedbackVectorSlot slot = |
- feedback_vector()->ToSlot(bytecode_iterator().GetIndexOperand(1)); |
- DCHECK_EQ(FeedbackVectorSlotKind::GENERAL, feedback_vector()->GetKind(slot)); |
- Object* feedback = feedback_vector()->Get(slot); |
- BinaryOperationHint hint = BinaryOperationHint::kAny; |
- if (feedback->IsSmi()) { |
- hint = BinaryOperationHintFromFeedback((Smi::cast(feedback))->value()); |
- } |
- return hint; |
-} |
- |
-BinaryOperationHint BytecodeGraphBuilder::GetBinaryOperationHintForIncDec() { |
- FeedbackVectorSlot slot = |
- feedback_vector()->ToSlot(bytecode_iterator().GetIndexOperand(0)); |
+BinaryOperationHint BytecodeGraphBuilder::GetBinaryOperationHint( |
+ int operand_index) { |
+ FeedbackVectorSlot slot = feedback_vector()->ToSlot( |
+ bytecode_iterator().GetIndexOperand(operand_index)); |
DCHECK_EQ(FeedbackVectorSlotKind::GENERAL, feedback_vector()->GetKind(slot)); |
Object* feedback = feedback_vector()->Get(slot); |
BinaryOperationHint hint = BinaryOperationHint::kAny; |
@@ -1228,47 +1217,58 @@ BinaryOperationHint BytecodeGraphBuilder::GetBinaryOperationHintForIncDec() { |
} |
void BytecodeGraphBuilder::VisitAdd() { |
- BuildBinaryOp(javascript()->Add(GetBinaryOperationHint())); |
+ BuildBinaryOp( |
+ javascript()->Add(GetBinaryOperationHint(kBinaryOperationHintIndex))); |
} |
void BytecodeGraphBuilder::VisitSub() { |
- BuildBinaryOp(javascript()->Subtract(GetBinaryOperationHint())); |
+ BuildBinaryOp(javascript()->Subtract( |
+ GetBinaryOperationHint(kBinaryOperationHintIndex))); |
} |
void BytecodeGraphBuilder::VisitMul() { |
- BuildBinaryOp(javascript()->Multiply(GetBinaryOperationHint())); |
+ BuildBinaryOp(javascript()->Multiply( |
+ GetBinaryOperationHint(kBinaryOperationHintIndex))); |
} |
void BytecodeGraphBuilder::VisitDiv() { |
- BuildBinaryOp(javascript()->Divide(GetBinaryOperationHint())); |
+ BuildBinaryOp( |
+ javascript()->Divide(GetBinaryOperationHint(kBinaryOperationHintIndex))); |
} |
void BytecodeGraphBuilder::VisitMod() { |
- BuildBinaryOp(javascript()->Modulus(GetBinaryOperationHint())); |
+ BuildBinaryOp( |
+ javascript()->Modulus(GetBinaryOperationHint(kBinaryOperationHintIndex))); |
} |
void BytecodeGraphBuilder::VisitBitwiseOr() { |
- BuildBinaryOp(javascript()->BitwiseOr(GetBinaryOperationHint())); |
+ BuildBinaryOp(javascript()->BitwiseOr( |
+ GetBinaryOperationHint(kBinaryOperationHintIndex))); |
} |
void BytecodeGraphBuilder::VisitBitwiseXor() { |
- BuildBinaryOp(javascript()->BitwiseXor(GetBinaryOperationHint())); |
+ BuildBinaryOp(javascript()->BitwiseXor( |
+ GetBinaryOperationHint(kBinaryOperationHintIndex))); |
} |
void BytecodeGraphBuilder::VisitBitwiseAnd() { |
- BuildBinaryOp(javascript()->BitwiseAnd(GetBinaryOperationHint())); |
+ BuildBinaryOp(javascript()->BitwiseAnd( |
+ GetBinaryOperationHint(kBinaryOperationHintIndex))); |
} |
void BytecodeGraphBuilder::VisitShiftLeft() { |
- BuildBinaryOp(javascript()->ShiftLeft(GetBinaryOperationHint())); |
+ BuildBinaryOp(javascript()->ShiftLeft( |
+ GetBinaryOperationHint(kBinaryOperationHintIndex))); |
} |
void BytecodeGraphBuilder::VisitShiftRight() { |
- BuildBinaryOp(javascript()->ShiftRight(GetBinaryOperationHint())); |
+ BuildBinaryOp(javascript()->ShiftRight( |
+ GetBinaryOperationHint(kBinaryOperationHintIndex))); |
} |
void BytecodeGraphBuilder::VisitShiftRightLogical() { |
- BuildBinaryOp(javascript()->ShiftRightLogical(GetBinaryOperationHint())); |
+ BuildBinaryOp(javascript()->ShiftRightLogical( |
+ GetBinaryOperationHint(kBinaryOperationHintIndex))); |
} |
void BytecodeGraphBuilder::BuildBinaryOpWithImmediate(const Operator* js_op) { |
@@ -1281,33 +1281,33 @@ void BytecodeGraphBuilder::BuildBinaryOpWithImmediate(const Operator* js_op) { |
} |
void BytecodeGraphBuilder::VisitAddSmi() { |
- BinaryOperationHint hint = BinaryOperationHint::kAny; |
- BuildBinaryOpWithImmediate(javascript()->Add(hint)); |
+ BuildBinaryOpWithImmediate( |
+ javascript()->Add(GetBinaryOperationHint(kBinaryOperationSmiHintIndex))); |
} |
void BytecodeGraphBuilder::VisitSubSmi() { |
- BinaryOperationHint hint = BinaryOperationHint::kAny; |
- BuildBinaryOpWithImmediate(javascript()->Subtract(hint)); |
+ BuildBinaryOpWithImmediate(javascript()->Subtract( |
+ GetBinaryOperationHint(kBinaryOperationSmiHintIndex))); |
} |
void BytecodeGraphBuilder::VisitBitwiseOrSmi() { |
- BinaryOperationHint hint = BinaryOperationHint::kAny; |
- BuildBinaryOpWithImmediate(javascript()->BitwiseOr(hint)); |
+ BuildBinaryOpWithImmediate(javascript()->BitwiseOr( |
+ GetBinaryOperationHint(kBinaryOperationSmiHintIndex))); |
} |
void BytecodeGraphBuilder::VisitBitwiseAndSmi() { |
- BinaryOperationHint hint = BinaryOperationHint::kAny; |
- BuildBinaryOpWithImmediate(javascript()->BitwiseAnd(hint)); |
+ BuildBinaryOpWithImmediate(javascript()->BitwiseAnd( |
+ GetBinaryOperationHint(kBinaryOperationSmiHintIndex))); |
} |
void BytecodeGraphBuilder::VisitShiftLeftSmi() { |
- BinaryOperationHint hint = BinaryOperationHint::kAny; |
- BuildBinaryOpWithImmediate(javascript()->ShiftLeft(hint)); |
+ BuildBinaryOpWithImmediate(javascript()->ShiftLeft( |
+ GetBinaryOperationHint(kBinaryOperationSmiHintIndex))); |
} |
void BytecodeGraphBuilder::VisitShiftRightSmi() { |
- BinaryOperationHint hint = BinaryOperationHint::kAny; |
- BuildBinaryOpWithImmediate(javascript()->ShiftRight(hint)); |
+ BuildBinaryOpWithImmediate(javascript()->ShiftRight( |
+ GetBinaryOperationHint(kBinaryOperationSmiHintIndex))); |
} |
void BytecodeGraphBuilder::VisitInc() { |
@@ -1315,7 +1315,7 @@ void BytecodeGraphBuilder::VisitInc() { |
// Note: Use subtract -1 here instead of add 1 to ensure we always convert to |
// a number, not a string. |
const Operator* js_op = |
- javascript()->Subtract(GetBinaryOperationHintForIncDec()); |
+ javascript()->Subtract(GetBinaryOperationHint(kCountOperationHintIndex)); |
Node* node = NewNode(js_op, environment()->LookupAccumulator(), |
jsgraph()->Constant(-1)); |
environment()->BindAccumulator(node, &states); |
@@ -1324,7 +1324,7 @@ void BytecodeGraphBuilder::VisitInc() { |
void BytecodeGraphBuilder::VisitDec() { |
FrameStateBeforeAndAfter states(this); |
const Operator* js_op = |
- javascript()->Subtract(GetBinaryOperationHintForIncDec()); |
+ javascript()->Subtract(GetBinaryOperationHint(kCountOperationHintIndex)); |
Node* node = NewNode(js_op, environment()->LookupAccumulator(), |
jsgraph()->OneConstant()); |
environment()->BindAccumulator(node, &states); |