diff options
Diffstat (limited to 'compiler/optimizing/nodes.h')
| -rw-r--r-- | compiler/optimizing/nodes.h | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h index 5af3cdd2d6..c1884828a8 100644 --- a/compiler/optimizing/nodes.h +++ b/compiler/optimizing/nodes.h @@ -2034,6 +2034,8 @@ class HInstanceFieldSet : public HTemplateInstruction<2> { MemberOffset GetFieldOffset() const { return field_info_.GetFieldOffset(); } Primitive::Type GetFieldType() const { return field_info_.GetFieldType(); } + HInstruction* GetValue() const { return InputAt(1); } + DECLARE_INSTRUCTION(InstanceFieldSet); private: @@ -2050,13 +2052,16 @@ class HArrayGet : public HExpression<2> { SetRawInputAt(1, index); } - virtual bool CanBeMoved() const { return true; } - virtual bool InstructionDataEquals(HInstruction* other) const { + bool CanBeMoved() const OVERRIDE { return true; } + bool InstructionDataEquals(HInstruction* other) const OVERRIDE { UNUSED(other); return true; } void SetType(Primitive::Type type) { type_ = type; } + HInstruction* GetArray() const { return InputAt(0); } + HInstruction* GetIndex() const { return InputAt(1); } + DECLARE_INSTRUCTION(ArrayGet); private: @@ -2072,20 +2077,29 @@ class HArraySet : public HTemplateInstruction<3> { uint32_t dex_pc) : HTemplateInstruction(SideEffects::ChangesSomething()), dex_pc_(dex_pc), - expected_component_type_(expected_component_type) { + expected_component_type_(expected_component_type), + needs_type_check_(value->GetType() == Primitive::kPrimNot) { SetRawInputAt(0, array); SetRawInputAt(1, index); SetRawInputAt(2, value); } - virtual bool NeedsEnvironment() const { + bool NeedsEnvironment() const { // We currently always call a runtime method to catch array store // exceptions. - return InputAt(2)->GetType() == Primitive::kPrimNot; + return needs_type_check_; + } + + void ClearNeedsTypeCheck() { + needs_type_check_ = false; } + bool NeedsTypeCheck() const { return needs_type_check_; } + uint32_t GetDexPc() const { return dex_pc_; } + HInstruction* GetArray() const { return InputAt(0); } + HInstruction* GetIndex() const { return InputAt(1); } HInstruction* GetValue() const { return InputAt(2); } Primitive::Type GetComponentType() const { @@ -2104,6 +2118,7 @@ class HArraySet : public HTemplateInstruction<3> { private: const uint32_t dex_pc_; const Primitive::Type expected_component_type_; + bool needs_type_check_; DISALLOW_COPY_AND_ASSIGN(HArraySet); }; @@ -2372,6 +2387,8 @@ class HStaticFieldSet : public HTemplateInstruction<2> { MemberOffset GetFieldOffset() const { return field_info_.GetFieldOffset(); } Primitive::Type GetFieldType() const { return field_info_.GetFieldType(); } + HInstruction* GetValue() const { return InputAt(1); } + DECLARE_INSTRUCTION(StaticFieldSet); private: |