summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2024-08-14 11:04:05 (GMT)
committerGitHub <noreply@github.com>2024-08-14 11:04:05 (GMT)
commiteec7bdaf01a5c1f89265565876964c825ea334fc (patch)
tree1a7b9c7a1631c0dad9cbf7304c1355dc19b65fdb /Tools
parent315a933a5b3ae4379077096b6852f85a81a7d75f (diff)
downloadcpython-eec7bdaf01a5c1f89265565876964c825ea334fc.zip
cpython-eec7bdaf01a5c1f89265565876964c825ea334fc.tar.gz
cpython-eec7bdaf01a5c1f89265565876964c825ea334fc.tar.bz2
GH-120024: Remove `CHECK_EVAL_BREAKER` macro. (GH-122968)
* Factor some instructions into micro-ops to isolate CHECK_EVAL_BREAKER for escape analysis * Eliminate CHECK_EVAL_BREAKER macro
Diffstat (limited to 'Tools')
-rw-r--r--Tools/cases_generator/analyzer.py17
-rw-r--r--Tools/cases_generator/generators_common.py15
-rw-r--r--Tools/cases_generator/tier1_generator.py2
-rw-r--r--Tools/cases_generator/tier2_generator.py2
4 files changed, 1 insertions, 35 deletions
diff --git a/Tools/cases_generator/analyzer.py b/Tools/cases_generator/analyzer.py
index 8c75165..3cc36b6 100644
--- a/Tools/cases_generator/analyzer.py
+++ b/Tools/cases_generator/analyzer.py
@@ -14,7 +14,6 @@ class Properties:
oparg: bool
jumps: bool
eval_breaker: bool
- ends_with_eval_breaker: bool
needs_this: bool
always_exits: bool
stores_sp: bool
@@ -44,7 +43,6 @@ class Properties:
oparg=any(p.oparg for p in properties),
jumps=any(p.jumps for p in properties),
eval_breaker=any(p.eval_breaker for p in properties),
- ends_with_eval_breaker=any(p.ends_with_eval_breaker for p in properties),
needs_this=any(p.needs_this for p in properties),
always_exits=any(p.always_exits for p in properties),
stores_sp=any(p.stores_sp for p in properties),
@@ -70,7 +68,6 @@ SKIP_PROPERTIES = Properties(
oparg=False,
jumps=False,
eval_breaker=False,
- ends_with_eval_breaker=False,
needs_this=False,
always_exits=False,
stores_sp=False,
@@ -194,13 +191,6 @@ class Uop:
return "has unused cache entries"
if self.properties.error_with_pop and self.properties.error_without_pop:
return "has both popping and not-popping errors"
- if self.properties.eval_breaker:
- if self.properties.error_with_pop or self.properties.error_without_pop:
- return "has error handling and eval-breaker check"
- if self.properties.side_exit:
- return "exits and eval-breaker check"
- if self.properties.deopts:
- return "deopts and eval-breaker check"
return None
def is_viable(self) -> bool:
@@ -587,10 +577,6 @@ EXITS = {
}
-def eval_breaker_at_end(op: parser.InstDef) -> bool:
- return op.tokens[-5].text == "CHECK_EVAL_BREAKER"
-
-
def always_exits(op: parser.InstDef) -> bool:
depth = 0
tkn_iter = iter(op.tokens)
@@ -678,8 +664,7 @@ def compute_properties(op: parser.InstDef) -> Properties:
side_exit=exits_if,
oparg=oparg_used(op),
jumps=variable_used(op, "JUMPBY"),
- eval_breaker=variable_used(op, "CHECK_EVAL_BREAKER"),
- ends_with_eval_breaker=eval_breaker_at_end(op),
+ eval_breaker="CHECK_PERIODIC" in op.name,
needs_this=variable_used(op, "this_instr"),
always_exits=always_exits(op),
stores_sp=variable_used(op, "SYNC_SP"),
diff --git a/Tools/cases_generator/generators_common.py b/Tools/cases_generator/generators_common.py
index 6ed9d83..dd4057c 100644
--- a/Tools/cases_generator/generators_common.py
+++ b/Tools/cases_generator/generators_common.py
@@ -75,7 +75,6 @@ class Emitter:
"ERROR_IF": self.error_if,
"ERROR_NO_POP": self.error_no_pop,
"DECREF_INPUTS": self.decref_inputs,
- "CHECK_EVAL_BREAKER": self.check_eval_breaker,
"SYNC_SP": self.sync_sp,
"PyStackRef_FromPyObjectNew": self.py_stack_ref_from_py_object_new,
}
@@ -190,20 +189,6 @@ class Emitter:
next(tkn_iter)
stack.flush(self.out)
- def check_eval_breaker(
- self,
- tkn: Token,
- tkn_iter: Iterator[Token],
- uop: Uop,
- stack: Stack,
- inst: Instruction | None,
- ) -> None:
- next(tkn_iter)
- next(tkn_iter)
- next(tkn_iter)
- if not uop.properties.ends_with_eval_breaker:
- self.out.emit_at("CHECK_EVAL_BREAKER();", tkn)
-
def py_stack_ref_from_py_object_new(
self,
tkn: Token,
diff --git a/Tools/cases_generator/tier1_generator.py b/Tools/cases_generator/tier1_generator.py
index c3456cd..c749896 100644
--- a/Tools/cases_generator/tier1_generator.py
+++ b/Tools/cases_generator/tier1_generator.py
@@ -201,8 +201,6 @@ def generate_tier1(
out.start_line()
if not inst.parts[-1].properties.always_exits:
stack.flush(out)
- if inst.parts[-1].properties.ends_with_eval_breaker:
- out.emit("CHECK_EVAL_BREAKER();\n")
out.emit("DISPATCH();\n")
out.start_line()
out.emit("}")
diff --git a/Tools/cases_generator/tier2_generator.py b/Tools/cases_generator/tier2_generator.py
index 7ed9376..b7c70fd 100644
--- a/Tools/cases_generator/tier2_generator.py
+++ b/Tools/cases_generator/tier2_generator.py
@@ -230,8 +230,6 @@ def generate_tier2(
out.start_line()
if not uop.properties.always_exits:
stack.flush(out)
- if uop.properties.ends_with_eval_breaker:
- out.emit("CHECK_EVAL_BREAKER();\n")
out.emit("break;\n")
out.start_line()
out.emit("}")