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

Unified Diff: runtime/vm/flow_graph_optimizer.cc

Issue 24567003: Bug fix and cleanup of inlining of recognized [] methods. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: removed invalid ASSERT Created 7 years, 3 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
« no previous file with comments | « no previous file | runtime/vm/object.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/flow_graph_optimizer.cc
===================================================================
--- runtime/vm/flow_graph_optimizer.cc (revision 27768)
+++ runtime/vm/flow_graph_optimizer.cc (working copy)
@@ -692,8 +692,6 @@
const ICData& ic_data = ICData::Handle(call->ic_data()->AsUnaryClassChecks());
- if (ic_data.NumberOfChecks() == 0) return kIllegalCid;
- // TODO(vegorov): Add multiple receiver type support.
if (ic_data.NumberOfChecks() != 1) return kIllegalCid;
ASSERT(ic_data.HasOneTarget());
@@ -1069,9 +1067,13 @@
case MethodRecognizer::kExternalUint8ClampedArrayGetIndexed:
case MethodRecognizer::kInt16ArrayGetIndexed:
case MethodRecognizer::kUint16ArrayGetIndexed:
+ return TryInlineGetIndexed(kind, call, ic_data, entry, last);
+ case MethodRecognizer::kFloat32x4ArrayGetIndexed:
+ if (!ShouldInlineSimd()) return false;
+ return TryInlineGetIndexed(kind, call, ic_data, entry, last);
case MethodRecognizer::kInt32ArrayGetIndexed:
case MethodRecognizer::kUint32ArrayGetIndexed:
- case MethodRecognizer::kFloat32x4ArrayGetIndexed:
+ if (!CanUnboxInt32()) return false;
return TryInlineGetIndexed(kind, call, ic_data, entry, last);
default:
return false;
@@ -1176,44 +1178,22 @@
bool FlowGraphOptimizer::TryReplaceWithLoadIndexed(InstanceCallInstr* call) {
- const intptr_t class_id = ReceiverClassId(call);
- switch (class_id) {
- case kArrayCid:
- case kImmutableArrayCid:
- case kGrowableObjectArrayCid:
- case kTypedDataFloat32ArrayCid:
- case kTypedDataFloat64ArrayCid:
- case kTypedDataInt8ArrayCid:
- case kTypedDataUint8ArrayCid:
- case kTypedDataUint8ClampedArrayCid:
- case kExternalTypedDataUint8ArrayCid:
- case kExternalTypedDataUint8ClampedArrayCid:
- case kTypedDataInt16ArrayCid:
- case kTypedDataUint16ArrayCid:
- break;
- case kTypedDataFloat32x4ArrayCid:
- if (!ShouldInlineSimd()) {
- return false;
- }
- break;
- case kTypedDataInt32ArrayCid:
- case kTypedDataUint32ArrayCid:
- if (!CanUnboxInt32()) return false;
- break;
- default:
- return false;
- }
+ // Check for monomorphic IC data.
+ if (!call->HasICData()) return false;
+ const ICData& ic_data = ICData::Handle(call->ic_data()->AsUnaryClassChecks());
+ if (ic_data.NumberOfChecks() != 1) return false;
+ ASSERT(ic_data.HasOneTarget());
- const Function& target =
- Function::Handle(call->ic_data()->GetTargetAt(0));
+ const Function& target = Function::Handle(ic_data.GetTargetAt(0));
TargetEntryInstr* entry;
Definition* last;
- ASSERT(class_id == MethodKindToCid(MethodRecognizer::RecognizeKind(target)));
- bool success = TryInlineRecognizedMethod(target,
- call,
- *call->ic_data(),
- &entry, &last);
- ASSERT(success);
+ if (!TryInlineRecognizedMethod(target,
+ call,
+ *call->ic_data(),
+ &entry, &last)) {
+ return false;
+ }
+
// Insert receiver class check.
AddReceiverCheck(call);
// Remove the original push arguments.
« no previous file with comments | « no previous file | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698