@@ -156,6 +156,8 @@ def effect_str(effects: list[StackEffect]) -> str:
156
156
return str (n_effect )
157
157
158
158
instr : AnyInstruction | None
159
+ popped : str | None = None
160
+ pushed : str | None = None
159
161
match thing :
160
162
case parsing .InstDef ():
161
163
if thing .kind != "op" or self .instrs [thing .name ].is_viable_uop ():
@@ -173,21 +175,22 @@ def effect_str(effects: list[StackEffect]) -> str:
173
175
instr = self .pseudo_instrs [thing .name ]
174
176
# Calculate stack effect, and check that it's the the same
175
177
# for all targets.
176
- for idx , target in enumerate ( self .pseudos [thing .name ].targets ) :
178
+ for target in self .pseudos [thing .name ].targets :
177
179
target_instr = self .instrs .get (target )
178
180
# Currently target is always an instr. This could change
179
181
# in the future, e.g., if we have a pseudo targetting a
180
182
# macro instruction.
181
183
assert target_instr
182
184
target_popped = effect_str (target_instr .input_effects )
183
185
target_pushed = effect_str (target_instr .output_effects )
184
- if idx == 0 :
186
+ if popped is None :
185
187
popped , pushed = target_popped , target_pushed
186
188
else :
187
189
assert popped == target_popped
188
190
assert pushed == target_pushed
189
191
case _:
190
192
assert_never (thing )
193
+ assert popped is not None and pushed is not None
191
194
return instr , popped , pushed
192
195
193
196
@contextlib .contextmanager
@@ -376,6 +379,7 @@ def write_metadata(self, metadata_filename: str, pymetadata_filename: str) -> No
376
379
# Compute the set of all instruction formats.
377
380
all_formats : set [str ] = set ()
378
381
for thing in self .everything :
382
+ format : str | None = None
379
383
match thing :
380
384
case OverriddenInstructionPlaceHolder ():
381
385
continue
@@ -384,15 +388,16 @@ def write_metadata(self, metadata_filename: str, pymetadata_filename: str) -> No
384
388
case parsing .Macro ():
385
389
format = self .macro_instrs [thing .name ].instr_fmt
386
390
case parsing .Pseudo ():
387
- for idx , target in enumerate ( self .pseudos [thing .name ].targets ) :
391
+ for target in self .pseudos [thing .name ].targets :
388
392
target_instr = self .instrs .get (target )
389
393
assert target_instr
390
- if idx == 0 :
394
+ if format is None :
391
395
format = target_instr .instr_fmt
392
396
else :
393
397
assert format == target_instr .instr_fmt
394
398
case _:
395
399
assert_never (thing )
400
+ assert format is not None
396
401
all_formats .add (format )
397
402
398
403
# Turn it into a sorted list of enum values.
0 commit comments