Add fast-path for comparing interned (true) string objects.
This patch boosts performance for comparing identical string object by some 20% on my machine while not causing any noticable slow-down for other operations (according to tests done with pybench).
This commit is contained in:
parent
f0b11d2893
commit
c52d713b7a
|
@ -1778,6 +1778,21 @@ eval_frame(PyFrameObject *f)
|
||||||
x = res ? Py_True : Py_False;
|
x = res ? Py_True : Py_False;
|
||||||
Py_INCREF(x);
|
Py_INCREF(x);
|
||||||
}
|
}
|
||||||
|
else if (v == w && PyString_CheckExact(v)) {
|
||||||
|
/* Fast-path for comparing interned strings */
|
||||||
|
switch (oparg) {
|
||||||
|
case EQ: x = Py_True; break;
|
||||||
|
case LE: x = Py_True; break;
|
||||||
|
case GE: x = Py_True; break;
|
||||||
|
case NE: x = Py_False; break;
|
||||||
|
case GT: x = Py_False; break;
|
||||||
|
case LT: x = Py_False; break;
|
||||||
|
case IS: x = Py_True; break;
|
||||||
|
case IS_NOT: x = Py_False; break;
|
||||||
|
default: goto slow_compare;
|
||||||
|
}
|
||||||
|
Py_INCREF(x);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
slow_compare:
|
slow_compare:
|
||||||
x = cmp_outcome(oparg, v, w);
|
x = cmp_outcome(oparg, v, w);
|
||||||
|
|
Loading…
Reference in New Issue