]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-113657: Add back missing _SET_IP uops in tier two (GH-113662)
authorBrandt Bucher <brandtbucher@microsoft.com>
Tue, 2 Jan 2024 22:09:57 +0000 (14:09 -0800)
committerGitHub <noreply@github.com>
Tue, 2 Jan 2024 22:09:57 +0000 (14:09 -0800)
Misc/NEWS.d/next/Core and Builtins/2024-01-02-11-14-29.gh-issue-113657.CQo9vF.rst [new file with mode: 0644]
Python/optimizer_analysis.c

diff --git a/Misc/NEWS.d/next/Core and Builtins/2024-01-02-11-14-29.gh-issue-113657.CQo9vF.rst b/Misc/NEWS.d/next/Core and Builtins/2024-01-02-11-14-29.gh-issue-113657.CQo9vF.rst
new file mode 100644 (file)
index 0000000..b520b5c
--- /dev/null
@@ -0,0 +1,2 @@
+Fix an issue that caused important instruction pointer updates to be
+optimized out of tier two traces.
index 8b471d70a10d7da36780c297c86b4c940346a252..4eb2d9711f5e56dcf0172919764574876967b9b8 100644 (file)
@@ -4,6 +4,7 @@
 #include "pycore_opcode_metadata.h"
 #include "pycore_opcode_utils.h"
 #include "pycore_pystate.h"       // _PyInterpreterState_GET()
+#include "pycore_uop_metadata.h"
 #include "pycore_uops.h"
 #include "pycore_long.h"
 #include "cpython/optimizer.h"
@@ -35,13 +36,13 @@ remove_unneeded_uops(_PyUOpInstruction *buffer, int buffer_size)
             break;
         }
         else {
-            if (OPCODE_HAS_ESCAPES(opcode)) {
+            if (_PyUop_Flags[opcode] & HAS_ESCAPES_FLAG) {
                 maybe_invalid = true;
                 if (last_set_ip >= 0) {
                     buffer[last_set_ip].opcode = _SET_IP;
                 }
             }
-            if (OPCODE_HAS_ERROR(opcode) || opcode == _PUSH_FRAME) {
+            if ((_PyUop_Flags[opcode] & HAS_ERROR_FLAG) || opcode == _PUSH_FRAME) {
                 if (last_set_ip >= 0) {
                     buffer[last_set_ip].opcode = _SET_IP;
                 }