summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/generic-node-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/generic-node-inl.h')
-rw-r--r--deps/v8/src/compiler/generic-node-inl.h17
1 files changed, 14 insertions, 3 deletions
diff --git a/deps/v8/src/compiler/generic-node-inl.h b/deps/v8/src/compiler/generic-node-inl.h
index 51d1a50162..c2dc24ee83 100644
--- a/deps/v8/src/compiler/generic-node-inl.h
+++ b/deps/v8/src/compiler/generic-node-inl.h
@@ -64,12 +64,13 @@ void GenericNode<B, S>::ReplaceUses(GenericNode* replace_to) {
if (replace_to->last_use_ == NULL) {
DCHECK_EQ(NULL, replace_to->first_use_);
replace_to->first_use_ = first_use_;
- } else {
+ replace_to->last_use_ = last_use_;
+ } else if (first_use_ != NULL) {
DCHECK_NE(NULL, replace_to->first_use_);
replace_to->last_use_->next = first_use_;
first_use_->prev = replace_to->last_use_;
+ replace_to->last_use_ = last_use_;
}
- replace_to->last_use_ = last_use_;
replace_to->use_count_ += use_count_;
use_count_ = 0;
first_use_ = NULL;
@@ -141,7 +142,7 @@ template <class B, class S>
void GenericNode<B, S>::EnsureAppendableInputs(Zone* zone) {
if (!has_appendable_inputs_) {
void* deque_buffer = zone->New(sizeof(InputDeque));
- InputDeque* deque = new (deque_buffer) InputDeque(ZoneInputAllocator(zone));
+ InputDeque* deque = new (deque_buffer) InputDeque(zone);
for (int i = 0; i < input_count_; ++i) {
deque->push_back(inputs_.static_[i]);
}
@@ -177,6 +178,16 @@ void GenericNode<B, S>::InsertInput(Zone* zone, int index,
}
template <class B, class S>
+void GenericNode<B, S>::RemoveInput(int index) {
+ DCHECK(index >= 0 && index < InputCount());
+ // TODO(turbofan): Optimize this implementation!
+ for (; index < InputCount() - 1; ++index) {
+ ReplaceInput(index, InputAt(index + 1));
+ }
+ TrimInputCount(InputCount() - 1);
+}
+
+template <class B, class S>
void GenericNode<B, S>::AppendUse(Use* use) {
use->next = NULL;
use->prev = last_use_;