Chromium Code Reviews| Index: runtime/vm/intermediate_language.cc |
| diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc |
| index 7b4d3853473e7bdbf4a41ae00f126bc9f9374024..3def3d48b8dd69453d182ecb029718648e5175ab 100644 |
| --- a/runtime/vm/intermediate_language.cc |
| +++ b/runtime/vm/intermediate_language.cc |
| @@ -805,7 +805,13 @@ void Definition::ReplaceWith(Definition* other, |
| ReplaceUsesWith(other); |
| // Reuse this instruction's SSA name for other. |
| ASSERT(!other->HasSSATemp()); |
| - if (HasSSATemp()) other->set_ssa_temp_index(ssa_temp_index()); |
| + if (HasSSATemp()) { |
| + other->set_ssa_temp_index(ssa_temp_index()); |
| + if (RequiresPairSSAIndex()) { |
| + ASSERT(other->RequiresPairSSAIndex()); |
| + other->set_pair_ssa_index(pair_ssa_index()); |
| + } |
| + } |
| // Finally insert the other definition in place of this one in the graph. |
| previous()->LinkTo(other); |
| @@ -3213,6 +3219,39 @@ const RuntimeEntry& MathUnaryInstr::TargetFunction() const { |
| } |
| +MergedMath2Instr::MergedMath2Instr(ZoneGrowableArray<Value*>* inputs, |
| + intptr_t original_deopt_id, |
| + MergedMath2Instr::Kind kind) |
| + : inputs_(inputs), |
|
Florian Schneider
2014/04/04 11:52:46
pair_ssa_index_ is uninitialized.
Cutch
2014/04/04 16:34:46
Done.
|
| + kind_(kind) { |
| + ASSERT(inputs_->length() == InputCountFor(kind_)); |
| + for (intptr_t i = 0; i < inputs_->length(); ++i) { |
| + ASSERT((*inputs)[i] != NULL); |
| + (*inputs)[i]->set_instruction(this); |
| + (*inputs)[i]->set_use_index(i); |
| + } |
| + deopt_id_ = original_deopt_id; |
| +} |
| + |
| + |
| +intptr_t MergedMath2Instr::OutputIndexOf(intptr_t kind) { |
| + switch (kind) { |
| + case MethodRecognizer::kMathSin: return 1; |
| + case MethodRecognizer::kMathCos: return 0; |
| + default: UNIMPLEMENTED(); return -1; |
| + } |
| +} |
| + |
| + |
| +intptr_t MergedMath2Instr::OutputIndexOf(Token::Kind token) { |
| + switch (token) { |
| + case Token::kTRUNCDIV: return 0; |
| + case Token::kMOD: return 1; |
| + default: UNIMPLEMENTED(); return -1; |
| + } |
| +} |
| + |
| + |
| MergedMathInstr::MergedMathInstr(ZoneGrowableArray<Value*>* inputs, |
| intptr_t original_deopt_id, |
| MergedMathInstr::Kind kind) |