From: W. Felix Handte Date: Fri, 4 Sep 2020 04:31:00 +0000 (-0400) Subject: Simplify Match Limit Checks X-Git-Tag: v1.4.7~80^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ed4383277040ee2318dae7b1b83dd879404c8fc2;p=thirdparty%2Fzstd.git Simplify Match Limit Checks Seems like a ~1.25% speedup. --- diff --git a/lib/compress/zstd_lazy.c b/lib/compress/zstd_lazy.c index efe58b3cd..898f1c21f 100644 --- a/lib/compress/zstd_lazy.c +++ b/lib/compress/zstd_lazy.c @@ -535,8 +535,7 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B if (count == cacheSize) { for (count = 0; count < chainLimit;) { if (i < minChain) { - countBeyondMinChain++; - if (countBeyondMinChain > cacheSize) { + if (!i || countBeyondMinChain++ > cacheSize) { /* only allow pulling `cacheSize` number of entries * into the cache or chainTable beyond `minChain`, * to replace the entries pulled out of the @@ -688,10 +687,13 @@ size_t ZSTD_HcFindBestMatch_generic ( matchIndex = dms->hashTable[ddsIdx + ddsAttempt]; match = ddsBase + matchIndex; - if (matchIndex < ddsLowestIndex) { + if (!matchIndex) { return ml; } + /* guaranteed by table construction */ + (void)ddsLowestIndex; + assert(matchIndex >= ddsLowestIndex); assert(match+4 <= ddsEnd); if (MEM_read32(match) == MEM_read32(ip)) { /* assumption : matchIndex <= dictLimit-4 (by table construction) */ @@ -727,10 +729,8 @@ size_t ZSTD_HcFindBestMatch_generic ( matchIndex = dms->chainTable[chainIndex]; match = ddsBase + matchIndex; - if (matchIndex < ddsLowestIndex) { - break; - } - + /* guaranteed by table construction */ + assert(matchIndex >= ddsLowestIndex); assert(match+4 <= ddsEnd); if (MEM_read32(match) == MEM_read32(ip)) { /* assumption : matchIndex <= dictLimit-4 (by table construction) */