diff options
Diffstat (limited to 'deps/v8/src/compiler/node-properties-inl.h')
-rw-r--r-- | deps/v8/src/compiler/node-properties-inl.h | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/deps/v8/src/compiler/node-properties-inl.h b/deps/v8/src/compiler/node-properties-inl.h index 2d63b0cc1b..3f6d53105b 100644 --- a/deps/v8/src/compiler/node-properties-inl.h +++ b/deps/v8/src/compiler/node-properties-inl.h @@ -8,6 +8,7 @@ #include "src/v8.h" #include "src/compiler/common-operator.h" +#include "src/compiler/generic-node-inl.h" #include "src/compiler/node-properties.h" #include "src/compiler/opcodes.h" #include "src/compiler/operator.h" @@ -29,10 +30,14 @@ inline int NodeProperties::FirstContextIndex(Node* node) { return PastValueIndex(node); } -inline int NodeProperties::FirstEffectIndex(Node* node) { +inline int NodeProperties::FirstFrameStateIndex(Node* node) { return PastContextIndex(node); } +inline int NodeProperties::FirstEffectIndex(Node* node) { + return PastFrameStateIndex(node); +} + inline int NodeProperties::FirstControlIndex(Node* node) { return PastEffectIndex(node); } @@ -48,6 +53,11 @@ inline int NodeProperties::PastContextIndex(Node* node) { OperatorProperties::GetContextInputCount(node->op()); } +inline int NodeProperties::PastFrameStateIndex(Node* node) { + return FirstFrameStateIndex(node) + + OperatorProperties::GetFrameStateInputCount(node->op()); +} + inline int NodeProperties::PastEffectIndex(Node* node) { return FirstEffectIndex(node) + OperatorProperties::GetEffectInputCount(node->op()); @@ -73,6 +83,11 @@ inline Node* NodeProperties::GetContextInput(Node* node) { return node->InputAt(FirstContextIndex(node)); } +inline Node* NodeProperties::GetFrameStateInput(Node* node) { + DCHECK(OperatorProperties::HasFrameStateInput(node->op())); + return node->InputAt(FirstFrameStateIndex(node)); +} + inline Node* NodeProperties::GetEffectInput(Node* node, int index) { DCHECK(0 <= index && index < OperatorProperties::GetEffectInputCount(node->op())); @@ -85,6 +100,10 @@ inline Node* NodeProperties::GetControlInput(Node* node, int index) { return node->InputAt(FirstControlIndex(node) + index); } +inline int NodeProperties::GetFrameStateIndex(Node* node) { + DCHECK(OperatorProperties::HasFrameStateInput(node->op())); + return FirstFrameStateIndex(node); +} // ----------------------------------------------------------------------------- // Edge kinds. @@ -143,11 +162,39 @@ inline void NodeProperties::ReplaceEffectInput(Node* node, Node* effect, return node->ReplaceInput(FirstEffectIndex(node) + index, effect); } +inline void NodeProperties::ReplaceFrameStateInput(Node* node, + Node* frame_state) { + DCHECK(OperatorProperties::HasFrameStateInput(node->op())); + node->ReplaceInput(FirstFrameStateIndex(node), frame_state); +} + inline void NodeProperties::RemoveNonValueInputs(Node* node) { node->TrimInputCount(OperatorProperties::GetValueInputCount(node->op())); } +// Replace value uses of {node} with {value} and effect uses of {node} with +// {effect}. If {effect == NULL}, then use the effect input to {node}. +inline void NodeProperties::ReplaceWithValue(Node* node, Node* value, + Node* effect) { + DCHECK(!OperatorProperties::HasControlOutput(node->op())); + if (effect == NULL && OperatorProperties::HasEffectInput(node->op())) { + effect = NodeProperties::GetEffectInput(node); + } + + // Requires distinguishing between value and effect edges. + UseIter iter = node->uses().begin(); + while (iter != node->uses().end()) { + if (NodeProperties::IsEffectEdge(iter.edge())) { + DCHECK_NE(NULL, effect); + iter = iter.UpdateToAndIncrement(effect); + } else { + iter = iter.UpdateToAndIncrement(value); + } + } +} + + // ----------------------------------------------------------------------------- // Type Bounds. |