Commit bfdaff31 authored by bmeurer's avatar bmeurer Committed by Commit bot

[turbofan] The speculative number operations don't produce control.

The simplified SpeculativeNumber operators shouldn't be in the control
chain at all. They are part of the effect chain to ensure that we can
find a frame state for eager deoptimization.

R=jarin@chromium.org

Review-Url: https://codereview.chromium.org/2083503002
Cr-Commit-Position: refs/heads/master@{#37098}
parent ecc760a0
...@@ -147,7 +147,7 @@ class JSBinopReduction final { ...@@ -147,7 +147,7 @@ class JSBinopReduction final {
DCHECK_EQ(1, op->EffectOutputCount()); DCHECK_EQ(1, op->EffectOutputCount());
DCHECK_EQ(false, OperatorProperties::HasContextInput(op)); DCHECK_EQ(false, OperatorProperties::HasContextInput(op));
DCHECK_EQ(1, op->ControlInputCount()); DCHECK_EQ(1, op->ControlInputCount());
DCHECK_EQ(1, op->ControlOutputCount()); DCHECK_EQ(0, op->ControlOutputCount());
DCHECK_EQ(0, OperatorProperties::GetFrameStateInputCount(op)); DCHECK_EQ(0, OperatorProperties::GetFrameStateInputCount(op));
DCHECK_EQ(2, op->ValueInputCount()); DCHECK_EQ(2, op->ValueInputCount());
...@@ -165,7 +165,7 @@ class JSBinopReduction final { ...@@ -165,7 +165,7 @@ class JSBinopReduction final {
DCHECK(!user->IsDead()); DCHECK(!user->IsDead());
if (NodeProperties::IsControlEdge(edge)) { if (NodeProperties::IsControlEdge(edge)) {
if (user->opcode() == IrOpcode::kIfSuccess) { if (user->opcode() == IrOpcode::kIfSuccess) {
user->ReplaceUses(node_); user->ReplaceUses(NodeProperties::GetControlInput(node_));
user->Kill(); user->Kill();
} else { } else {
DCHECK_EQ(user->opcode(), IrOpcode::kIfException); DCHECK_EQ(user->opcode(), IrOpcode::kIfException);
......
...@@ -524,7 +524,7 @@ const Operator* SimplifiedOperatorBuilder::StoreBuffer(BufferAccess access) { ...@@ -524,7 +524,7 @@ const Operator* SimplifiedOperatorBuilder::StoreBuffer(BufferAccess access) {
BinaryOperationHints::Hint hint) { \ BinaryOperationHints::Hint hint) { \
return new (zone()) Operator1<BinaryOperationHints::Hint>( \ return new (zone()) Operator1<BinaryOperationHints::Hint>( \
IrOpcode::k##Name, Operator::kFoldable | Operator::kNoThrow, #Name, 2, \ IrOpcode::k##Name, Operator::kFoldable | Operator::kNoThrow, #Name, 2, \
1, 1, 1, 1, 1, hint); \ 1, 1, 1, 1, 0, hint); \
} }
SPECULATIVE_BINOP_LIST(SPECULATIVE_BINOP_DEF) SPECULATIVE_BINOP_LIST(SPECULATIVE_BINOP_DEF)
#undef SPECULATIVE_BINOP_DEF #undef SPECULATIVE_BINOP_DEF
...@@ -534,7 +534,7 @@ const Operator* SimplifiedOperatorBuilder::SpeculativeNumberEqual( ...@@ -534,7 +534,7 @@ const Operator* SimplifiedOperatorBuilder::SpeculativeNumberEqual(
return new (zone()) Operator1<CompareOperationHints::Hint>( return new (zone()) Operator1<CompareOperationHints::Hint>(
IrOpcode::kSpeculativeNumberEqual, IrOpcode::kSpeculativeNumberEqual,
Operator::kFoldable | Operator::kNoThrow, "SpeculativeNumberEqual", 2, 1, Operator::kFoldable | Operator::kNoThrow, "SpeculativeNumberEqual", 2, 1,
1, 1, 1, 1, hint); 1, 1, 1, 0, hint);
} }
const Operator* SimplifiedOperatorBuilder::SpeculativeNumberLessThan( const Operator* SimplifiedOperatorBuilder::SpeculativeNumberLessThan(
...@@ -542,7 +542,7 @@ const Operator* SimplifiedOperatorBuilder::SpeculativeNumberLessThan( ...@@ -542,7 +542,7 @@ const Operator* SimplifiedOperatorBuilder::SpeculativeNumberLessThan(
return new (zone()) Operator1<CompareOperationHints::Hint>( return new (zone()) Operator1<CompareOperationHints::Hint>(
IrOpcode::kSpeculativeNumberLessThan, IrOpcode::kSpeculativeNumberLessThan,
Operator::kFoldable | Operator::kNoThrow, "SpeculativeNumberLessThan", 2, Operator::kFoldable | Operator::kNoThrow, "SpeculativeNumberLessThan", 2,
1, 1, 1, 1, 1, hint); 1, 1, 1, 1, 0, hint);
} }
const Operator* SimplifiedOperatorBuilder::SpeculativeNumberLessThanOrEqual( const Operator* SimplifiedOperatorBuilder::SpeculativeNumberLessThanOrEqual(
...@@ -550,7 +550,7 @@ const Operator* SimplifiedOperatorBuilder::SpeculativeNumberLessThanOrEqual( ...@@ -550,7 +550,7 @@ const Operator* SimplifiedOperatorBuilder::SpeculativeNumberLessThanOrEqual(
return new (zone()) Operator1<CompareOperationHints::Hint>( return new (zone()) Operator1<CompareOperationHints::Hint>(
IrOpcode::kSpeculativeNumberLessThanOrEqual, IrOpcode::kSpeculativeNumberLessThanOrEqual,
Operator::kFoldable | Operator::kNoThrow, Operator::kFoldable | Operator::kNoThrow,
"SpeculativeNumberLessThanOrEqual", 2, 1, 1, 1, 1, 1, hint); "SpeculativeNumberLessThanOrEqual", 2, 1, 1, 1, 1, 0, hint);
} }
#define ACCESS_OP_LIST(V) \ #define ACCESS_OP_LIST(V) \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment