Index: runtime/vm/intermediate_language.h |
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h |
index 98dedc4f7a7429b571f76706347cdbdea3172a12..fe0130307e20ef5a6a6bebfcff58191762e9717e 100644 |
--- a/runtime/vm/intermediate_language.h |
+++ b/runtime/vm/intermediate_language.h |
@@ -146,7 +146,8 @@ class Computation : public ZoneAllocated { |
// Mutate assigned_vars to add the local variable index for all |
// frame-allocated locals assigned to by the computation. |
- virtual void RecordAssignedVars(BitVector* assigned_vars); |
+ virtual void RecordAssignedVars(BitVector* assigned_vars, |
+ intptr_t fixed_parameter_count); |
virtual const char* DebugName() const = 0; |
@@ -772,7 +773,8 @@ class StoreLocalComp : public TemplateComputation<1> { |
Value* value() const { return inputs_[0]; } |
intptr_t context_level() const { return context_level_; } |
- virtual void RecordAssignedVars(BitVector* assigned_vars); |
+ virtual void RecordAssignedVars(BitVector* assigned_vars, |
+ intptr_t fixed_parameter_count); |
virtual void PrintOperandsTo(BufferFormatter* f) const; |
@@ -1794,14 +1796,16 @@ class Instruction : public ZoneAllocated { |
GrowableArray<BlockEntryInstr*>* postorder, |
GrowableArray<intptr_t>* parent, |
GrowableArray<BitVector*>* assigned_vars, |
- intptr_t variable_count) { |
+ intptr_t variable_count, |
+ intptr_t fixed_parameter_count) { |
// Never called for instructions except block entries and branches. |
UNREACHABLE(); |
} |
// Mutate assigned_vars to add the local variable index for all |
// frame-allocated locals assigned to by the instruction. |
- virtual void RecordAssignedVars(BitVector* assigned_vars); |
+ virtual void RecordAssignedVars(BitVector* assigned_vars, |
+ intptr_t fixed_parameter_count); |
// Printing support. |
virtual void PrintTo(BufferFormatter* f) const = 0; |
@@ -1918,7 +1922,8 @@ class BlockEntryInstr : public Instruction { |
GrowableArray<BlockEntryInstr*>* postorder, |
GrowableArray<intptr_t>* parent, |
GrowableArray<BitVector*>* assigned_vars, |
- intptr_t variable_count); |
+ intptr_t variable_count, |
+ intptr_t fixed_parameter_count); |
protected: |
BlockEntryInstr() |
@@ -2000,7 +2005,8 @@ class GraphEntryInstr : public BlockEntryInstr { |
: BlockEntryInstr(), |
normal_entry_(normal_entry), |
catch_entries_(), |
- start_env_(NULL) { } |
+ start_env_(NULL), |
+ spill_slot_count_(0) { } |
DECLARE_INSTRUCTION(GraphEntry) |
@@ -2020,7 +2026,8 @@ class GraphEntryInstr : public BlockEntryInstr { |
GrowableArray<BlockEntryInstr*>* postorder, |
GrowableArray<intptr_t>* parent, |
GrowableArray<BitVector*>* assigned_vars, |
- intptr_t variable_count); |
+ intptr_t variable_count, |
+ intptr_t fixed_parameter_count); |
void AddCatchEntry(TargetEntryInstr* entry) { catch_entries_.Add(entry); } |
@@ -2029,10 +2036,17 @@ class GraphEntryInstr : public BlockEntryInstr { |
Environment* start_env() const { return start_env_; } |
void set_start_env(Environment* env) { start_env_ = env; } |
+ intptr_t spill_slot_count() const { return spill_slot_count_; } |
+ void set_spill_slot_count(intptr_t count) { |
+ ASSERT(count >= 0); |
+ spill_slot_count_ = count; |
+ } |
+ |
private: |
TargetEntryInstr* normal_entry_; |
GrowableArray<TargetEntryInstr*> catch_entries_; |
Environment* start_env_; |
+ intptr_t spill_slot_count_; |
DISALLOW_COPY_AND_ASSIGN(GraphEntryInstr); |
}; |
@@ -2175,7 +2189,8 @@ class BindInstr : public Definition { |
return computation()->StaticType(); |
} |
- virtual void RecordAssignedVars(BitVector* assigned_vars); |
+ virtual void RecordAssignedVars(BitVector* assigned_vars, |
+ intptr_t fixed_parameter_count); |
virtual LocationSummary* locs() { |
return computation()->locs(); |
@@ -2385,7 +2400,8 @@ class BranchInstr : public InstructionWithInputs { |
GrowableArray<BlockEntryInstr*>* postorder, |
GrowableArray<intptr_t>* parent, |
GrowableArray<BitVector*>* assigned_vars, |
- intptr_t variable_count); |
+ intptr_t variable_count, |
+ intptr_t fixed_parameter_count); |
virtual LocationSummary* MakeLocationSummary() const; |
@@ -2500,8 +2516,11 @@ class Environment : public ZoneAllocated { |
// TODO(vegorov): it's absolutely crucial that locations_ backing store |
// is preallocated and never reallocated. We use pointers into it |
// during register allocation. |
- explicit Environment(const GrowableArray<Value*>& values) |
- : values_(values.length()), locations_(values.length()) { |
+ explicit Environment(const GrowableArray<Value*>& values, |
+ intptr_t fixed_parameter_count) |
+ : values_(values.length()), |
+ locations_(values.length()), |
+ fixed_parameter_count_(fixed_parameter_count) { |
values_.AddArray(values); |
} |
@@ -2521,11 +2540,17 @@ class Environment : public ZoneAllocated { |
return & locations_[ix]; |
} |
+ intptr_t fixed_parameter_count() const { |
+ return fixed_parameter_count_; |
+ } |
+ |
void PrintTo(BufferFormatter* f) const; |
private: |
GrowableArray<Value*> values_; |
GrowableArray<Location> locations_; |
+ const intptr_t fixed_parameter_count_; |
+ |
DISALLOW_COPY_AND_ASSIGN(Environment); |
}; |