Remove the number field from the PredNode union type.

Predicate numbers are available in the maps
isa.settings.predicate_number and isa.instp_number instead.

Like the name field, predicate numbers don't interact well with
unique_pred().
This commit is contained in:
Jakob Stoklund Olesen
2017-07-26 11:01:47 -07:00
parent 98f0a8b8b4
commit ef812408f4
4 changed files with 21 additions and 31 deletions

View File

@@ -103,23 +103,17 @@ class TargetISA(object):
"""
Collect and number all predicates in use.
Sets `instp.number` for all used instruction predicates and places them
in `self.all_instps` in numerical order.
Ensures that all ISA predicates have an assigned bit number in
`self.settings`.
"""
self.all_instps = list() # type: List[PredNode]
instps = set() # type: Set[PredNode]
self.instp_number = OrderedDict() # type: OrderedDict[PredNode, int]
for cpumode in self.cpumodes:
for enc in cpumode.encodings:
instp = enc.instp
if instp and instp not in instps:
if instp and instp not in self.instp_number:
# assign predicate number starting from 0.
assert instp.number is None
instp.number = len(instps)
instps.add(instp)
self.all_instps.append(instp)
n = len(self.instp_number)
self.instp_number[instp] = n
# All referenced ISA predicates must have a number in
# `self.settings`. This may cause some parent predicates to be

View File

@@ -80,7 +80,6 @@ class Predicate(object):
def __init__(self, parts):
# type: (Sequence[PredNode]) -> None
self.number = None # type: int
self.parts = parts
self.context = reduce(
_descendant,
@@ -210,7 +209,6 @@ class FieldPredicate(object):
def __init__(self, field, function, args):
# type: (FormatField, str, Sequence[Any]) -> None
self.number = None # type: int
self.field = field
self.function = function
self.args = args
@@ -330,7 +328,6 @@ class TypePredicate(object):
assert value_type is not None
self.value_arg = value_arg
self.value_type = value_type
self.number = None # type: int
def __str__(self):
# type: () -> str

View File

@@ -23,7 +23,6 @@ class Setting(object):
def __init__(self, doc):
# type: (str) -> None
self.name = None # type: str # Assigned later by `extract_names()`.
self.number = None # type: int
self.__doc__ = doc
# Offset of byte in settings vector containing this setting.
self.byte_offset = None # type: int