[Python-checkins] cpython: Close #13126: "Simplify" FASTSEARCH() code to help the compiler to emit more
victor.stinner
python-checkins at python.org
Mon Apr 8 00:27:14 CEST 2013
http://hg.python.org/cpython/rev/c5e2ea9e3aa7
changeset: 83192:c5e2ea9e3aa7
user: Victor Stinner <victor.stinner at gmail.com>
date: Mon Apr 08 00:26:43 2013 +0200
summary:
Close #13126: "Simplify" FASTSEARCH() code to help the compiler to emit more
efficient machine code. Patch written by Antoine Pitrou.
Without this change, str.find() was 10% slower than str.rfind() in the worst
case.
files:
Objects/stringlib/fastsearch.h | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/Objects/stringlib/fastsearch.h b/Objects/stringlib/fastsearch.h
--- a/Objects/stringlib/fastsearch.h
+++ b/Objects/stringlib/fastsearch.h
@@ -142,6 +142,8 @@
mask = 0;
if (mode != FAST_RSEARCH) {
+ const STRINGLIB_CHAR *ss = s + m - 1;
+ const STRINGLIB_CHAR *pp = p + m - 1;
/* create compressed boyer-moore delta 1 table */
@@ -156,7 +158,7 @@
for (i = 0; i <= w; i++) {
/* note: using mlast in the skip path slows things down on x86 */
- if (s[i+m-1] == p[m-1]) {
+ if (ss[i] == pp[0]) {
/* candidate match */
for (j = 0; j < mlast; j++)
if (s[i+j] != p[j])
@@ -172,13 +174,13 @@
continue;
}
/* miss: check if next character is part of pattern */
- if (!STRINGLIB_BLOOM(mask, s[i+m]))
+ if (!STRINGLIB_BLOOM(mask, ss[i+1]))
i = i + m;
else
i = i + skip;
} else {
/* skip: check if next character is part of pattern */
- if (!STRINGLIB_BLOOM(mask, s[i+m]))
+ if (!STRINGLIB_BLOOM(mask, ss[i+1]))
i = i + m;
}
}
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list