[turbofan] Remove eager frame state from divisions.
This removes the frame state input representing the before-state from nodes having the {JSDivide} or the {JSModulus} operator. Lowering that inserts number conversions of the inputs has to be disabled when deoptimization is enabled, because the frame state layout is no longer known. R=jarin@chromium.org BUG=v8:5021 Review-Url: https://codereview.chromium.org/2121153003 Cr-Commit-Position: refs/heads/master@{#37608}
This commit is contained in:
parent
4d631c8cd9
commit
b1cbb98387
@ -486,22 +486,6 @@ Reduction JSTypedLowering::ReduceJSAdd(Node* node) {
|
||||
}
|
||||
|
||||
|
||||
Reduction JSTypedLowering::ReduceJSModulus(Node* node) {
|
||||
if (flags() & kDisableBinaryOpReduction) return NoChange();
|
||||
JSBinopReduction r(this, node);
|
||||
if (r.BothInputsAre(Type::Number())) {
|
||||
// JSModulus(x:number, x:number) => NumberModulus(x, y)
|
||||
return r.ChangeToPureOperator(simplified()->NumberModulus(),
|
||||
Type::Number());
|
||||
}
|
||||
BinaryOperationHints::Hint feedback = r.GetNumberBinaryOperationFeedback();
|
||||
if (feedback != BinaryOperationHints::kAny) {
|
||||
return r.ChangeToSpeculativeOperator(
|
||||
simplified()->SpeculativeNumberModulus(feedback), Type::Number());
|
||||
}
|
||||
return NoChange();
|
||||
}
|
||||
|
||||
Reduction JSTypedLowering::ReduceJSSubtract(Node* node) {
|
||||
if (flags() & kDisableBinaryOpReduction) return NoChange();
|
||||
JSBinopReduction r(this, node);
|
||||
@ -534,7 +518,6 @@ Reduction JSTypedLowering::ReduceJSSubtract(Node* node) {
|
||||
Reduction JSTypedLowering::ReduceJSMultiply(Node* node) {
|
||||
if (flags() & kDisableBinaryOpReduction) return NoChange();
|
||||
JSBinopReduction r(this, node);
|
||||
|
||||
BinaryOperationHints::Hint feedback = r.GetNumberBinaryOperationFeedback();
|
||||
if (feedback != BinaryOperationHints::kAny) {
|
||||
return r.ChangeToSpeculativeOperator(
|
||||
@ -560,10 +543,32 @@ Reduction JSTypedLowering::ReduceJSDivide(Node* node) {
|
||||
return r.ChangeToSpeculativeOperator(
|
||||
simplified()->SpeculativeNumberDivide(feedback), Type::Number());
|
||||
}
|
||||
r.ConvertInputsToNumber();
|
||||
return r.ChangeToPureOperator(simplified()->NumberDivide(), Type::Number());
|
||||
|
||||
// If deoptimization is enabled we rely on type feedback.
|
||||
if (r.BothInputsAre(Type::PlainPrimitive()) ||
|
||||
!(flags() & kDeoptimizationEnabled)) {
|
||||
r.ConvertInputsToNumber();
|
||||
return r.ChangeToPureOperator(simplified()->NumberDivide(), Type::Number());
|
||||
}
|
||||
|
||||
return NoChange();
|
||||
}
|
||||
|
||||
Reduction JSTypedLowering::ReduceJSModulus(Node* node) {
|
||||
if (flags() & kDisableBinaryOpReduction) return NoChange();
|
||||
JSBinopReduction r(this, node);
|
||||
if (r.BothInputsAre(Type::Number())) {
|
||||
// JSModulus(x:number, x:number) => NumberModulus(x, y)
|
||||
return r.ChangeToPureOperator(simplified()->NumberModulus(),
|
||||
Type::Number());
|
||||
}
|
||||
BinaryOperationHints::Hint feedback = r.GetNumberBinaryOperationFeedback();
|
||||
if (feedback != BinaryOperationHints::kAny) {
|
||||
return r.ChangeToSpeculativeOperator(
|
||||
simplified()->SpeculativeNumberModulus(feedback), Type::Number());
|
||||
}
|
||||
return NoChange();
|
||||
}
|
||||
|
||||
Reduction JSTypedLowering::ReduceInt32Binop(Node* node, const Operator* intOp) {
|
||||
if (flags() & kDisableBinaryOpReduction) return NoChange();
|
||||
|
@ -39,6 +39,8 @@ int OperatorProperties::GetFrameStateInputCount(const Operator* op) {
|
||||
case IrOpcode::kJSAdd:
|
||||
case IrOpcode::kJSSubtract:
|
||||
case IrOpcode::kJSMultiply:
|
||||
case IrOpcode::kJSDivide:
|
||||
case IrOpcode::kJSModulus:
|
||||
|
||||
// Compare operations
|
||||
case IrOpcode::kJSEqual:
|
||||
@ -91,8 +93,6 @@ int OperatorProperties::GetFrameStateInputCount(const Operator* op) {
|
||||
case IrOpcode::kJSBitwiseAnd:
|
||||
case IrOpcode::kJSBitwiseOr:
|
||||
case IrOpcode::kJSBitwiseXor:
|
||||
case IrOpcode::kJSDivide:
|
||||
case IrOpcode::kJSModulus:
|
||||
case IrOpcode::kJSShiftLeft:
|
||||
case IrOpcode::kJSShiftRight:
|
||||
case IrOpcode::kJSShiftRightLogical:
|
||||
|
Loading…
Reference in New Issue
Block a user