gh-131798: Optimize _UNARY_NEGATIVE (GH-135223)

This commit is contained in:
Noam Cohen
2025-06-23 22:42:09 +03:00
committed by GitHub
parent 569fc6870f
commit bda121862e
4 changed files with 33 additions and 2 deletions

View File

@@ -2432,6 +2432,24 @@ class TestUopsOptimization(unittest.TestCase):
self.assertIn("_POP_TOP_FLOAT", uops)
def test_unary_negative_long_float_type(self):
def testfunc(n):
for _ in range(n):
a = 9397
f = 9397.0
x = -a + -a
y = -f + -f
testfunc(TIER2_THRESHOLD)
ex = get_first_executor(testfunc)
self.assertIsNotNone(ex)
uops = get_opnames(ex)
self.assertNotIn("_GUARD_TOS_INT", uops)
self.assertNotIn("_GUARD_NOS_INT", uops)
self.assertNotIn("_GUARD_TOS_FLOAT", uops)
self.assertNotIn("_GUARD_NOS_FLOAT", uops)
def global_identity(x):
return x

View File

@@ -0,0 +1 @@
Optimize ``_UNARY_NEGATIVE`` in JIT-compiled code.

View File

@@ -452,7 +452,13 @@ dummy_func(void) {
res = sym_new_compact_int(ctx);
}
else {
res = sym_new_not_null(ctx);
PyTypeObject *type = sym_get_type(value);
if (type == &PyLong_Type || type == &PyFloat_Type) {
res = sym_new_type(ctx, type);
}
else {
res = sym_new_not_null(ctx);
}
}
}

View File

@@ -190,7 +190,13 @@
res = sym_new_compact_int(ctx);
}
else {
res = sym_new_not_null(ctx);
PyTypeObject *type = sym_get_type(value);
if (type == &PyLong_Type || type == &PyFloat_Type) {
res = sym_new_type(ctx, type);
}
else {
res = sym_new_not_null(ctx);
}
}
stack_pointer[-1] = res;
break;