| Index: src/compiler/generic-node-inl.h
|
| diff --git a/src/compiler/generic-node-inl.h b/src/compiler/generic-node-inl.h
|
| index 76313af514b644a0a96a44419317ee9034f7d3bc..30f8f680938125e19b5dcd7d1fd95732a4000cf9 100644
|
| --- a/src/compiler/generic-node-inl.h
|
| +++ b/src/compiler/generic-node-inl.h
|
| @@ -16,13 +16,16 @@ namespace internal {
|
| namespace compiler {
|
|
|
| template <class B, class S>
|
| -GenericNode<B, S>::GenericNode(GenericGraphBase* graph, int input_count)
|
| +GenericNode<B, S>::GenericNode(GenericGraphBase* graph, int input_count,
|
| + int reserve_input_count)
|
| : BaseClass(graph->zone()),
|
| input_count_(input_count),
|
| + reserve_input_count_(reserve_input_count),
|
| has_appendable_inputs_(false),
|
| use_count_(0),
|
| first_use_(NULL),
|
| last_use_(NULL) {
|
| + DCHECK(reserve_input_count <= kMaxReservedInputs);
|
| inputs_.static_ = reinterpret_cast<Input*>(this + 1);
|
| AssignUniqueID(graph);
|
| }
|
| @@ -154,12 +157,18 @@ void GenericNode<B, S>::EnsureAppendableInputs(Zone* zone) {
|
|
|
| template <class B, class S>
|
| void GenericNode<B, S>::AppendInput(Zone* zone, GenericNode<B, S>* to_append) {
|
| - EnsureAppendableInputs(zone);
|
| Use* new_use = new (zone) Use;
|
| Input new_input;
|
| new_input.to = to_append;
|
| new_input.use = new_use;
|
| - inputs_.appendable_->push_back(new_input);
|
| + if (reserve_input_count_ > 0) {
|
| + DCHECK(!has_appendable_inputs_);
|
| + reserve_input_count_--;
|
| + inputs_.static_[input_count_] = new_input;
|
| + } else {
|
| + EnsureAppendableInputs(zone);
|
| + inputs_.appendable_->push_back(new_input);
|
| + }
|
| new_use->input_index = input_count_;
|
| new_use->from = this;
|
| to_append->AppendUse(new_use);
|
| @@ -224,15 +233,17 @@ inline bool GenericNode<B, S>::OwnedBy(GenericNode* owner) const {
|
| }
|
|
|
| template <class B, class S>
|
| -S* GenericNode<B, S>::New(GenericGraphBase* graph, int input_count,
|
| - S** inputs) {
|
| +S* GenericNode<B, S>::New(GenericGraphBase* graph, int input_count, S** inputs,
|
| + bool has_extensible_inputs) {
|
| size_t node_size = sizeof(GenericNode);
|
| - size_t inputs_size = input_count * sizeof(Input);
|
| + size_t reserve_input_count =
|
| + has_extensible_inputs ? kDefaultReservedInputs : 0;
|
| + size_t inputs_size = (input_count + reserve_input_count) * sizeof(Input);
|
| size_t uses_size = input_count * sizeof(Use);
|
| int size = static_cast<int>(node_size + inputs_size + uses_size);
|
| Zone* zone = graph->zone();
|
| void* buffer = zone->New(size);
|
| - S* result = new (buffer) S(graph, input_count);
|
| + S* result = new (buffer) S(graph, input_count, reserve_input_count);
|
| Input* input =
|
| reinterpret_cast<Input*>(reinterpret_cast<char*>(buffer) + node_size);
|
| Use* use =
|
|
|