Chromium Code Reviews| Index: runtime/vm/intrinsifier.cc |
| diff --git a/runtime/vm/intrinsifier.cc b/runtime/vm/intrinsifier.cc |
| index c94fe26de5c37b97d5e560a53ec709c3a52b7f51..f9312a39a28dc08fb6b2cac756d93fe3b315e08f 100644 |
| --- a/runtime/vm/intrinsifier.cc |
| +++ b/runtime/vm/intrinsifier.cc |
| @@ -532,15 +532,12 @@ static bool IntrinsifyArraySetIndexed(FlowGraph* flow_graph, |
| // Float32/Float64 case already handled. |
| break; |
| } |
| - const ICData& value_check = ICData::ZoneHandle( |
| - ICData::New(flow_graph->function(), |
| - Symbols::Empty(), // Dummy function name. |
| - Object::empty_array(), // Dummy args. descr. |
| - Thread::kNoDeoptId, 1, false)); |
| - value_check.AddReceiverCheck(value_check_cid, flow_graph->function()); |
| + Zone* zone = flow_graph->zone(); |
| + Cids* value_check = new (zone) Cids(zone); |
| + value_check->Add(new (zone) CidRange(value_check_cid, value_check_cid)); |
|
Vyacheslav Egorov (Google)
2017/05/09 21:07:28
can this be Cids::CreateMonomorphic?
erikcorry
2017/05/10 08:47:43
Done.
|
| builder.AddInstruction( |
| - new CheckClassInstr(new Value(value), Thread::kNoDeoptId, value_check, |
| - builder.TokenPos())); |
| + new CheckClassInstr(new Value(value), Thread::kNoDeoptId, |
| + *value_check, builder.TokenPos())); |
| value = builder.AddUnboxInstr(rep, new Value(value), |
| /* is_checked = */ true); |
| if (array_cid == kTypedDataFloat32ArrayCid) { |
| @@ -730,6 +727,7 @@ bool Intrinsifier::Build_ExternalTwoByteStringCodeUnitAt( |
| static bool BuildBinaryFloat32x4Op(FlowGraph* flow_graph, Token::Kind kind) { |
| if (!FlowGraphCompiler::SupportsUnboxedSimd128()) return false; |
| + Zone* zone = flow_graph->zone(); |
| GraphEntryInstr* graph_entry = flow_graph->graph_entry(); |
| TargetEntryInstr* normal_entry = graph_entry->normal_entry(); |
| BlockBuilder builder(flow_graph, normal_entry); |
| @@ -737,14 +735,11 @@ static bool BuildBinaryFloat32x4Op(FlowGraph* flow_graph, Token::Kind kind) { |
| Definition* right = builder.AddParameter(1); |
| Definition* left = builder.AddParameter(2); |
| - const ICData& value_check = ICData::ZoneHandle(ICData::New( |
| - flow_graph->function(), String::Handle(flow_graph->function().name()), |
| - Object::empty_array(), // Dummy args. descr. |
| - Thread::kNoDeoptId, 1, false)); |
| - value_check.AddReceiverCheck(kFloat32x4Cid, flow_graph->function()); |
| + Cids* value_check = new (zone) Cids(zone); |
| + value_check->Add(new (zone) CidRange(kFloat32x4Cid, kFloat32x4Cid)); |
|
Vyacheslav Egorov (Google)
2017/05/09 21:07:28
can this be Cids::CreateMonomorphic()?
erikcorry
2017/05/10 08:47:43
Done.
|
| // Check argument. Receiver (left) is known to be a Float32x4. |
| builder.AddInstruction(new CheckClassInstr( |
| - new Value(right), Thread::kNoDeoptId, value_check, builder.TokenPos())); |
| + new Value(right), Thread::kNoDeoptId, *value_check, builder.TokenPos())); |
| Definition* left_simd = |
| builder.AddUnboxInstr(kUnboxedFloat32x4, new Value(left), |
| /* is_checked = */ true); |
| @@ -946,14 +941,11 @@ bool Intrinsifier::Build_GrowableArraySetData(FlowGraph* flow_graph) { |
| Definition* data = builder.AddParameter(1); |
| Definition* growable_array = builder.AddParameter(2); |
| + Zone* zone = flow_graph->zone(); |
| - const ICData& value_check = ICData::ZoneHandle(ICData::New( |
| - flow_graph->function(), String::Handle(flow_graph->function().name()), |
| - Object::empty_array(), // Dummy args. descr. |
| - Thread::kNoDeoptId, 1, false)); |
| - value_check.AddReceiverCheck(kArrayCid, flow_graph->function()); |
| + Cids* value_check = Cids::CreateMonomorphic(zone, kArrayCid); |
| builder.AddInstruction(new CheckClassInstr( |
| - new Value(data), Thread::kNoDeoptId, value_check, builder.TokenPos())); |
| + new Value(data), Thread::kNoDeoptId, *value_check, builder.TokenPos())); |
| builder.AddInstruction(new StoreInstanceFieldInstr( |
| GrowableObjectArray::data_offset(), new Value(growable_array), |