Skip to content

Commit 2c6f676

Browse files
committed
Simplify the case extract
1 parent 71c9890 commit 2c6f676

2 files changed

Lines changed: 10 additions & 30 deletions

File tree

Tools/cases_generator/tier2_generator.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -281,10 +281,9 @@ def generate_tier2(
281281
emitter = Tier2Emitter(out, analysis.labels, exit_depth)
282282
opname = f"{uop.name}_r{inputs}{outputs}"
283283
needed_cached_registers = max(inputs, outputs)
284-
out.emit(f"/* BEGIN_JIT_CASE {opname} */\n")
284+
out.emit(f"case {opname}: {{\n")
285285
if needed_cached_registers:
286286
out.emit(f"#if MAX_CACHED_REGISTER >= {needed_cached_registers}\n")
287-
out.emit(f"case {opname}: {{\n")
288287
out.emit(f"CHECK_CURRENT_CACHED_VALUES({inputs});\n")
289288
out.emit("assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());\n")
290289
declare_variables(uop, out)
@@ -297,13 +296,13 @@ def generate_tier2(
297296
out.emit("assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE());\n")
298297
if not uop.properties.always_exits:
299298
out.emit("break;\n")
299+
if needed_cached_registers:
300+
out.emit("#else\n")
301+
out.emit("Py_UNREACHABLE();\n")
302+
out.emit("#endif\n")
300303
out.start_line()
301304
out.emit("}")
302305
out.emit("\n\n")
303-
if needed_cached_registers:
304-
out.emit("#endif\n\n")
305-
out.emit(f"/* END_JIT_CASE {opname} */\n")
306-
out.emit("\n")
307306
out.emit("\n")
308307
outfile.write("#undef TIER_TWO\n")
309308

Tools/jit/_targets.py

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,29 +36,6 @@
3636
"_R", _schema.COFFRelocation, _schema.ELFRelocation, _schema.MachORelocation
3737
)
3838

39-
def _extract_jit_cases(generated_cases: str) -> list[tuple[str, str]]:
40-
begin_case = re.compile(r"\s*/\* BEGIN_JIT_CASE (\w+) \*/\n")
41-
cases_and_opnames: list[tuple[str, str]] = []
42-
current_opname: str | None = None
43-
current_lines: list[str] = []
44-
for line in generated_cases.splitlines(keepends=True):
45-
if current_opname is None:
46-
match = begin_case.fullmatch(line)
47-
if match is not None:
48-
current_opname = match.group(1)
49-
current_lines = []
50-
continue
51-
if line.strip() == f"/* END_JIT_CASE {current_opname} */":
52-
cases_and_opnames.append(("".join(current_lines), current_opname))
53-
current_opname = None
54-
current_lines = []
55-
continue
56-
current_lines.append(line)
57-
if current_opname is not None:
58-
raise RuntimeError(f"Unterminated JIT case block for {current_opname}")
59-
return cases_and_opnames
60-
61-
6239
@dataclasses.dataclass
6340
class _Target(typing.Generic[_S, _R]):
6441
triple: str
@@ -217,7 +194,11 @@ async def _compile(
217194

218195
async def _build_stencils(self) -> dict[str, _stencils.StencilGroup]:
219196
generated_cases = PYTHON_EXECUTOR_CASES_C_H.read_text()
220-
cases_and_opnames = _extract_jit_cases(generated_cases)
197+
cases_and_opnames = sorted(
198+
re.findall(
199+
r"\n {8}(case (\w+): \{\n.*?\n {8}\})", generated_cases, flags=re.DOTALL
200+
)
201+
)
221202
tasks = []
222203
with tempfile.TemporaryDirectory() as tempdir:
223204
work = pathlib.Path(tempdir).resolve()

0 commit comments

Comments
 (0)