From 36ceecb0e4b24f9775329315488d9c6acd030f9a Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 15 Nov 2023 14:27:54 -0800 Subject: [PATCH 1/6] Add executor_cases.c.h dependency for ceval.o --- Makefile.pre.in | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile.pre.in b/Makefile.pre.in index 2174ec3ac56158..3d766425abba34 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1609,6 +1609,7 @@ Python/ceval.o: \ $(srcdir)/Python/ceval_macros.h \ $(srcdir)/Python/condvar.h \ $(srcdir)/Python/generated_cases.c.h \ + $(srcdir)/Python/executor_cases.c.h \ $(srcdir)/Python/opcode_targets.h Python/flowgraph.o: \ From aef042acba32cb5f7cd3db484c222f1411fcfc90 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 15 Nov 2023 10:46:06 -0800 Subject: [PATCH 2/6] Clean up flags.py --- Tools/cases_generator/flags.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Tools/cases_generator/flags.py b/Tools/cases_generator/flags.py index 0066c9e74512c3..808c9e82bbce07 100644 --- a/Tools/cases_generator/flags.py +++ b/Tools/cases_generator/flags.py @@ -53,7 +53,7 @@ def makes_escaping_api_call(instr: parsing.InstDef) -> bool: if "CALL_INTRINSIC" in instr.name: - return True; + return True tkns = iter(instr.tokens) for tkn in tkns: if tkn.kind != lx.IDENTIFIER: @@ -79,6 +79,7 @@ def makes_escaping_api_call(instr: parsing.InstDef) -> bool: return True return False + @dataclasses.dataclass class InstructionFlags: """Construct and manipulate instruction flags""" @@ -124,9 +125,7 @@ def fromInstruction(instr: parsing.InstDef) -> "InstructionFlags": or variable_used(instr, "exception_unwind") or variable_used(instr, "resume_with_error") ), - HAS_ESCAPES_FLAG=( - makes_escaping_api_call(instr) - ), + HAS_ESCAPES_FLAG=makes_escaping_api_call(instr), ) @staticmethod From 83c0c68f5c85fd2ce202817f9ee2943c33331123 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 15 Nov 2023 10:47:50 -0800 Subject: [PATCH 3/6] Clean up parsing.py --- Tools/cases_generator/parsing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tools/cases_generator/parsing.py b/Tools/cases_generator/parsing.py index 49459be68ae5e8..d36bd52b022ea9 100644 --- a/Tools/cases_generator/parsing.py +++ b/Tools/cases_generator/parsing.py @@ -105,7 +105,7 @@ class OpName(Node): @dataclass class InstHeader(Node): - annotations : list[str] + annotations: list[str] kind: Literal["inst", "op"] name: str inputs: list[InputEffect] @@ -114,7 +114,7 @@ class InstHeader(Node): @dataclass class InstDef(Node): - annotations : list[str] + annotations: list[str] kind: Literal["inst", "op"] name: str inputs: list[InputEffect] From 840002078169d0af6bd6e2b9c74cd0dc5823568e Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 15 Nov 2023 15:32:13 -0800 Subject: [PATCH 4/6] Add back printing optimized uops --- Python/optimizer.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/Python/optimizer.c b/Python/optimizer.c index e14ad89bbe2921..5d1ef8a683c250 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -325,7 +325,8 @@ uop_dealloc(_PyUOpExecutorObject *self) { } static const char * -uop_name(int index) { +uop_name(int index) +{ if (index <= MAX_REAL_OPCODE) { return _PyOpcode_OpName[index]; } @@ -832,6 +833,24 @@ make_executor_from_uops(_PyUOpInstruction *buffer, _PyBloomFilter *dependencies) assert(dest == -1); executor->base.execute = _PyUopExecute; _Py_ExecutorInit((_PyExecutorObject *)executor, dependencies); +#ifdef Py_DEBUG + char *python_lltrace = Py_GETENV("PYTHON_LLTRACE"); + int lltrace = 0; + if (python_lltrace != NULL && *python_lltrace >= '0') { + lltrace = *python_lltrace - '0'; // TODO: Parse an int and all that + } + if (lltrace >= 2) { + printf("Optimized executor (length %d):\n", length); + for (int i = 0; i < length; i++) { + printf("%4d %s(%d, %d, %" PRIu64 ")\n", + i, + uop_name(executor->trace[i].opcode), + executor->trace[i].oparg, + executor->trace[i].target, + executor->trace[i].operand); + } + } +#endif return (_PyExecutorObject *)executor; } From 354910e38180a5fabe9db9cdb3bc45c7b3f193fe Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 15 Nov 2023 16:03:13 -0800 Subject: [PATCH 5/6] _SPECIALIZE_UNPACK_SEQUENCE is TIER_ONE_ONLY --- Python/bytecodes.c | 1 + Python/generated_cases.c.h | 1 + 2 files changed, 2 insertions(+) diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 8a7dcb8416eb8c..bd81dc19523598 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1210,6 +1210,7 @@ dummy_func( }; specializing op(_SPECIALIZE_UNPACK_SEQUENCE, (counter/1, seq -- seq)) { + TIER_ONE_ONLY #if ENABLE_SPECIALIZATION if (ADAPTIVE_COUNTER_IS_ZERO(counter)) { next_instr = this_instr; diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index fe0cbfe6330e51..a74529d88557be 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -1731,6 +1731,7 @@ seq = stack_pointer[-1]; { uint16_t counter = read_u16(&this_instr[1].cache); + TIER_ONE_ONLY #if ENABLE_SPECIALIZATION if (ADAPTIVE_COUNTER_IS_ZERO(counter)) { next_instr = this_instr; From 31d815f29d670bdf8696a5917ecfd28d33a7ee2c Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Thu, 16 Nov 2023 12:34:16 -0800 Subject: [PATCH 6/6] Double max trace length to 256 --- Include/internal/pycore_uops.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Include/internal/pycore_uops.h b/Include/internal/pycore_uops.h index 0ecbd2dfd1af73..8ab9aaf4108079 100644 --- a/Include/internal/pycore_uops.h +++ b/Include/internal/pycore_uops.h @@ -10,7 +10,7 @@ extern "C" { #include "pycore_frame.h" // _PyInterpreterFrame -#define _Py_UOP_MAX_TRACE_LENGTH 128 +#define _Py_UOP_MAX_TRACE_LENGTH 256 typedef struct { uint16_t opcode; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy