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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user