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), |