diff options
author | Guido van Rossum <guido@python.org> | 2023-06-27 21:17:41 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-27 21:17:41 (GMT) |
commit | 6b5166fb12c4744544da4ee26ef437d025eb762a (patch) | |
tree | cfa4fcb750ef895be8598c1b8b27f6cb41fff9f4 /Python | |
parent | 529088100952b31797a29ef7e0f5716613b32d66 (diff) | |
download | cpython-6b5166fb12c4744544da4ee26ef437d025eb762a.zip cpython-6b5166fb12c4744544da4ee26ef437d025eb762a.tar.gz cpython-6b5166fb12c4744544da4ee26ef437d025eb762a.tar.bz2 |
gh-104584: Change DEOPT_IF in uops executor (#106146)
This effectively reverts bb578a0, restoring the original DEOPT_IF() macro in ceval_macros.h, and redefining it in the Tier 2 interpreter. We can get rid of the PREDICTED() macros there as well!
Diffstat (limited to 'Python')
-rw-r--r-- | Python/ceval.c | 16 | ||||
-rw-r--r-- | Python/ceval_macros.h | 3 |
2 files changed, 7 insertions, 12 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index 3e0dcf8..e19860d 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -2767,10 +2767,11 @@ void Py_LeaveRecursiveCall(void) ///////////////////// Experimental UOp Interpreter ///////////////////// -// UPDATE_MISS_STATS (called by DEOPT_IF) uses next_instr -// TODO: Make it do something useful -#undef UPDATE_MISS_STATS -#define UPDATE_MISS_STATS(INSTNAME) ((void)0) +#undef DEOPT_IF +#define DEOPT_IF(COND, INSTNAME) \ + if ((COND)) { \ + goto deoptimize; \ + } _PyInterpreterFrame * _PyUopExecute(_PyExecutorObject *executor, _PyInterpreterFrame *frame, PyObject **stack_pointer) @@ -2875,12 +2876,7 @@ error: Py_DECREF(self); return NULL; -PREDICTED(UNPACK_SEQUENCE) -PREDICTED(COMPARE_OP) -PREDICTED(LOAD_SUPER_ATTR) -PREDICTED(STORE_SUBSCR) -PREDICTED(BINARY_SUBSCR) -PREDICTED(BINARY_OP) +deoptimize: // On DEOPT_IF we just repeat the last instruction. // This presumes nothing was popped from the stack (nor pushed). #ifdef LLTRACE diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h index f5c78fc..0d41ef5 100644 --- a/Python/ceval_macros.h +++ b/Python/ceval_macros.h @@ -264,12 +264,11 @@ GETITEM(PyObject *v, Py_ssize_t i) { #define UPDATE_MISS_STATS(INSTNAME) ((void)0) #endif -// NOTE: in the uops version, opcode may be > 255 #define DEOPT_IF(COND, INSTNAME) \ if ((COND)) { \ /* This is only a single jump on release builds! */ \ UPDATE_MISS_STATS((INSTNAME)); \ - assert(opcode >= 256 || _PyOpcode_Deopt[opcode] == (INSTNAME)); \ + assert(_PyOpcode_Deopt[opcode] == (INSTNAME)); \ GO_TO_INSTRUCTION(INSTNAME); \ } |