Lines Matching refs:HInstruction

64 class HInstruction;  variable
149 void AddInstruction(HInstruction* instruction);
150 void RemoveInstruction(HInstruction* instruction);
153 void InsertInstructionBefore(HInstruction* instruction, HInstruction* cursor);
154 void InsertInstructionAfter(HInstruction* instruction, HInstruction* cursor);
157 bool Contains(HInstruction* instruction) const;
162 bool FoundBefore(const HInstruction* instruction1,
163 const HInstruction* instruction2) const;
171 void AddAfter(HInstruction* cursor, const HInstructionList& instruction_list);
172 void AddBefore(HInstruction* cursor, const HInstructionList& instruction_list);
179 HInstruction* first_instruction_;
180 HInstruction* last_instruction_;
184 friend class HInstruction; variable
463 HInstruction* InlineInto(HGraph* outer_graph, HInvoke* invoke);
686 HInstruction* InsertOppositeCondition(HInstruction* cond, HInstruction* cursor);
936 bool IsDefinedOutOfTheLoop(HInstruction* instruction) const;
1146 HInstruction* GetFirstInstruction() const { return instructions_.first_instruction_; } in GetFirstInstruction()
1147 HInstruction* GetLastInstruction() const { return instructions_.last_instruction_; } in GetLastInstruction()
1149 HInstruction* GetFirstPhi() const { return phis_.first_instruction_; } in GetFirstPhi()
1150 HInstruction* GetLastPhi() const { return phis_.last_instruction_; } in GetLastPhi()
1153 HInstruction* GetFirstInstructionDisregardMoves() const;
1249 HBasicBlock* SplitBefore(HInstruction* cursor);
1256 HBasicBlock* SplitBeforeForInlining(HInstruction* cursor);
1259 HBasicBlock* SplitAfterForInlining(HInstruction* cursor);
1290 void AddInstruction(HInstruction* instruction);
1292 void InsertInstructionBefore(HInstruction* instruction, HInstruction* cursor);
1293 void InsertInstructionAfter(HInstruction* instruction, HInstruction* cursor);
1297 void ReplaceAndRemoveInstructionWith(HInstruction* initial,
1298 HInstruction* replacement);
1304 void RemoveInstruction(HInstruction* instruction, bool ensure_safety = true);
1306 void RemoveInstructionOrPhi(HInstruction* instruction, bool ensure_safety = true);
1406 friend class HInstruction; variable
1637 HInstruction* Clone(ArenaAllocator* arena) const override { \
1669 friend class HInstruction; local
1684 explicit HUserRecord(HInstruction* instruction) : instruction_(instruction), before_use_node_() {} in HUserRecord()
1688 HUserRecord(HInstruction* instruction, typename HUseList<T>::iterator before_use_node) in HUserRecord()
1693 HInstruction* GetInstruction() const { return instruction_; } in GetInstruction()
1699 HInstruction* instruction_;
1709 HInstruction* operator()(HUserRecord<HInstruction*>& record) const { in operator()
1712 const HInstruction* operator()(const HUserRecord<HInstruction*>& record) const { in operator()
1717 using HInputsRef = TransformArrayRef<HUserRecord<HInstruction*>, HInputExtractor>;
1718 using HConstInputsRef = TransformArrayRef<const HUserRecord<HInstruction*>, HInputExtractor>;
1986 HInstruction* holder) in HEnvironment()
1997 HInstruction* holder) in HEnvironment()
2021 void CopyFrom(ArrayRef<HInstruction* const> locals);
2029 void SetRawEnvAt(size_t index, HInstruction* instruction) { in SetRawEnvAt()
2033 HInstruction* GetInstructionAt(size_t index) const { in GetInstructionAt()
2042 void ReplaceInput(HInstruction* replacement, size_t index);
2064 HInstruction* GetHolder() const { in GetHolder()
2081 HInstruction* const holder_;
2083 friend class HInstruction; variable
2088 class HInstruction : public ArenaObject<kArenaAllocInstruction> {
2097 HInstruction(InstructionKind kind, SideEffects side_effects, uint32_t dex_pc) in HInstruction() function
2098 : HInstruction(kind, DataType::Type::kVoid, side_effects, dex_pc) {} in HInstruction()
2100 HInstruction(InstructionKind kind, DataType::Type type, SideEffects side_effects, uint32_t dex_pc) in HInstruction() function
2119 virtual ~HInstruction() {} in ~HInstruction()
2122 HInstruction* GetNext() const { return next_; } in GetNext()
2123 HInstruction* GetPrevious() const { return previous_; } in GetPrevious()
2125 HInstruction* GetNextDisregardingMoves() const;
2126 HInstruction* GetPreviousDisregardingMoves() const;
2138 virtual ArrayRef<HUserRecord<HInstruction*>> GetInputRecords() = 0;
2140 ArrayRef<const HUserRecord<HInstruction*>> GetInputRecords() const { in GetInputRecords()
2142 return ArrayRef<const HUserRecord<HInstruction*>>( in GetInputRecords()
2143 const_cast<HInstruction*>(this)->GetInputRecords()); in GetInputRecords()
2155 HInstruction* InputAt(size_t i) const { return InputRecordAt(i).GetInstruction(); } in InputAt()
2157 bool HasInput(HInstruction* input) const { in HasInput()
2158 for (const HInstruction* i : GetInputs()) { in HasInput()
2166 void SetRawInputAt(size_t index, HInstruction* input) { in SetRawInputAt()
2167 SetRawInputRecordAt(index, HUserRecord<HInstruction*>(input)); in SetRawInputAt()
2204 virtual bool CanDoImplicitNullCheckOn(HInstruction* obj ATTRIBUTE_UNUSED) const { in CanDoImplicitNullCheckOn()
2212 HInstruction* prev_not_move = GetPreviousDisregardingMoves(); in GetImplicitNullCheck()
2234 void AddUseAt(HInstruction* user, size_t index) { in AddUseAt()
2238 HUseListNode<HInstruction*>* new_node = in AddUseAt()
2239 new (GetBlock()->GetGraph()->GetAllocator()) HUseListNode<HInstruction*>(user, index); in AddUseAt()
2255 HUserRecord<HInstruction*> input_use = InputRecordAt(input); in RemoveAsUserOfInput()
2256 HUseList<HInstruction*>::iterator before_use_node = input_use.GetBeforeUseNode(); in RemoveAsUserOfInput()
2262 for (const HUserRecord<HInstruction*>& input_use : GetInputRecords()) { in RemoveAsUserOfAllInputs()
2263 HUseList<HInstruction*>::iterator before_use_node = input_use.GetBeforeUseNode(); in RemoveAsUserOfAllInputs()
2269 const HUseList<HInstruction*>& GetUses() const { return uses_; } in GetUses()
2299 bool StrictlyDominates(HInstruction* other_instruction) const;
2358 void ReplaceWith(HInstruction* instruction);
2359 void ReplaceUsesDominatedBy(HInstruction* dominator, HInstruction* replacement);
2360 void ReplaceEnvUsesDominatedBy(HInstruction* dominator, HInstruction* replacement);
2361 void ReplaceInput(HInstruction* replacement, size_t index);
2365 void ReplaceWithExceptInReplacementAtIndex(HInstruction* other, size_t use_index) { in ReplaceWithExceptInReplacementAtIndex()
2371 void MoveBefore(HInstruction* cursor, bool do_checks = true);
2404 virtual HInstruction* Clone(ArenaAllocator* arena ATTRIBUTE_UNUSED) const { in FOR_EACH_INSTRUCTION()
2421 virtual bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const { in InstructionDataEquals()
2428 bool Equals(const HInstruction* other) const;
2434 for (const HInstruction* input : GetInputs()) { in ComputeHashCode()
2468 bool HasAnyEnvironmentUseBefore(HInstruction* other);
2497 const HUserRecord<HInstruction*> InputRecordAt(size_t i) const { in InputRecordAt()
2501 void SetRawInputRecordAt(size_t index, const HUserRecord<HInstruction*>& input) { in SetRawInputRecordAt()
2502 ArrayRef<HUserRecord<HInstruction*>> input_records = GetInputRecords(); in SetRawInputRecordAt()
2540 explicit HInstruction(const HInstruction& other) in HInstruction() function
2560 void FixUpUserRecordsAfterUseInsertion(HUseList<HInstruction*>::iterator fixup_end) { in FixUpUserRecordsAfterUseInsertion()
2563 HInstruction* user = use_node->GetUser(); in FixUpUserRecordsAfterUseInsertion()
2565 user->SetRawInputRecordAt(input_index, HUserRecord<HInstruction*>(this, before_use_node)); in FixUpUserRecordsAfterUseInsertion()
2570 void FixUpUserRecordsAfterUseRemoval(HUseList<HInstruction*>::iterator before_use_node) { in FixUpUserRecordsAfterUseRemoval()
2571 auto next = ++HUseList<HInstruction*>::iterator(before_use_node); in FixUpUserRecordsAfterUseRemoval()
2573 HInstruction* next_user = next->GetUser(); in FixUpUserRecordsAfterUseRemoval()
2576 next_user->SetRawInputRecordAt(next_index, HUserRecord<HInstruction*>(this, before_use_node)); in FixUpUserRecordsAfterUseRemoval()
2600 HInstruction* previous_;
2601 HInstruction* next_;
2617 HUseList<HInstruction*> uses_;
2649 std::ostream& operator<<(std::ostream& os, HInstruction::InstructionKind rhs);
2662 HInstruction* Current() const { return instruction_; } in Current()
2669 HInstruction* instruction_;
2670 HInstruction* next_;
2685 HInstruction* Current() const { return instruction_; } in Current()
2691 HInstruction* instruction_;
2705 HInstruction* Current() const { return instruction_; } in Current()
2712 HInstruction* instruction_;
2713 HInstruction* next_;
2718 class HVariableInputSizeInstruction : public HInstruction {
2720 using HInstruction::GetInputRecords; // Keep the const version visible.
2721 ArrayRef<HUserRecord<HInstruction*>> GetInputRecords() override { in GetInputRecords()
2722 return ArrayRef<HUserRecord<HInstruction*>>(inputs_); in GetInputRecords()
2725 void AddInput(HInstruction* input);
2726 void InsertInputAt(size_t index, HInstruction* input);
2741 : HInstruction(inst_kind, side_effects, dex_pc), in HVariableInputSizeInstruction()
2750 : HInstruction(inst_kind, type, side_effects, dex_pc), in HVariableInputSizeInstruction()
2755 ArenaVector<HUserRecord<HInstruction*>> inputs_;
2759 class HExpression : public HInstruction {
2762 : HInstruction(kind, side_effects, dex_pc), inputs_() {} in HInstruction() function
2767 : HInstruction(kind, type, side_effects, dex_pc), inputs_() {} in HInstruction() function
2770 using HInstruction::GetInputRecords; // Keep the const version visible.
2771 ArrayRef<HUserRecord<HInstruction*>> GetInputRecords() final { in GetInputRecords()
2772 return ArrayRef<HUserRecord<HInstruction*>>(inputs_); in GetInputRecords()
2779 std::array<HUserRecord<HInstruction*>, N> inputs_;
2786 class HExpression<0> : public HInstruction {
2788 using HInstruction::HInstruction;
2792 using HInstruction::GetInputRecords; // Keep the const version visible.
2793 ArrayRef<HUserRecord<HInstruction*>> GetInputRecords() final { in GetInputRecords()
2794 return ArrayRef<HUserRecord<HInstruction*>>(); in GetInputRecords()
2824 explicit HReturn(HInstruction* value, uint32_t dex_pc = kNoDexPc)
2891 bool IsVRegEquivalentOf(const HInstruction* other) const { in IsVRegEquivalentOf()
2912 HInstruction* next = GetNext(); in GetNextEquivalentPhiWithSameType()
2928 static constexpr size_t kFlagIsLive = HInstruction::kNumberOfGenericPackedBits;
3000 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
3034 bool InstructionDataEquals(const HInstruction* other) const override { in InstructionDataEquals()
3078 bool InstructionDataEquals(const HInstruction* other) const override { in InstructionDataEquals()
3114 bool InstructionDataEquals(const HInstruction* other) const override { in InstructionDataEquals()
3171 bool InstructionDataEquals(const HInstruction* other) const override { in InstructionDataEquals()
3226 explicit HIf(HInstruction* input, uint32_t dex_pc = kNoDexPc)
3325 HInstruction* cond, in HDeoptimize()
3348 HInstruction* cond, in HDeoptimize()
3349 HInstruction* guard, in HDeoptimize()
3368 bool InstructionDataEquals(const HInstruction* other) const override { in InstructionDataEquals()
3382 HInstruction* GuardedInput() const { in GuardedInput()
3464 HClassTableGet(HInstruction* cls, in HClassTableGet()
3477 bool InstructionDataEquals(const HInstruction* other) const override { in InstructionDataEquals()
3510 HInstruction* input,
3544 HInstruction* input,
3553 HInstruction* GetInput() const { return InputAt(0); } in GetInput()
3557 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
3582 HInstruction* left,
3583 HInstruction* right,
3594 HInstruction* GetLeft() const { return InputAt(0); } in GetLeft()
3595 HInstruction* GetRight() const { return InputAt(1); } in GetRight()
3603 HInstruction* left = InputAt(0); in OrderInputsWithConstantOnTheRight()
3604 HInstruction* right = InputAt(1); in OrderInputsWithConstantOnTheRight()
3617 HInstruction* left = InputAt(0); in OrderInputs()
3618 HInstruction* right = InputAt(1); in OrderInputs()
3633 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
3664 HInstruction* GetLeastConstantLeft() const;
3686 HInstruction* first,
3687 HInstruction* second,
3700 bool IsBeforeWhenDisregardMoves(HInstruction* instruction) const;
3714 bool InstructionDataEquals(const HInstruction* other) const override { in InstructionDataEquals()
3773 HEqual(HInstruction* first, HInstruction* second, uint32_t dex_pc = kNoDexPc)
3819 HNotEqual(HInstruction* first, HInstruction* second,
3865 HLessThan(HInstruction* first, HInstruction* second,
3905 HLessThanOrEqual(HInstruction* first, HInstruction* second,
3945 HGreaterThan(HInstruction* first, HInstruction* second, uint32_t dex_pc = kNoDexPc)
3984 HGreaterThanOrEqual(HInstruction* first, HInstruction* second, uint32_t dex_pc = kNoDexPc)
4023 HBelow(HInstruction* first, HInstruction* second, uint32_t dex_pc = kNoDexPc)
4065 HBelowOrEqual(HInstruction* first, HInstruction* second, uint32_t dex_pc = kNoDexPc)
4107 HAbove(HInstruction* first, HInstruction* second, uint32_t dex_pc = kNoDexPc)
4149 HAboveOrEqual(HInstruction* first, HInstruction* second, uint32_t dex_pc = kNoDexPc)
4197 HInstruction* first, in HCompare()
4198 HInstruction* second, in HCompare()
4239 bool InstructionDataEquals(const HInstruction* other) const override { in InstructionDataEquals()
4280 HNewInstance(HInstruction* cls, in HNewInstance()
4323 HInstruction* input = InputAt(0); in GetLoadClass()
4370 void SetArgumentAt(size_t index, HInstruction* argument) { in SetArgumentAt()
4409 bool InstructionDataEquals(const HInstruction* other) const override { in InstructionDataEquals()
4680 using HInstruction::GetInputRecords; // Keep the const version visible.
4681 ArrayRef<HUserRecord<HInstruction*>> GetInputRecords() override { in GetInputRecords()
4682 ArrayRef<HUserRecord<HInstruction*>> input_records = HInvoke::GetInputRecords(); in GetInputRecords()
4686 HInstruction* last_input = input_records.back().GetInstruction(); in GetInputRecords()
4699 bool CanDoImplicitNullCheckOn(HInstruction* obj ATTRIBUTE_UNUSED) const override { in CanDoImplicitNullCheckOn()
4794 void AddSpecialInput(HInstruction* input) { in AddSpecialInput()
4806 HInstruction* last_input = inputs_.back().GetInstruction(); in RemoveExplicitClinitCheck()
4897 bool CanDoImplicitNullCheckOn(HInstruction* obj) const override { in CanDoImplicitNullCheckOn()
4937 bool CanDoImplicitNullCheckOn(HInstruction* obj) const override { in CanDoImplicitNullCheckOn()
4961 HNeg(DataType::Type result_type, HInstruction* input, uint32_t dex_pc = kNoDexPc)
4989 HNewArray(HInstruction* cls, HInstruction* length, uint32_t dex_pc, size_t component_size_shift) in HNewArray()
5011 HInstruction* GetLength() const { in GetLength()
5037 HInstruction* left,
5038 HInstruction* right,
5073 HInstruction* left,
5074 HInstruction* right,
5107 HInstruction* left,
5108 HInstruction* right,
5143 HInstruction* left, in HDiv()
5144 HInstruction* right, in HDiv()
5191 HInstruction* left, in HRem()
5192 HInstruction* right, in HRem()
5239 HInstruction* left, in HMin()
5240 HInstruction* right, in HMin()
5274 HInstruction* left, in HMax()
5275 HInstruction* right, in HMax()
5308 HAbs(DataType::Type result_type, HInstruction* input, uint32_t dex_pc = kNoDexPc)
5352 HDivZeroCheck(HInstruction* value, uint32_t dex_pc) in HDivZeroCheck()
5360 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
5376 HInstruction* value,
5377 HInstruction* distance,
5422 HInstruction* value,
5423 HInstruction* distance,
5468 HInstruction* value,
5469 HInstruction* distance,
5516 HInstruction* left,
5517 HInstruction* right,
5554 HInstruction* left,
5555 HInstruction* right,
5592 HInstruction* left,
5593 HInstruction* right,
5629 HRor(DataType::Type result_type, HInstruction* value, HInstruction* distance) in HRor()
5723 HNot(DataType::Type result_type, HInstruction* input, uint32_t dex_pc = kNoDexPc)
5728 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
5757 explicit HBooleanNot(HInstruction* input, uint32_t dex_pc = kNoDexPc)
5762 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
5796 HTypeConversion(DataType::Type result_type, HInstruction* input, uint32_t dex_pc = kNoDexPc)
5803 HInstruction* GetInput() const { return InputAt(0); } in GetInput()
5809 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
5834 HNullCheck(HInstruction* value, uint32_t dex_pc) in HNullCheck()
5841 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
5896 HInstanceFieldGet(HInstruction* value, in HInstanceFieldGet()
5922 bool InstructionDataEquals(const HInstruction* other) const override { in InstructionDataEquals()
5927 bool CanDoImplicitNullCheckOn(HInstruction* obj) const override { in CanDoImplicitNullCheckOn()
5932 return (HInstruction::ComputeHashCode() << 7) | GetFieldOffset().SizeValue(); in ComputeHashCode()
5958 HInstanceFieldSet(HInstruction* object, in HInstanceFieldSet()
5959 HInstruction* value, in HInstanceFieldSet()
5985 bool CanDoImplicitNullCheckOn(HInstruction* obj) const override { in CanDoImplicitNullCheckOn()
5993 HInstruction* GetValue() const { return InputAt(1); } in GetValue()
6013 HArrayGet(HInstruction* array, in HArrayGet()
6014 HInstruction* index, in HArrayGet()
6025 HArrayGet(HInstruction* array, in HArrayGet()
6026 HInstruction* index, in HArrayGet()
6039 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
6042 bool CanDoImplicitNullCheckOn(HInstruction* obj ATTRIBUTE_UNUSED) const override { in CanDoImplicitNullCheckOn()
6075 HInstruction* GetArray() const { return InputAt(0); } in GetArray()
6076 HInstruction* GetIndex() const { return InputAt(1); } in GetIndex()
6098 static_assert(kNumberOfArrayGetPackedBits <= HInstruction::kMaxNumberOfPackedBits,
6104 HArraySet(HInstruction* array, in HArraySet()
6105 HInstruction* index, in HArraySet()
6106 HInstruction* value, in HArraySet()
6118 HArraySet(HInstruction* array, in HArraySet()
6119 HInstruction* index, in HArraySet()
6120 HInstruction* value, in HArraySet()
6144 bool CanDoImplicitNullCheckOn(HInstruction* obj ATTRIBUTE_UNUSED) const override { in CanDoImplicitNullCheckOn()
6167 HInstruction* GetArray() const { return InputAt(0); } in GetArray()
6168 HInstruction* GetIndex() const { return InputAt(1); } in GetIndex()
6169 HInstruction* GetValue() const { return InputAt(2); } in GetValue()
6223 HArrayLength(HInstruction* array, uint32_t dex_pc, bool is_string_length = false)
6233 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
6236 bool CanDoImplicitNullCheckOn(HInstruction* obj) const override { in CanDoImplicitNullCheckOn()
6255 static_assert(kNumberOfArrayLengthPackedBits <= HInstruction::kMaxNumberOfPackedBits,
6264 HBoundsCheck(HInstruction* index,
6265 HInstruction* length,
6277 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
6287 HInstruction* GetIndex() const { return InputAt(0); } in GetIndex()
6297 static_assert(kNumberOfBoundsCheckPackedBits <= HInstruction::kMaxNumberOfPackedBits,
6349 class HLoadClass final : public HInstruction {
6392 : HInstruction(kLoadClass, in HLoadClass()
6396 special_input_(HUserRecord<HInstruction*>(current_method)), in HLoadClass()
6428 bool InstructionDataEquals(const HInstruction* other) const override;
6503 void AddSpecialInput(HInstruction* special_input);
6505 using HInstruction::GetInputRecords; // Keep the const version visible.
6506 ArrayRef<HUserRecord<HInstruction*>> GetInputRecords() final { in GetInputRecords()
6507 return ArrayRef<HUserRecord<HInstruction*>>( in GetInputRecords()
6546 HUserRecord<HInstruction*> special_input_;
6567 special_input_ = HUserRecord<HInstruction*>(nullptr); in SetLoadKind()
6575 inline void HLoadClass::AddSpecialInput(HInstruction* special_input) { in AddSpecialInput()
6583 special_input_ = HUserRecord<HInstruction*>(special_input); in AddSpecialInput()
6587 class HLoadString final : public HInstruction {
6621 : HInstruction(kLoadString, in HLoadString()
6625 special_input_(HUserRecord<HInstruction*>(current_method)), in HLoadString()
6663 bool InstructionDataEquals(const HInstruction* other) const override;
6691 void AddSpecialInput(HInstruction* special_input);
6693 using HInstruction::GetInputRecords; // Keep the const version visible.
6694 ArrayRef<HUserRecord<HInstruction*>> GetInputRecords() final { in GetInputRecords()
6695 return ArrayRef<HUserRecord<HInstruction*>>( in GetInputRecords()
6717 HUserRecord<HInstruction*> special_input_;
6734 special_input_ = HUserRecord<HInstruction*>(nullptr); in SetLoadKind()
6742 inline void HLoadString::AddSpecialInput(HInstruction* special_input) { in AddSpecialInput()
6752 special_input_ = HUserRecord<HInstruction*>(special_input); in AddSpecialInput()
6756 class HLoadMethodHandle final : public HInstruction {
6762 : HInstruction(kLoadMethodHandle, in HLoadMethodHandle()
6766 special_input_(HUserRecord<HInstruction*>(current_method)), in HLoadMethodHandle()
6771 using HInstruction::GetInputRecords; // Keep the const version visible.
6772 ArrayRef<HUserRecord<HInstruction*>> GetInputRecords() final { in GetInputRecords()
6773 return ArrayRef<HUserRecord<HInstruction*>>( in GetInputRecords()
6794 HUserRecord<HInstruction*> special_input_;
6800 class HLoadMethodType final : public HInstruction {
6806 : HInstruction(kLoadMethodType, in HLoadMethodType()
6810 special_input_(HUserRecord<HInstruction*>(current_method)), in HLoadMethodType()
6815 using HInstruction::GetInputRecords; // Keep the const version visible.
6816 ArrayRef<HUserRecord<HInstruction*>> GetInputRecords() final { in GetInputRecords()
6817 return ArrayRef<HUserRecord<HInstruction*>>( in GetInputRecords()
6838 HUserRecord<HInstruction*> special_input_;
6859 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
6884 HStaticFieldGet(HInstruction* cls, in HStaticFieldGet()
6911 bool InstructionDataEquals(const HInstruction* other) const override { in InstructionDataEquals()
6917 return (HInstruction::ComputeHashCode() << 7) | GetFieldOffset().SizeValue(); in ComputeHashCode()
6943 HStaticFieldSet(HInstruction* cls, in HStaticFieldSet()
6944 HInstruction* value, in HStaticFieldSet()
6974 HInstruction* GetValue() const { return InputAt(1); } in GetValue()
7012 void SetArgumentAt(size_t index, HInstruction* argument) { in SetArgumentAt()
7045 HUnresolvedInstanceFieldGet(HInstruction* obj, in HUnresolvedInstanceFieldGet()
7075 HUnresolvedInstanceFieldSet(HInstruction* obj, in HUnresolvedInstanceFieldSet()
7076 HInstruction* value, in HUnresolvedInstanceFieldSet()
7101 static constexpr size_t kFieldFieldType = HInstruction::kNumberOfGenericPackedBits;
7106 static_assert(kNumberOfUnresolvedStaticFieldSetPackedBits <= HInstruction::kMaxNumberOfPackedBits,
7143 HUnresolvedStaticFieldSet(HInstruction* value, in HUnresolvedStaticFieldSet()
7167 static constexpr size_t kFieldFieldType = HInstruction::kNumberOfGenericPackedBits;
7172 static_assert(kNumberOfUnresolvedStaticFieldSetPackedBits <= HInstruction::kMaxNumberOfPackedBits,
7210 HThrow(HInstruction* exception, uint32_t dex_pc) in HThrow()
7253 HInstruction* object, in HTypeCheckInstruction()
7254 HInstruction* target_class_or_null, in HTypeCheckInstruction()
7289 HInstruction* load_class = InputAt(1); in GetTargetClass()
7296 HInstruction* path_to_root = InputAt(2); in GetBitstringPathToRoot()
7303 HInstruction* mask = InputAt(3); in GetBitstringMask()
7311 bool InstructionDataEquals(const HInstruction* other) const override { in InstructionDataEquals()
7358 HInstanceOf(HInstruction* object, in HInstanceOf()
7359 HInstruction* target_class_or_null, in HInstanceOf()
7401 explicit HBoundType(HInstruction* input, uint32_t dex_pc = kNoDexPc)
7410 bool InstructionDataEquals(const HInstruction* other) const override;
7449 HCheckCast(HInstruction* object, in HCheckCast()
7450 HInstruction* target_class_or_null, in HCheckCast()
7528 static constexpr size_t kFieldBarrierKind = HInstruction::kNumberOfGenericPackedBits;
7609 HConstructorFence(HInstruction* fence_object, in HConstructorFence()
7647 HInstruction* GetFenceObject() const { in GetFenceObject()
7664 static size_t RemoveConstructorFences(HInstruction* instruction);
7683 HInstruction* GetAssociatedAllocation(bool ignore_inputs = false);
7699 HMonitorOperation(HInstruction* object, OperationKind kind, uint32_t dex_pc) in HMonitorOperation()
7726 static constexpr size_t kFieldOperationKind = HInstruction::kNumberOfGenericPackedBits;
7731 static_assert(kNumberOfMonitorOperationPackedBits <= HInstruction::kMaxNumberOfPackedBits,
7738 HSelect(HInstruction* condition, in HSelect()
7739 HInstruction* true_value, in HSelect()
7740 HInstruction* false_value, in HSelect()
7755 HInstruction* GetFalseValue() const { return InputAt(0); } in GetFalseValue()
7756 HInstruction* GetTrueValue() const { return InputAt(1); } in GetTrueValue()
7757 HInstruction* GetCondition() const { return InputAt(2); } in GetCondition()
7760 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
7779 HInstruction* instruction) in MoveOperands()
7834 HInstruction* GetInstruction() const { return instruction_; } in GetInstruction()
7845 HInstruction* instruction_;
7863 HInstruction* instruction) { in AddMove()
7916 HIntermediateAddress(HInstruction* base_address, HInstruction* offset, uint32_t dex_pc) in HIntermediateAddress()
7930 bool InstructionDataEquals(const HInstruction* other ATTRIBUTE_UNUSED) const override { in InstructionDataEquals()
7935 HInstruction* GetBaseAddress() const { return InputAt(0); } in GetBaseAddress()
7936 HInstruction* GetOffset() const { return InputAt(1); } in GetOffset()
7967 virtual void VisitInstruction(HInstruction* instruction ATTRIBUTE_UNUSED) {} in VisitInstruction()
8015 HInstruction* ReplaceInstrOrPhiByClone(HInstruction* instr);
8025 void VisitInstruction(HInstruction* instruction) override { in VisitInstruction()
8119 inline bool IsInt64AndGet(HInstruction* instruction, /*out*/ int64_t* value) { in IsInt64AndGet()
8134 inline bool IsInt64Value(HInstruction* instruction, int64_t value) { in IsInt64Value()
8140 inline bool IsZeroBitPattern(HInstruction* instruction) { in IsZeroBitPattern()
8146 inline bool HInstruction::Is##type() const { return GetKind() == k##type; }
8154 inline bool HInstruction::Is##type() const { \
8168 inline const H##type* HInstruction::As##type() const { \ in FOR_EACH_ABSTRACT_INSTRUCTION()
8171 inline H##type* HInstruction::As##type() { \
8197 inline HInstruction* HuntForDeclaration(HInstruction* instruction) { in HuntForDeclaration()
8208 inline bool IsAddOrSub(const HInstruction* instruction) { in IsAddOrSub()
8212 void RemoveEnvironmentUses(HInstruction* instruction);
8213 bool HasEnvironmentUsedByOthers(HInstruction* instruction);
8214 void ResetEnvironmentInputRecords(HInstruction* instruction);
8218 bool IsGEZero(HInstruction* instruction);