diff options
author | Mark Shannon <mark@hotpy.org> | 2024-08-14 11:04:05 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-14 11:04:05 (GMT) |
commit | eec7bdaf01a5c1f89265565876964c825ea334fc (patch) | |
tree | 1a7b9c7a1631c0dad9cbf7304c1355dc19b65fdb /Tools | |
parent | 315a933a5b3ae4379077096b6852f85a81a7d75f (diff) | |
download | cpython-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.py | 17 | ||||
-rw-r--r-- | Tools/cases_generator/generators_common.py | 15 | ||||
-rw-r--r-- | Tools/cases_generator/tier1_generator.py | 2 | ||||
-rw-r--r-- | Tools/cases_generator/tier2_generator.py | 2 |
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("}") |