gh-131798: Optimize _UNARY_NEGATIVE (GH-135223)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Optimize ``_UNARY_NEGATIVE`` in JIT-compiled code.
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
8
Python/optimizer_cases.c.h
generated
8
Python/optimizer_cases.c.h
generated
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user