GH-102300: Reuse objects with refcount == 1 in float specialized binary ops. (GH-102301)

This commit is contained in:
Mark Shannon 2023-03-13 10:34:54 +00:00 committed by GitHub
parent 78e4e6c3d7
commit 233e32f936
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 24 deletions

View file

@ -195,10 +195,7 @@ dummy_func(
STAT_INC(BINARY_OP, hit);
double dprod = ((PyFloatObject *)left)->ob_fval *
((PyFloatObject *)right)->ob_fval;
prod = PyFloat_FromDouble(dprod);
_Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc);
_Py_DECREF_SPECIALIZED(left, _PyFloat_ExactDealloc);
ERROR_IF(prod == NULL, error);
DECREF_INPUTS_AND_REUSE_FLOAT(left, right, dprod, prod);
}
inst(BINARY_OP_SUBTRACT_INT, (unused/1, left, right -- sub)) {
@ -218,10 +215,7 @@ dummy_func(
DEOPT_IF(!PyFloat_CheckExact(right), BINARY_OP);
STAT_INC(BINARY_OP, hit);
double dsub = ((PyFloatObject *)left)->ob_fval - ((PyFloatObject *)right)->ob_fval;
sub = PyFloat_FromDouble(dsub);
_Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc);
_Py_DECREF_SPECIALIZED(left, _PyFloat_ExactDealloc);
ERROR_IF(sub == NULL, error);
DECREF_INPUTS_AND_REUSE_FLOAT(left, right, dsub, sub);
}
inst(BINARY_OP_ADD_UNICODE, (unused/1, left, right -- res)) {
@ -278,10 +272,7 @@ dummy_func(
STAT_INC(BINARY_OP, hit);
double dsum = ((PyFloatObject *)left)->ob_fval +
((PyFloatObject *)right)->ob_fval;
sum = PyFloat_FromDouble(dsum);
_Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc);
_Py_DECREF_SPECIALIZED(left, _PyFloat_ExactDealloc);
ERROR_IF(sum == NULL, error);
DECREF_INPUTS_AND_REUSE_FLOAT(left, right, dsum, sum);
}
inst(BINARY_OP_ADD_INT, (unused/1, left, right -- sum)) {