| Index: runtime/vm/intermediate_language.cc
|
| diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
|
| index fcd6bc13a8a79d6ac03a24f755d3546b177b5def..7d077cdc90bdcd21073a503aa7f6a49a114f33bb 100644
|
| --- a/runtime/vm/intermediate_language.cc
|
| +++ b/runtime/vm/intermediate_language.cc
|
| @@ -96,14 +96,6 @@ void ForwardInstructionIterator::RemoveCurrentFromGraph() {
|
| }
|
|
|
|
|
| -// True iff. the v2 is above v1 on stack, or one of them is constant.
|
| -static bool VerifyValues(Value* v1, Value* v2) {
|
| - ASSERT(v1->IsUse() && v2->IsUse());
|
| - return (v1->AsUse()->definition()->temp_index() + 1) ==
|
| - v2->AsUse()->definition()->temp_index();
|
| -}
|
| -
|
| -
|
| // Default implementation of visiting basic blocks. Can be overridden.
|
| void FlowGraphVisitor::VisitBlocks() {
|
| for (intptr_t i = 0; i < block_order_.length(); ++i) {
|
| @@ -392,25 +384,29 @@ intptr_t JoinEntryInstr::IndexOfPredecessor(BlockEntryInstr* pred) const {
|
|
|
|
|
| // ==== Recording assigned variables.
|
| -void Computation::RecordAssignedVars(BitVector* assigned_vars) {
|
| +void Computation::RecordAssignedVars(BitVector* assigned_vars,
|
| + intptr_t fixed_parameter_count) {
|
| // Nothing to do for the base class.
|
| }
|
|
|
|
|
| -void StoreLocalComp::RecordAssignedVars(BitVector* assigned_vars) {
|
| +void StoreLocalComp::RecordAssignedVars(BitVector* assigned_vars,
|
| + intptr_t fixed_parameter_count) {
|
| if (!local().is_captured()) {
|
| - assigned_vars->Add(local().BitIndexIn(assigned_vars->length()));
|
| + assigned_vars->Add(local().BitIndexIn(fixed_parameter_count));
|
| }
|
| }
|
|
|
|
|
| -void Instruction::RecordAssignedVars(BitVector* assigned_vars) {
|
| +void Instruction::RecordAssignedVars(BitVector* assigned_vars,
|
| + intptr_t fixed_parameter_count) {
|
| // Nothing to do for the base class.
|
| }
|
|
|
|
|
| -void BindInstr::RecordAssignedVars(BitVector* assigned_vars) {
|
| - computation()->RecordAssignedVars(assigned_vars);
|
| +void BindInstr::RecordAssignedVars(BitVector* assigned_vars,
|
| + intptr_t fixed_parameter_count) {
|
| + computation()->RecordAssignedVars(assigned_vars, fixed_parameter_count);
|
| }
|
|
|
|
|
| @@ -421,7 +417,8 @@ void GraphEntryInstr::DiscoverBlocks(
|
| GrowableArray<BlockEntryInstr*>* postorder,
|
| GrowableArray<intptr_t>* parent,
|
| GrowableArray<BitVector*>* assigned_vars,
|
| - intptr_t variable_count) {
|
| + intptr_t variable_count,
|
| + intptr_t fixed_parameter_count) {
|
| // We only visit this block once, first of all blocks.
|
| ASSERT(preorder_number() == -1);
|
| ASSERT(current_block == NULL);
|
| @@ -445,10 +442,12 @@ void GraphEntryInstr::DiscoverBlocks(
|
| // must visit the normal entry last.
|
| for (intptr_t i = catch_entries_.length() - 1; i >= 0; --i) {
|
| catch_entries_[i]->DiscoverBlocks(this, preorder, postorder,
|
| - parent, assigned_vars, variable_count);
|
| + parent, assigned_vars,
|
| + variable_count, fixed_parameter_count);
|
| }
|
| normal_entry_->DiscoverBlocks(this, preorder, postorder,
|
| - parent, assigned_vars, variable_count);
|
| + parent, assigned_vars,
|
| + variable_count, fixed_parameter_count);
|
|
|
| // Assign postorder number.
|
| set_postorder_number(postorder->length());
|
| @@ -463,7 +462,8 @@ void BlockEntryInstr::DiscoverBlocks(
|
| GrowableArray<BlockEntryInstr*>* postorder,
|
| GrowableArray<intptr_t>* parent,
|
| GrowableArray<BitVector*>* assigned_vars,
|
| - intptr_t variable_count) {
|
| + intptr_t variable_count,
|
| + intptr_t fixed_parameter_count) {
|
| // We have already visited the graph entry, so we can assume current_block
|
| // is non-null and preorder array is non-empty.
|
| ASSERT(current_block != NULL);
|
| @@ -503,7 +503,9 @@ void BlockEntryInstr::DiscoverBlocks(
|
| while ((next_instr != NULL) &&
|
| !next_instr->IsBlockEntry() &&
|
| !next_instr->IsBranch()) {
|
| - if (vars != NULL) next_instr->RecordAssignedVars(vars);
|
| + if (vars != NULL) {
|
| + next_instr->RecordAssignedVars(vars, fixed_parameter_count);
|
| + }
|
| set_last_instruction(next_instr);
|
| GotoInstr* goto_instr = next_instr->AsGoto();
|
| next_instr =
|
| @@ -512,7 +514,8 @@ void BlockEntryInstr::DiscoverBlocks(
|
| }
|
| if (next_instr != NULL) {
|
| next_instr->DiscoverBlocks(this, preorder, postorder,
|
| - parent, assigned_vars, variable_count);
|
| + parent, assigned_vars,
|
| + variable_count, fixed_parameter_count);
|
| }
|
|
|
| // 6. Assign postorder number and add the block entry to the list.
|
| @@ -527,7 +530,8 @@ void BranchInstr::DiscoverBlocks(
|
| GrowableArray<BlockEntryInstr*>* postorder,
|
| GrowableArray<intptr_t>* parent,
|
| GrowableArray<BitVector*>* assigned_vars,
|
| - intptr_t variable_count) {
|
| + intptr_t variable_count,
|
| + intptr_t fixed_parameter_count) {
|
| current_block->set_last_instruction(this);
|
| // Visit the false successor before the true successor so they appear in
|
| // true/false order in reverse postorder used as the block ordering in the
|
| @@ -535,9 +539,11 @@ void BranchInstr::DiscoverBlocks(
|
| ASSERT(true_successor_ != NULL);
|
| ASSERT(false_successor_ != NULL);
|
| false_successor_->DiscoverBlocks(current_block, preorder, postorder,
|
| - parent, assigned_vars, variable_count);
|
| + parent, assigned_vars,
|
| + variable_count, fixed_parameter_count);
|
| true_successor_->DiscoverBlocks(current_block, preorder, postorder,
|
| - parent, assigned_vars, variable_count);
|
| + parent, assigned_vars,
|
| + variable_count, fixed_parameter_count);
|
| }
|
|
|
|
|
| @@ -956,7 +962,6 @@ LocationSummary* StoreInstanceFieldComp::MakeLocationSummary() const {
|
|
|
|
|
| void StoreInstanceFieldComp::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| - ASSERT(VerifyValues(instance(), value()));
|
| Register instance_reg = locs()->in(0).reg();
|
| Register value_reg = locs()->in(1).reg();
|
|
|
|
|