Index: runtime/vm/flow_graph_type_propagator.cc |
diff --git a/runtime/vm/flow_graph_type_propagator.cc b/runtime/vm/flow_graph_type_propagator.cc |
index 2162cfed4e9f175bcd6d3796fc75963cf9353261..d0dd61b37f2dd333fc54cb80eecabf9e6c72fb4c 100644 |
--- a/runtime/vm/flow_graph_type_propagator.cc |
+++ b/runtime/vm/flow_graph_type_propagator.cc |
@@ -216,9 +216,8 @@ void FlowGraphTypePropagator::VisitValue(Value* value) { |
value->SetReachingType(type); |
if (FLAG_support_il_printer && FLAG_trace_type_propagation) { |
- THR_Print("reaching type to v%" Pd " for v%" Pd " is %s\n", |
- value->instruction()->IsDefinition() ? |
- value->instruction()->AsDefinition()->ssa_temp_index() : -1, |
+ THR_Print("reaching type to %s for v%" Pd " is %s\n", |
+ value->instruction()->ToCString(), |
value->definition()->ssa_temp_index(), |
type->ToCString()); |
} |
@@ -263,6 +262,23 @@ void FlowGraphTypePropagator::VisitCheckClassId(CheckClassIdInstr* check) { |
} |
+void FlowGraphTypePropagator::VisitInstanceCall(InstanceCallInstr* instr) { |
+ if (instr->has_unique_selector()) { |
+ SetCid(instr->ArgumentAt(0), |
+ instr->ic_data()->GetReceiverClassIdAt(0)); |
+ } |
+} |
+ |
+ |
+void FlowGraphTypePropagator::VisitPolymorphicInstanceCall( |
+ PolymorphicInstanceCallInstr* instr) { |
+ if (instr->instance_call()->has_unique_selector()) { |
+ SetCid(instr->ArgumentAt(0), |
+ instr->ic_data().GetReceiverClassIdAt(0)); |
+ } |
+} |
+ |
+ |
void FlowGraphTypePropagator::VisitGuardFieldClass( |
GuardFieldClassInstr* guard) { |
const intptr_t cid = guard->field().guarded_cid(); |