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

Unified Diff: runtime/vm/intermediate_language.cc

Issue 11665005: Support scalar lists in array bounds check elimination. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: addressed comment Created 7 years, 11 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 | « runtime/vm/intermediate_language.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/intermediate_language.cc
===================================================================
--- runtime/vm/intermediate_language.cc (revision 16697)
+++ runtime/vm/intermediate_language.cc (working copy)
@@ -2435,6 +2435,11 @@
return;
}
if ((range_ == NULL) &&
+ (recognized_kind() == MethodRecognizer::kByteArrayBaseLength)) {
+ range_ = new Range(RangeBoundary::FromConstant(0), RangeBoundary::MaxSmi());
+ return;
+ }
+ if ((range_ == NULL) &&
(recognized_kind() == MethodRecognizer::kStringBaseLength)) {
range_ = new Range(RangeBoundary::FromConstant(0),
RangeBoundary::FromConstant(String::kMaxElements));
@@ -2650,9 +2655,31 @@
}
+bool CheckArrayBoundInstr::IsFixedLengthArrayType(intptr_t cid) {
+ switch (cid) {
+ case kArrayCid:
+ case kImmutableArrayCid:
+ case kInt8ArrayCid:
+ case kUint8ArrayCid:
+ case kUint8ClampedArrayCid:
+ case kInt16ArrayCid:
+ case kUint16ArrayCid:
+ case kInt32ArrayCid:
+ case kUint32ArrayCid:
+ case kInt64ArrayCid:
+ case kUint64ArrayCid:
+ case kFloat32ArrayCid:
+ case kFloat64ArrayCid:
+ return true;
+ default:
+ return false;
+ }
+}
+
+
bool CheckArrayBoundInstr::IsRedundant(RangeBoundary length) {
// Check that array has an immutable length.
- if ((array_type() != kArrayCid) && (array_type() != kImmutableArrayCid)) {
+ if (!IsFixedLengthArrayType(array_type())) {
return false;
}
@@ -2691,20 +2718,23 @@
switch (class_id) {
case kGrowableObjectArrayCid:
return GrowableObjectArray::length_offset();
- case kFloat64ArrayCid:
- return Float64Array::length_offset();
- case kFloat32ArrayCid:
- return Float32Array::length_offset();
case kOneByteStringCid:
case kTwoByteStringCid:
return String::length_offset();
case kArrayCid:
case kImmutableArrayCid:
return Array::length_offset();
+ case kInt8ArrayCid:
case kUint8ArrayCid:
- return Uint8Array::length_offset();
case kUint8ClampedArrayCid:
- return Uint8ClampedArray::length_offset();
+ case kInt16ArrayCid:
+ case kUint16ArrayCid:
+ case kInt32ArrayCid:
+ case kUint32ArrayCid:
+ case kInt64ArrayCid:
+ case kUint64ArrayCid:
+ case kFloat64ArrayCid:
+ case kFloat32ArrayCid:
case kExternalUint8ArrayCid:
return ByteArray::length_offset();
default:
« no previous file with comments | « runtime/vm/intermediate_language.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698