| Index: runtime/vm/flow_graph_optimizer.cc
|
| diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
|
| index 555b8598e51571e389ed344f8a44353ab0e6b69b..6a7979751f6607959a3ac304e7d24714ac496c41 100644
|
| --- a/runtime/vm/flow_graph_optimizer.cc
|
| +++ b/runtime/vm/flow_graph_optimizer.cc
|
| @@ -3161,8 +3161,7 @@ void LICM::Optimize() {
|
| !it.Done();
|
| it.Advance()) {
|
| Instruction* current = it.Current();
|
| - if (!current->IsPushArgument() &&
|
| - current->AllowsCSE() &&
|
| + if (current->AllowsCSE() &&
|
| flow_graph()->block_effects()->CanBeMovedTo(current, pre_header)) {
|
| bool inputs_loop_invariant = true;
|
| for (int i = 0; i < current->InputCount(); ++i) {
|
| @@ -4376,6 +4375,11 @@ void ConstantPropagator::VisitPhi(PhiInstr* instr) {
|
| }
|
|
|
|
|
| +void ConstantPropagator::VisitRedefinition(RedefinitionInstr* instr) {
|
| + SetValue(instr, instr->value()->definition()->constant_value());
|
| +}
|
| +
|
| +
|
| void ConstantPropagator::VisitParameter(ParameterInstr* instr) {
|
| SetValue(instr, non_constant_);
|
| }
|
| @@ -4650,6 +4654,11 @@ void ConstantPropagator::VisitLoadUntagged(LoadUntaggedInstr* instr) {
|
| }
|
|
|
|
|
| +void ConstantPropagator::VisitLoadClassId(LoadClassIdInstr* instr) {
|
| + SetValue(instr, non_constant_);
|
| +}
|
| +
|
| +
|
| void ConstantPropagator::VisitLoadField(LoadFieldInstr* instr) {
|
| if ((instr->recognized_kind() == MethodRecognizer::kObjectArrayLength) &&
|
| (instr->value()->definition()->IsCreateArray())) {
|
|
|