From: Marc-André Lemburg Date: Wed, 7 Nov 2001 14:54:49 +0000 (+0000) Subject: Add fast-path for comparing interned (true) string objects. X-Git-Tag: v2.2.1c1~831 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c52d713b7a324b9ed29ba75f438bf11b96953e41;p=thirdparty%2FPython%2Fcpython.git 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). --- diff --git a/Python/ceval.c b/Python/ceval.c index b70773434965..34b4cb954d88 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1778,6 +1778,21 @@ eval_frame(PyFrameObject *f) x = res ? Py_True : Py_False; 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 { slow_compare: x = cmp_outcome(oparg, v, w);