mirror of
https://github.com/python/cpython
synced 2024-09-04 15:56:13 +00:00
GH-113657: Add back missing _SET_IP uops in tier two (GH-113662)
This commit is contained in:
parent
bab0758ea4
commit
b0fb074d59
|
@ -0,0 +1,2 @@
|
||||||
|
Fix an issue that caused important instruction pointer updates to be
|
||||||
|
optimized out of tier two traces.
|
|
@ -4,6 +4,7 @@
|
||||||
#include "pycore_opcode_metadata.h"
|
#include "pycore_opcode_metadata.h"
|
||||||
#include "pycore_opcode_utils.h"
|
#include "pycore_opcode_utils.h"
|
||||||
#include "pycore_pystate.h" // _PyInterpreterState_GET()
|
#include "pycore_pystate.h" // _PyInterpreterState_GET()
|
||||||
|
#include "pycore_uop_metadata.h"
|
||||||
#include "pycore_uops.h"
|
#include "pycore_uops.h"
|
||||||
#include "pycore_long.h"
|
#include "pycore_long.h"
|
||||||
#include "cpython/optimizer.h"
|
#include "cpython/optimizer.h"
|
||||||
|
@ -35,13 +36,13 @@ remove_unneeded_uops(_PyUOpInstruction *buffer, int buffer_size)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (OPCODE_HAS_ESCAPES(opcode)) {
|
if (_PyUop_Flags[opcode] & HAS_ESCAPES_FLAG) {
|
||||||
maybe_invalid = true;
|
maybe_invalid = true;
|
||||||
if (last_set_ip >= 0) {
|
if (last_set_ip >= 0) {
|
||||||
buffer[last_set_ip].opcode = _SET_IP;
|
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) {
|
if (last_set_ip >= 0) {
|
||||||
buffer[last_set_ip].opcode = _SET_IP;
|
buffer[last_set_ip].opcode = _SET_IP;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue