Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Unified Diff: runtime/vm/intrinsifier.cc

Issue 2856543002: Use off-heap data for class check instructions (Closed)
Patch Set: Feedback from Slava: rejig inheritance of CallTargets Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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),

Powered by Google App Engine
This is Rietveld 408576698