aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/executor_cases.c.h
diff options
context:
space:
mode:
authorSam Gross <colesbury@gmail.com>2024-11-22 17:55:33 +0000
committerGitHub <noreply@github.com>2024-11-22 12:55:33 -0500
commit4759ba6eec9f0b36b24b8eb7e7b120d471c67e82 (patch)
treeccadc7b0918507133e2f4ec4abff6d517f2b618e /Python/executor_cases.c.h
parent8214e0f709010a0e1fa06dc2ce004b5f6103cc6b (diff)
downloadcpython-4759ba6eec9f0b36b24b8eb7e7b120d471c67e82.tar.gz
cpython-4759ba6eec9f0b36b24b8eb7e7b120d471c67e82.zip
gh-127022: Simplify `PyStackRef_FromPyObjectSteal` (#127024)
This gets rid of the immortal check in `PyStackRef_FromPyObjectSteal()`. Overall, this improves performance about 2% in the free threading build. This also renames `PyStackRef_Is()` to `PyStackRef_IsExactly()` because the macro requires that the tag bits of the arguments match, which is only true in certain special cases.
Diffstat (limited to 'Python/executor_cases.c.h')
-rw-r--r--Python/executor_cases.c.h28
1 files changed, 10 insertions, 18 deletions
diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h
index 22de7ca11cd..5af970ec4ae 100644
--- a/Python/executor_cases.c.h
+++ b/Python/executor_cases.c.h
@@ -445,7 +445,7 @@
_PyStackRef res;
value = stack_pointer[-1];
assert(PyStackRef_BoolCheck(value));
- res = PyStackRef_Is(value, PyStackRef_False)
+ res = PyStackRef_IsFalse(value)
? PyStackRef_True : PyStackRef_False;
stack_pointer[-1] = res;
break;
@@ -519,7 +519,7 @@
_PyStackRef res;
value = stack_pointer[-1];
// This one is a bit weird, because we expect *some* failures:
- if (!PyStackRef_Is(value, PyStackRef_None)) {
+ if (!PyStackRef_IsNone(value)) {
UOP_STAT_INC(uopcode, miss);
JUMP_TO_JUMP_TARGET();
}
@@ -822,9 +822,7 @@
_PyStackRef left;
right = stack_pointer[-1];
left = stack_pointer[-2];
- #ifndef NDEBUG
PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
- #endif
PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
int next_oparg;
#if TIER_ONE
@@ -834,7 +832,7 @@
next_oparg = CURRENT_OPERAND0();
#endif
_PyStackRef *target_local = &GETLOCAL(next_oparg);
- if (!PyStackRef_Is(*target_local, left)) {
+ if (PyStackRef_AsPyObjectBorrow(*target_local) != left_o) {
UOP_STAT_INC(uopcode, miss);
JUMP_TO_JUMP_TARGET();
}
@@ -1522,7 +1520,7 @@
_PyErr_StackItem *exc_info = tstate->exc_info;
_PyFrame_SetStackPointer(frame, stack_pointer);
Py_XSETREF(exc_info->exc_value,
- PyStackRef_Is(exc_value, PyStackRef_None)
+ PyStackRef_IsNone(exc_value)
? NULL : PyStackRef_AsPyObjectSteal(exc_value));
stack_pointer = _PyFrame_GetStackPointer(frame);
stack_pointer += -1;
@@ -3110,13 +3108,7 @@
oparg = CURRENT_OPARG();
right = stack_pointer[-1];
left = stack_pointer[-2];
- #ifdef Py_GIL_DISABLED
- // On free-threaded builds, objects are conditionally immortalized.
- // So their bits don't always compare equally.
int res = Py_Is(PyStackRef_AsPyObjectBorrow(left), PyStackRef_AsPyObjectBorrow(right)) ^ oparg;
- #else
- int res = PyStackRef_Is(left, right) ^ oparg;
- #endif
PyStackRef_CLOSE(left);
PyStackRef_CLOSE(right);
b = res ? PyStackRef_True : PyStackRef_False;
@@ -3320,7 +3312,7 @@
_PyStackRef value;
_PyStackRef b;
value = stack_pointer[-1];
- if (PyStackRef_Is(value, PyStackRef_None)) {
+ if (PyStackRef_IsNone(value)) {
b = PyStackRef_True;
}
else {
@@ -4562,7 +4554,7 @@
_PyStackRef should_be_none;
should_be_none = stack_pointer[-1];
assert(STACK_LEVEL() == 2);
- if (!PyStackRef_Is(should_be_none, PyStackRef_None)) {
+ if (!PyStackRef_IsNone(should_be_none)) {
_PyFrame_SetStackPointer(frame, stack_pointer);
PyErr_Format(PyExc_TypeError,
"__init__() should return None, not '%.200s'",
@@ -5643,7 +5635,7 @@
case _GUARD_IS_TRUE_POP: {
_PyStackRef flag;
flag = stack_pointer[-1];
- int is_true = PyStackRef_Is(flag, PyStackRef_True);
+ int is_true = PyStackRef_IsTrue(flag);
stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
if (!is_true) {
@@ -5656,7 +5648,7 @@
case _GUARD_IS_FALSE_POP: {
_PyStackRef flag;
flag = stack_pointer[-1];
- int is_false = PyStackRef_Is(flag, PyStackRef_False);
+ int is_false = PyStackRef_IsFalse(flag);
stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());
if (!is_false) {
@@ -5669,7 +5661,7 @@
case _GUARD_IS_NONE_POP: {
_PyStackRef val;
val = stack_pointer[-1];
- int is_none = PyStackRef_Is(val, PyStackRef_None);
+ int is_none = PyStackRef_IsNone(val);
if (!is_none) {
PyStackRef_CLOSE(val);
stack_pointer += -1;
@@ -5687,7 +5679,7 @@
case _GUARD_IS_NOT_NONE_POP: {
_PyStackRef val;
val = stack_pointer[-1];
- int is_none = PyStackRef_Is(val, PyStackRef_None);
+ int is_none = PyStackRef_IsNone(val);
PyStackRef_CLOSE(val);
stack_pointer += -1;
assert(WITHIN_STACK_BOUNDS());