Add a pressure_tracking flag to register banks.

This makes it possible to define register banks that opt out of register
pressure tracking. This will be used to define banks for special-purpose
registers like the CPU flags.

The pressure tracker does not need to use resources for a top-level
register class in a non-tracked bank. The constant MAX_TOPRCS is renamed
to MAX_TRACKED_TOPRCS to indicate that there may be top-level register
classes with higher numbers, but they won't require pressure tracking.

We won't be tracking register pressure for CPU flags since only one
value is allowed to be live at a time.
This commit is contained in:
Jakob Stoklund Olesen
2017-10-13 10:54:44 -07:00
parent c808447468
commit 1dbc55dadf
5 changed files with 66 additions and 21 deletions

View File

@@ -136,13 +136,21 @@ class TargetISA(object):
# Collect the top-level classes so they get numbered consecutively.
for bank in self.regbanks:
bank.finish_regclasses()
self.regclasses.extend(bank.toprcs)
# Always get the pressure tracking classes in first.
if bank.pressure_tracking:
self.regclasses.extend(bank.toprcs)
# The limit on the number of top-level register classes can be raised.
# This should be coordinated with the `MAX_TOPRCS` constant in
# This should be coordinated with the `MAX_TRACKED_TOPRCS` constant in
# `isa/registers.rs`.
assert len(self.regclasses) <= 4, "Too many top-level register classes"
# Get the remaining top-level register classes which may exceed
# `MAX_TRACKED_TOPRCS`.
for bank in self.regbanks:
if not bank.pressure_tracking:
self.regclasses.extend(bank.toprcs)
# Collect all of the non-top-level register classes.
# They are numbered strictly after the top-level classes.
for bank in self.regbanks: