summaryrefslogtreecommitdiff
path: root/compiler/optimizing/nodes.h
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/optimizing/nodes.h')
-rw-r--r--compiler/optimizing/nodes.h59
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> {