summaryrefslogtreecommitdiff
path: root/compiler/optimizing/register_allocation_resolver.h
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/optimizing/register_allocation_resolver.h')
-rw-r--r--compiler/optimizing/register_allocation_resolver.h14
1 files changed, 9 insertions, 5 deletions
diff --git a/compiler/optimizing/register_allocation_resolver.h b/compiler/optimizing/register_allocation_resolver.h
index 6ceb9bc955..a70ceae076 100644
--- a/compiler/optimizing/register_allocation_resolver.h
+++ b/compiler/optimizing/register_allocation_resolver.h
@@ -20,6 +20,7 @@
#include "base/arena_containers.h"
#include "base/value_object.h"
#include "primitive.h"
+#include "utils/array_ref.h"
namespace art {
@@ -43,8 +44,7 @@ class RegisterAllocationResolver : ValueObject {
CodeGenerator* codegen,
const SsaLivenessAnalysis& liveness);
- void Resolve(size_t max_safepoint_live_core_regs,
- size_t max_safepoint_live_fp_regs,
+ void Resolve(ArrayRef<HInstruction* const> safepoints,
size_t reserved_out_slots, // Includes slot(s) for the art method.
size_t int_spill_slots,
size_t long_spill_slots,
@@ -54,10 +54,14 @@ class RegisterAllocationResolver : ValueObject {
const ArenaVector<LiveInterval*>& temp_intervals);
private:
+ // Update live registers of safepoint location summary.
+ void UpdateSafepointLiveRegisters();
+
+ // Calculate the maximum size of the spill area for safepoints.
+ size_t CalculateMaximumSafepointSpillSize(ArrayRef<HInstruction* const> safepoints);
+
// Connect adjacent siblings within blocks, and resolve inputs along the way.
- // Uses max_safepoint_live_regs to check that we did not underestimate the
- // number of live registers at safepoints.
- void ConnectSiblings(LiveInterval* interval, size_t max_safepoint_live_regs);
+ void ConnectSiblings(LiveInterval* interval);
// Connect siblings between block entries and exits.
void ConnectSplitSiblings(LiveInterval* interval, HBasicBlock* from, HBasicBlock* to) const;