| Index: runtime/vm/intermediate_language.cc
|
| ===================================================================
|
| --- runtime/vm/intermediate_language.cc (revision 15254)
|
| +++ runtime/vm/intermediate_language.cc (working copy)
|
| @@ -1142,12 +1142,14 @@
|
| RawAbstractType* LoadIndexedInstr::CompileType() const {
|
| switch (class_id_) {
|
| case kArrayCid:
|
| - case kGrowableObjectArrayCid:
|
| case kImmutableArrayCid:
|
| return Type::DynamicType();
|
| case kFloat32ArrayCid :
|
| case kFloat64ArrayCid :
|
| return Type::Double();
|
| + case kUint8ArrayCid:
|
| + case kExternalUint8ArrayCid:
|
| + return Type::IntType();
|
| default:
|
| UNIMPLEMENTED();
|
| return Type::IntType();
|
| @@ -1158,12 +1160,14 @@
|
| intptr_t LoadIndexedInstr::ResultCid() const {
|
| switch (class_id_) {
|
| case kArrayCid:
|
| - case kGrowableObjectArrayCid:
|
| case kImmutableArrayCid:
|
| return kDynamicCid;
|
| case kFloat32ArrayCid :
|
| case kFloat64ArrayCid :
|
| return kDoubleCid;
|
| + case kUint8ArrayCid:
|
| + case kExternalUint8ArrayCid:
|
| + return kSmiCid;
|
| default:
|
| UNIMPLEMENTED();
|
| return kSmiCid;
|
| @@ -1174,8 +1178,9 @@
|
| Representation LoadIndexedInstr::representation() const {
|
| switch (class_id_) {
|
| case kArrayCid:
|
| - case kGrowableObjectArrayCid:
|
| case kImmutableArrayCid:
|
| + case kUint8ArrayCid:
|
| + case kExternalUint8ArrayCid:
|
| return kTagged;
|
| case kFloat32ArrayCid :
|
| case kFloat64ArrayCid :
|
| @@ -1198,8 +1203,6 @@
|
| ASSERT(idx == 2);
|
| switch (class_id_) {
|
| case kArrayCid:
|
| - case kGrowableObjectArrayCid:
|
| - case kImmutableArrayCid:
|
| return kTagged;
|
| case kFloat32ArrayCid :
|
| case kFloat64ArrayCid :
|
| @@ -2437,6 +2440,20 @@
|
| }
|
|
|
|
|
| +void LoadIndexedInstr::InferRange() {
|
| + switch (class_id()) {
|
| + case kExternalUint8ArrayCid:
|
| + case kUint8ArrayCid:
|
| + range_ = new Range(RangeBoundary::FromConstant(0),
|
| + RangeBoundary::FromConstant(255));
|
| + break;
|
| + default:
|
| + Definition::InferRange();
|
| + break;
|
| + }
|
| +}
|
| +
|
| +
|
| void PhiInstr::InferRange() {
|
| RangeBoundary new_min;
|
| RangeBoundary new_max;
|
| @@ -2662,6 +2679,10 @@
|
| case kArrayCid:
|
| case kImmutableArrayCid:
|
| return Array::length_offset();
|
| + case kUint8ArrayCid:
|
| + return Uint8Array::length_offset();
|
| + case kExternalUint8ArrayCid:
|
| + return ByteArray::length_offset();
|
| default:
|
| UNREACHABLE();
|
| return -1;
|
|
|