Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
- Double max trace size to 256
- Add a dependency on executor_cases.c.h for ceval.o
- Mark `_SPECIALIZE_UNPACK_SEQUENCE` as `TIER_ONE_ONLY`
- Add debug output back showing the optimized trace
- Bunch of cleanups to Tools/cases_generator/
  • Loading branch information
gvanrossum authored Nov 17, 2023
1 parent b414497 commit be0bd54
Show file tree
Hide file tree
Showing 7 changed files with 29 additions and 8 deletions.
2 changes: 1 addition & 1 deletion Include/internal/pycore_uops.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions Makefile.pre.in
Original file line number Diff line number Diff line change
Expand Up @@ -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: \
Expand Down
1 change: 1 addition & 0 deletions Python/bytecodes.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions Python/generated_cases.c.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 20 additions & 1 deletion Python/optimizer.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
}
Expand Down Expand Up @@ -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;
}

Expand Down
7 changes: 3 additions & 4 deletions Tools/cases_generator/flags.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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"""
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions Tools/cases_generator/parsing.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -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]
Expand Down

0 comments on commit be0bd54

Please sign in to comment.