diff options
Diffstat (limited to 'compiler/optimizing/nodes.h')
-rw-r--r-- | compiler/optimizing/nodes.h | 59 |
1 files changed, 25 insertions, 34 deletions
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h index 3aaa7c60cd..cc4bc11bdd 100644 --- a/compiler/optimizing/nodes.h +++ b/compiler/optimizing/nodes.h @@ -398,6 +398,7 @@ class HGraph : public ArenaObject<kArenaAllocGraph> { linear_order_(allocator->Adapter(kArenaAllocLinearOrder)), entry_block_(nullptr), exit_block_(nullptr), + maximum_number_of_out_vregs_(0), number_of_vregs_(0), number_of_in_vregs_(0), temporaries_vreg_slots_(0), @@ -549,6 +550,18 @@ class HGraph : public ArenaObject<kArenaAllocGraph> { current_instruction_id_ = id; } + uint16_t GetMaximumNumberOfOutVRegs() const { + return maximum_number_of_out_vregs_; + } + + void SetMaximumNumberOfOutVRegs(uint16_t new_value) { + maximum_number_of_out_vregs_ = new_value; + } + + void UpdateMaximumNumberOfOutVRegs(uint16_t other_value) { + maximum_number_of_out_vregs_ = std::max(maximum_number_of_out_vregs_, other_value); + } + void UpdateTemporariesVRegSlots(size_t slots) { temporaries_vreg_slots_ = std::max(slots, temporaries_vreg_slots_); } @@ -788,6 +801,9 @@ class HGraph : public ArenaObject<kArenaAllocGraph> { HBasicBlock* entry_block_; HBasicBlock* exit_block_; + // The maximum number of virtual registers arguments passed to a HInvoke in this graph. + uint16_t maximum_number_of_out_vregs_; + // The number of virtual registers in this method. Contains the parameters. uint16_t number_of_vregs_; @@ -4158,7 +4174,8 @@ class HEqual final : public HCondition { class HNotEqual final : public HCondition { public: - HNotEqual(HInstruction* first, HInstruction* second, uint32_t dex_pc = kNoDexPc) + HNotEqual(HInstruction* first, HInstruction* second, + uint32_t dex_pc = kNoDexPc) : HCondition(kNotEqual, first, second, dex_pc) { } @@ -4203,7 +4220,8 @@ class HNotEqual final : public HCondition { class HLessThan final : public HCondition { public: - HLessThan(HInstruction* first, HInstruction* second, uint32_t dex_pc = kNoDexPc) + HLessThan(HInstruction* first, HInstruction* second, + uint32_t dex_pc = kNoDexPc) : HCondition(kLessThan, first, second, dex_pc) { } @@ -4242,7 +4260,8 @@ class HLessThan final : public HCondition { class HLessThanOrEqual final : public HCondition { public: - HLessThanOrEqual(HInstruction* first, HInstruction* second, uint32_t dex_pc = kNoDexPc) + HLessThanOrEqual(HInstruction* first, HInstruction* second, + uint32_t dex_pc = kNoDexPc) : HCondition(kLessThanOrEqual, first, second, dex_pc) { } @@ -4756,9 +4775,6 @@ class HInvoke : public HVariableInputSizeInstruction { // inputs at the end of their list of inputs. uint32_t GetNumberOfArguments() const { return number_of_arguments_; } - // Return the number of outgoing vregs. - uint32_t GetNumberOfOutVRegs() const { return number_of_out_vregs_; } - InvokeType GetInvokeType() const { return GetPackedField<InvokeTypeField>(); } @@ -4824,7 +4840,6 @@ class HInvoke : public HVariableInputSizeInstruction { HInvoke(InstructionKind kind, ArenaAllocator* allocator, uint32_t number_of_arguments, - uint32_t number_of_out_vregs, uint32_t number_of_other_inputs, DataType::Type return_type, uint32_t dex_pc, @@ -4841,10 +4856,9 @@ class HInvoke : public HVariableInputSizeInstruction { allocator, number_of_arguments + number_of_other_inputs, kArenaAllocInvokeInputs), + number_of_arguments_(number_of_arguments), method_reference_(method_reference), resolved_method_reference_(resolved_method_reference), - number_of_arguments_(dchecked_integral_cast<uint16_t>(number_of_arguments)), - number_of_out_vregs_(dchecked_integral_cast<uint16_t>(number_of_out_vregs)), intrinsic_(Intrinsics::kNone), intrinsic_optimizations_(0) { SetPackedField<InvokeTypeField>(invoke_type); @@ -4854,14 +4868,11 @@ class HInvoke : public HVariableInputSizeInstruction { DEFAULT_COPY_CONSTRUCTOR(Invoke); + uint32_t number_of_arguments_; ArtMethod* resolved_method_; const MethodReference method_reference_; // Cached values of the resolved method, to avoid needing the mutator lock. const MethodReference resolved_method_reference_; - - uint16_t number_of_arguments_; - uint16_t number_of_out_vregs_; - Intrinsics intrinsic_; // A magic word holding optimizations for intrinsics. See intrinsics.h. @@ -4872,7 +4883,6 @@ class HInvokeUnresolved final : public HInvoke { public: HInvokeUnresolved(ArenaAllocator* allocator, uint32_t number_of_arguments, - uint32_t number_of_out_vregs, DataType::Type return_type, uint32_t dex_pc, MethodReference method_reference, @@ -4880,7 +4890,6 @@ class HInvokeUnresolved final : public HInvoke { : HInvoke(kInvokeUnresolved, allocator, number_of_arguments, - number_of_out_vregs, /* number_of_other_inputs= */ 0u, return_type, dex_pc, @@ -4903,7 +4912,6 @@ class HInvokePolymorphic final : public HInvoke { public: HInvokePolymorphic(ArenaAllocator* allocator, uint32_t number_of_arguments, - uint32_t number_of_out_vregs, DataType::Type return_type, uint32_t dex_pc, MethodReference method_reference, @@ -4916,7 +4924,6 @@ class HInvokePolymorphic final : public HInvoke { : HInvoke(kInvokePolymorphic, allocator, number_of_arguments, - number_of_out_vregs, /* number_of_other_inputs= */ 0u, return_type, dex_pc, @@ -4942,7 +4949,6 @@ class HInvokeCustom final : public HInvoke { public: HInvokeCustom(ArenaAllocator* allocator, uint32_t number_of_arguments, - uint32_t number_of_out_vregs, uint32_t call_site_index, DataType::Type return_type, uint32_t dex_pc, @@ -4951,7 +4957,6 @@ class HInvokeCustom final : public HInvoke { : HInvoke(kInvokeCustom, allocator, number_of_arguments, - number_of_out_vregs, /* number_of_other_inputs= */ 0u, return_type, dex_pc, @@ -4999,7 +5004,6 @@ class HInvokeStaticOrDirect final : public HInvoke { HInvokeStaticOrDirect(ArenaAllocator* allocator, uint32_t number_of_arguments, - uint32_t number_of_out_vregs, DataType::Type return_type, uint32_t dex_pc, MethodReference method_reference, @@ -5012,7 +5016,6 @@ class HInvokeStaticOrDirect final : public HInvoke { : HInvoke(kInvokeStaticOrDirect, allocator, number_of_arguments, - number_of_out_vregs, // There is potentially one extra argument for the HCurrentMethod input, // and one other if the clinit check is explicit. These can be removed later. (NeedsCurrentMethodInput(dispatch_info) ? 1u : 0u) + @@ -5228,7 +5231,6 @@ class HInvokeVirtual final : public HInvoke { public: HInvokeVirtual(ArenaAllocator* allocator, uint32_t number_of_arguments, - uint32_t number_of_out_vregs, DataType::Type return_type, uint32_t dex_pc, MethodReference method_reference, @@ -5239,7 +5241,6 @@ class HInvokeVirtual final : public HInvoke { : HInvoke(kInvokeVirtual, allocator, number_of_arguments, - number_of_out_vregs, 0u, return_type, dex_pc, @@ -5293,7 +5294,6 @@ class HInvokeInterface final : public HInvoke { public: HInvokeInterface(ArenaAllocator* allocator, uint32_t number_of_arguments, - uint32_t number_of_out_vregs, DataType::Type return_type, uint32_t dex_pc, MethodReference method_reference, @@ -5305,7 +5305,6 @@ class HInvokeInterface final : public HInvoke { : HInvoke(kInvokeInterface, allocator, number_of_arguments + (NeedsCurrentMethod(load_kind) ? 1 : 0), - number_of_out_vregs, 0u, return_type, dex_pc, @@ -7494,7 +7493,6 @@ class HStringBuilderAppend final : public HVariableInputSizeInstruction { public: HStringBuilderAppend(HIntConstant* format, uint32_t number_of_arguments, - uint32_t number_of_out_vregs, bool has_fp_args, ArenaAllocator* allocator, uint32_t dex_pc) @@ -7509,8 +7507,7 @@ class HStringBuilderAppend final : public HVariableInputSizeInstruction { dex_pc, allocator, number_of_arguments + /* format */ 1u, - kArenaAllocInvokeInputs), - number_of_out_vregs_(number_of_out_vregs) { + kArenaAllocInvokeInputs) { DCHECK_GE(number_of_arguments, 1u); // There must be something to append. SetRawInputAt(FormatIndex(), format); } @@ -7526,9 +7523,6 @@ class HStringBuilderAppend final : public HVariableInputSizeInstruction { return InputCount() - 1u; } - // Return the number of outgoing vregs. - uint32_t GetNumberOfOutVRegs() const { return number_of_out_vregs_; } - size_t FormatIndex() const { return GetNumberOfArguments(); } @@ -7547,9 +7541,6 @@ class HStringBuilderAppend final : public HVariableInputSizeInstruction { protected: DEFAULT_COPY_CONSTRUCTOR(StringBuilderAppend); - - private: - uint32_t number_of_out_vregs_; }; class HUnresolvedInstanceFieldGet final : public HExpression<1> { |