[pypy-commit] pypy default: Jit: avoid a guard "len(s2) != 0" in the common case, just to handle
arigo
noreply at buildbot.pypy.org
Fri Oct 11 20:04:19 CEST 2013
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r67328:d994777be5ab
Date: 2013-10-11 20:03 +0200
http://bitbucket.org/pypy/pypy/changeset/d994777be5ab/
Log: Jit: avoid a guard "len(s2) != 0" in the common case, just to handle
the unusual case of find(s, '') or count(s, '').
diff --git a/rpython/rtyper/lltypesystem/rstr.py b/rpython/rtyper/lltypesystem/rstr.py
--- a/rpython/rtyper/lltypesystem/rstr.py
+++ b/rpython/rtyper/lltypesystem/rstr.py
@@ -577,9 +577,7 @@
return -1
m = len(s2.chars)
- if m == 0:
- return start
- elif m == 1:
+ if m == 1:
return cls.ll_find_char(s1, s2.chars[0], start, end)
return cls.ll_search(s1, s2, start, end, FAST_FIND)
@@ -594,9 +592,7 @@
return -1
m = len(s2.chars)
- if m == 0:
- return end
- elif m == 1:
+ if m == 1:
return cls.ll_rfind_char(s1, s2.chars[0], start, end)
return cls.ll_search(s1, s2, start, end, FAST_RFIND)
@@ -611,9 +607,7 @@
return 0
m = len(s2.chars)
- if m == 0:
- return end - start + 1
- elif m == 1:
+ if m == 1:
return cls.ll_count_char(s1, s2.chars[0], start, end)
res = cls.ll_search(s1, s2, start, end, FAST_COUNT)
@@ -629,6 +623,14 @@
n = end - start
m = len(s2.chars)
+ if m == 0:
+ if mode == FAST_COUNT:
+ return end - start + 1
+ elif mode == FAST_RFIND:
+ return end
+ else:
+ return start
+
w = n - m
if w < 0:
More information about the pypy-commit
mailing list