| Index: runtime/vm/intermediate_language.h
|
| diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
|
| index 7307344385661d950e42e516f05ba5c558cf60b5..bfcb8a767726f7262ab23fc717f2cc414d8a554f 100644
|
| --- a/runtime/vm/intermediate_language.h
|
| +++ b/runtime/vm/intermediate_language.h
|
| @@ -512,6 +512,7 @@ class EmbeddedArray<T, 0> {
|
| M(ShiftMintOp) \
|
| M(UnaryMintOp) \
|
| M(CheckArrayBound) \
|
| + M(GenericCheckBound) \
|
| M(Constraint) \
|
| M(StringToCharCode) \
|
| M(OneByteStringFromCharCode) \
|
| @@ -7928,6 +7929,35 @@ class CheckArrayBoundInstr : public TemplateInstruction<2, NoThrow, Pure> {
|
| };
|
|
|
|
|
| +class GenericCheckBoundInstr : public TemplateInstruction<2, Throws, NoCSE> {
|
| + public:
|
| + GenericCheckBoundInstr(Value* length, Value* index, intptr_t deopt_id)
|
| + : TemplateInstruction(deopt_id) {
|
| + SetInputAt(kLengthPos, length);
|
| + SetInputAt(kIndexPos, index);
|
| + }
|
| +
|
| + Value* length() const { return inputs_[kLengthPos]; }
|
| + Value* index() const { return inputs_[kIndexPos]; }
|
| +
|
| + virtual EffectSet Effects() const { return EffectSet::None(); }
|
| + virtual EffectSet Dependencies() const { return EffectSet::None(); }
|
| +
|
| + DECLARE_INSTRUCTION(GenericCheckBound)
|
| +
|
| + virtual bool CanDeoptimize() const { return true; }
|
| +
|
| + // Give a name to the location/input indices.
|
| + enum {
|
| + kLengthPos = 0,
|
| + kIndexPos = 1
|
| + };
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(GenericCheckBoundInstr);
|
| +};
|
| +
|
| +
|
| class UnboxedIntConverterInstr : public TemplateDefinition<1, NoThrow> {
|
| public:
|
| UnboxedIntConverterInstr(Representation from,
|
|
|