From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: lib/zstd/compress/zstd_opt.c:959:61: warning: Same expression on both sides of '-' because 'ip' and 'istart' represent the same value. [knownConditionTrueFalse]
Date: Thu, 30 Dec 2021 19:59:11 +0800 [thread overview]
Message-ID: <202112301855.dFsoSuw3-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 24990 bytes --]
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Nick Terrell <terrelln@fb.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: eec4df26e24e978e49ccf9bcf49ca0f2ccdaeffe
commit: e0c1b49f5b674cca7b10549c53b3791d0bbc90a8 lib: zstd: Upgrade to latest upstream zstd version 1.4.10
date: 7 weeks ago
:::::: branch date: 17 hours ago
:::::: commit date: 7 weeks ago
compiler: h8300-linux-gcc (GCC) 11.2.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
cppcheck possible warnings: (new ones prefixed by >>, may not real problems)
>> net/wireless/util.c:1202:6: warning: Same expression on both sides of '-'. [duplicateExpression]
[6 - 6] = 26950, /* MCS 9.1 : 2695.0 mbps */
^
>> net/wireless/nl80211.c:73:6: warning: Local variable wdev_id shadows outer function [shadowFunction]
u64 wdev_id = 0;
^
net/wireless/nl80211.h:19:19: note: Shadowed declaration
static inline u64 wdev_id(struct wireless_dev *wdev)
^
net/wireless/nl80211.c:73:6: note: Shadow variable
u64 wdev_id = 0;
^
net/wireless/nl80211.c:157:7: warning: Local variable wdev_id shadows outer function [shadowFunction]
u64 wdev_id = nla_get_u64(attrs[NL80211_ATTR_WDEV]);
^
net/wireless/nl80211.h:19:19: note: Shadowed declaration
static inline u64 wdev_id(struct wireless_dev *wdev)
^
net/wireless/nl80211.c:157:7: note: Shadow variable
u64 wdev_id = nla_get_u64(attrs[NL80211_ATTR_WDEV]);
^
>> lib/zstd/compress/zstd_opt.c:959:61: warning: Same expression on both sides of '-' because 'ip' and 'istart' represent the same value. [knownConditionTrueFalse]
ZSTD_opt_getNextMatchAndUpdateSeqStore(&optLdm, (U32)(ip-istart), (U32)(iend-ip));
^
lib/zstd/compress/zstd_opt.c:940:22: note: 'ip' is assigned value 'istart' here.
const BYTE* ip = istart;
^
lib/zstd/compress/zstd_opt.c:959:61: note: Same expression on both sides of '-' because 'ip' and 'istart' represent the same value.
ZSTD_opt_getNextMatchAndUpdateSeqStore(&optLdm, (U32)(ip-istart), (U32)(iend-ip));
^
>> net/bluetooth/bnep/core.c:111:2: warning: Assignment of function parameter has no effect outside the function. Did you forget dereferencing it? [uselessAssignmentPtrArg]
data++;
^
net/bluetooth/bnep/core.c:157:2: warning: Assignment of function parameter has no effect outside the function. Did you forget dereferencing it? [uselessAssignmentPtrArg]
data += 2;
^
vim +959 lib/zstd/compress/zstd_opt.c
e0c1b49f5b674c Nick Terrell 2020-09-11 929
e0c1b49f5b674c Nick Terrell 2020-09-11 930 FORCE_INLINE_TEMPLATE size_t
e0c1b49f5b674c Nick Terrell 2020-09-11 931 ZSTD_compressBlock_opt_generic(ZSTD_matchState_t* ms,
e0c1b49f5b674c Nick Terrell 2020-09-11 932 seqStore_t* seqStore,
e0c1b49f5b674c Nick Terrell 2020-09-11 933 U32 rep[ZSTD_REP_NUM],
e0c1b49f5b674c Nick Terrell 2020-09-11 934 const void* src, size_t srcSize,
e0c1b49f5b674c Nick Terrell 2020-09-11 935 const int optLevel,
e0c1b49f5b674c Nick Terrell 2020-09-11 936 const ZSTD_dictMode_e dictMode)
e0c1b49f5b674c Nick Terrell 2020-09-11 937 {
e0c1b49f5b674c Nick Terrell 2020-09-11 938 optState_t* const optStatePtr = &ms->opt;
e0c1b49f5b674c Nick Terrell 2020-09-11 939 const BYTE* const istart = (const BYTE*)src;
e0c1b49f5b674c Nick Terrell 2020-09-11 940 const BYTE* ip = istart;
e0c1b49f5b674c Nick Terrell 2020-09-11 941 const BYTE* anchor = istart;
e0c1b49f5b674c Nick Terrell 2020-09-11 942 const BYTE* const iend = istart + srcSize;
e0c1b49f5b674c Nick Terrell 2020-09-11 943 const BYTE* const ilimit = iend - 8;
e0c1b49f5b674c Nick Terrell 2020-09-11 944 const BYTE* const base = ms->window.base;
e0c1b49f5b674c Nick Terrell 2020-09-11 945 const BYTE* const prefixStart = base + ms->window.dictLimit;
e0c1b49f5b674c Nick Terrell 2020-09-11 946 const ZSTD_compressionParameters* const cParams = &ms->cParams;
e0c1b49f5b674c Nick Terrell 2020-09-11 947
e0c1b49f5b674c Nick Terrell 2020-09-11 948 U32 const sufficient_len = MIN(cParams->targetLength, ZSTD_OPT_NUM -1);
e0c1b49f5b674c Nick Terrell 2020-09-11 949 U32 const minMatch = (cParams->minMatch == 3) ? 3 : 4;
e0c1b49f5b674c Nick Terrell 2020-09-11 950 U32 nextToUpdate3 = ms->nextToUpdate;
e0c1b49f5b674c Nick Terrell 2020-09-11 951
e0c1b49f5b674c Nick Terrell 2020-09-11 952 ZSTD_optimal_t* const opt = optStatePtr->priceTable;
e0c1b49f5b674c Nick Terrell 2020-09-11 953 ZSTD_match_t* const matches = optStatePtr->matchTable;
e0c1b49f5b674c Nick Terrell 2020-09-11 954 ZSTD_optimal_t lastSequence;
e0c1b49f5b674c Nick Terrell 2020-09-11 955 ZSTD_optLdm_t optLdm;
e0c1b49f5b674c Nick Terrell 2020-09-11 956
e0c1b49f5b674c Nick Terrell 2020-09-11 957 optLdm.seqStore = ms->ldmSeqStore ? *ms->ldmSeqStore : kNullRawSeqStore;
e0c1b49f5b674c Nick Terrell 2020-09-11 958 optLdm.endPosInBlock = optLdm.startPosInBlock = optLdm.offset = 0;
e0c1b49f5b674c Nick Terrell 2020-09-11 @959 ZSTD_opt_getNextMatchAndUpdateSeqStore(&optLdm, (U32)(ip-istart), (U32)(iend-ip));
e0c1b49f5b674c Nick Terrell 2020-09-11 960
e0c1b49f5b674c Nick Terrell 2020-09-11 961 /* init */
e0c1b49f5b674c Nick Terrell 2020-09-11 962 DEBUGLOG(5, "ZSTD_compressBlock_opt_generic: current=%u, prefix=%u, nextToUpdate=%u",
e0c1b49f5b674c Nick Terrell 2020-09-11 963 (U32)(ip - base), ms->window.dictLimit, ms->nextToUpdate);
e0c1b49f5b674c Nick Terrell 2020-09-11 964 assert(optLevel <= 2);
e0c1b49f5b674c Nick Terrell 2020-09-11 965 ZSTD_rescaleFreqs(optStatePtr, (const BYTE*)src, srcSize, optLevel);
e0c1b49f5b674c Nick Terrell 2020-09-11 966 ip += (ip==prefixStart);
e0c1b49f5b674c Nick Terrell 2020-09-11 967
e0c1b49f5b674c Nick Terrell 2020-09-11 968 /* Match Loop */
e0c1b49f5b674c Nick Terrell 2020-09-11 969 while (ip < ilimit) {
e0c1b49f5b674c Nick Terrell 2020-09-11 970 U32 cur, last_pos = 0;
e0c1b49f5b674c Nick Terrell 2020-09-11 971
e0c1b49f5b674c Nick Terrell 2020-09-11 972 /* find first match */
e0c1b49f5b674c Nick Terrell 2020-09-11 973 { U32 const litlen = (U32)(ip - anchor);
e0c1b49f5b674c Nick Terrell 2020-09-11 974 U32 const ll0 = !litlen;
e0c1b49f5b674c Nick Terrell 2020-09-11 975 U32 nbMatches = ZSTD_BtGetAllMatches(matches, ms, &nextToUpdate3, ip, iend, dictMode, rep, ll0, minMatch);
e0c1b49f5b674c Nick Terrell 2020-09-11 976 ZSTD_optLdm_processMatchCandidate(&optLdm, matches, &nbMatches,
e0c1b49f5b674c Nick Terrell 2020-09-11 977 (U32)(ip-istart), (U32)(iend - ip));
e0c1b49f5b674c Nick Terrell 2020-09-11 978 if (!nbMatches) { ip++; continue; }
e0c1b49f5b674c Nick Terrell 2020-09-11 979
e0c1b49f5b674c Nick Terrell 2020-09-11 980 /* initialize opt[0] */
e0c1b49f5b674c Nick Terrell 2020-09-11 981 { U32 i ; for (i=0; i<ZSTD_REP_NUM; i++) opt[0].rep[i] = rep[i]; }
e0c1b49f5b674c Nick Terrell 2020-09-11 982 opt[0].mlen = 0; /* means is_a_literal */
e0c1b49f5b674c Nick Terrell 2020-09-11 983 opt[0].litlen = litlen;
e0c1b49f5b674c Nick Terrell 2020-09-11 984 /* We don't need to include the actual price of the literals because
e0c1b49f5b674c Nick Terrell 2020-09-11 985 * it is static for the duration of the forward pass, and is included
e0c1b49f5b674c Nick Terrell 2020-09-11 986 * in every price. We include the literal length to avoid negative
e0c1b49f5b674c Nick Terrell 2020-09-11 987 * prices when we subtract the previous literal length.
e0c1b49f5b674c Nick Terrell 2020-09-11 988 */
e0c1b49f5b674c Nick Terrell 2020-09-11 989 opt[0].price = ZSTD_litLengthPrice(litlen, optStatePtr, optLevel);
e0c1b49f5b674c Nick Terrell 2020-09-11 990
e0c1b49f5b674c Nick Terrell 2020-09-11 991 /* large match -> immediate encoding */
e0c1b49f5b674c Nick Terrell 2020-09-11 992 { U32 const maxML = matches[nbMatches-1].len;
e0c1b49f5b674c Nick Terrell 2020-09-11 993 U32 const maxOffset = matches[nbMatches-1].off;
e0c1b49f5b674c Nick Terrell 2020-09-11 994 DEBUGLOG(6, "found %u matches of maxLength=%u and maxOffCode=%u at cPos=%u => start new series",
e0c1b49f5b674c Nick Terrell 2020-09-11 995 nbMatches, maxML, maxOffset, (U32)(ip-prefixStart));
e0c1b49f5b674c Nick Terrell 2020-09-11 996
e0c1b49f5b674c Nick Terrell 2020-09-11 997 if (maxML > sufficient_len) {
e0c1b49f5b674c Nick Terrell 2020-09-11 998 lastSequence.litlen = litlen;
e0c1b49f5b674c Nick Terrell 2020-09-11 999 lastSequence.mlen = maxML;
e0c1b49f5b674c Nick Terrell 2020-09-11 1000 lastSequence.off = maxOffset;
e0c1b49f5b674c Nick Terrell 2020-09-11 1001 DEBUGLOG(6, "large match (%u>%u), immediate encoding",
e0c1b49f5b674c Nick Terrell 2020-09-11 1002 maxML, sufficient_len);
e0c1b49f5b674c Nick Terrell 2020-09-11 1003 cur = 0;
e0c1b49f5b674c Nick Terrell 2020-09-11 1004 last_pos = ZSTD_totalLen(lastSequence);
e0c1b49f5b674c Nick Terrell 2020-09-11 1005 goto _shortestPath;
e0c1b49f5b674c Nick Terrell 2020-09-11 1006 } }
e0c1b49f5b674c Nick Terrell 2020-09-11 1007
e0c1b49f5b674c Nick Terrell 2020-09-11 1008 /* set prices for first matches starting position == 0 */
e0c1b49f5b674c Nick Terrell 2020-09-11 1009 { U32 const literalsPrice = opt[0].price + ZSTD_litLengthPrice(0, optStatePtr, optLevel);
e0c1b49f5b674c Nick Terrell 2020-09-11 1010 U32 pos;
e0c1b49f5b674c Nick Terrell 2020-09-11 1011 U32 matchNb;
e0c1b49f5b674c Nick Terrell 2020-09-11 1012 for (pos = 1; pos < minMatch; pos++) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1013 opt[pos].price = ZSTD_MAX_PRICE; /* mlen, litlen and price will be fixed during forward scanning */
e0c1b49f5b674c Nick Terrell 2020-09-11 1014 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1015 for (matchNb = 0; matchNb < nbMatches; matchNb++) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1016 U32 const offset = matches[matchNb].off;
e0c1b49f5b674c Nick Terrell 2020-09-11 1017 U32 const end = matches[matchNb].len;
e0c1b49f5b674c Nick Terrell 2020-09-11 1018 for ( ; pos <= end ; pos++ ) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1019 U32 const matchPrice = ZSTD_getMatchPrice(offset, pos, optStatePtr, optLevel);
e0c1b49f5b674c Nick Terrell 2020-09-11 1020 U32 const sequencePrice = literalsPrice + matchPrice;
e0c1b49f5b674c Nick Terrell 2020-09-11 1021 DEBUGLOG(7, "rPos:%u => set initial price : %.2f",
e0c1b49f5b674c Nick Terrell 2020-09-11 1022 pos, ZSTD_fCost(sequencePrice));
e0c1b49f5b674c Nick Terrell 2020-09-11 1023 opt[pos].mlen = pos;
e0c1b49f5b674c Nick Terrell 2020-09-11 1024 opt[pos].off = offset;
e0c1b49f5b674c Nick Terrell 2020-09-11 1025 opt[pos].litlen = litlen;
e0c1b49f5b674c Nick Terrell 2020-09-11 1026 opt[pos].price = sequencePrice;
e0c1b49f5b674c Nick Terrell 2020-09-11 1027 } }
e0c1b49f5b674c Nick Terrell 2020-09-11 1028 last_pos = pos-1;
e0c1b49f5b674c Nick Terrell 2020-09-11 1029 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1030 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1031
e0c1b49f5b674c Nick Terrell 2020-09-11 1032 /* check further positions */
e0c1b49f5b674c Nick Terrell 2020-09-11 1033 for (cur = 1; cur <= last_pos; cur++) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1034 const BYTE* const inr = ip + cur;
e0c1b49f5b674c Nick Terrell 2020-09-11 1035 assert(cur < ZSTD_OPT_NUM);
e0c1b49f5b674c Nick Terrell 2020-09-11 1036 DEBUGLOG(7, "cPos:%zi==rPos:%u", inr-istart, cur)
e0c1b49f5b674c Nick Terrell 2020-09-11 1037
e0c1b49f5b674c Nick Terrell 2020-09-11 1038 /* Fix current position with one literal if cheaper */
e0c1b49f5b674c Nick Terrell 2020-09-11 1039 { U32 const litlen = (opt[cur-1].mlen == 0) ? opt[cur-1].litlen + 1 : 1;
e0c1b49f5b674c Nick Terrell 2020-09-11 1040 int const price = opt[cur-1].price
e0c1b49f5b674c Nick Terrell 2020-09-11 1041 + ZSTD_rawLiteralsCost(ip+cur-1, 1, optStatePtr, optLevel)
e0c1b49f5b674c Nick Terrell 2020-09-11 1042 + ZSTD_litLengthPrice(litlen, optStatePtr, optLevel)
e0c1b49f5b674c Nick Terrell 2020-09-11 1043 - ZSTD_litLengthPrice(litlen-1, optStatePtr, optLevel);
e0c1b49f5b674c Nick Terrell 2020-09-11 1044 assert(price < 1000000000); /* overflow check */
e0c1b49f5b674c Nick Terrell 2020-09-11 1045 if (price <= opt[cur].price) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1046 DEBUGLOG(7, "cPos:%zi==rPos:%u : better price (%.2f<=%.2f) using literal (ll==%u) (hist:%u,%u,%u)",
e0c1b49f5b674c Nick Terrell 2020-09-11 1047 inr-istart, cur, ZSTD_fCost(price), ZSTD_fCost(opt[cur].price), litlen,
e0c1b49f5b674c Nick Terrell 2020-09-11 1048 opt[cur-1].rep[0], opt[cur-1].rep[1], opt[cur-1].rep[2]);
e0c1b49f5b674c Nick Terrell 2020-09-11 1049 opt[cur].mlen = 0;
e0c1b49f5b674c Nick Terrell 2020-09-11 1050 opt[cur].off = 0;
e0c1b49f5b674c Nick Terrell 2020-09-11 1051 opt[cur].litlen = litlen;
e0c1b49f5b674c Nick Terrell 2020-09-11 1052 opt[cur].price = price;
e0c1b49f5b674c Nick Terrell 2020-09-11 1053 } else {
e0c1b49f5b674c Nick Terrell 2020-09-11 1054 DEBUGLOG(7, "cPos:%zi==rPos:%u : literal would cost more (%.2f>%.2f) (hist:%u,%u,%u)",
e0c1b49f5b674c Nick Terrell 2020-09-11 1055 inr-istart, cur, ZSTD_fCost(price), ZSTD_fCost(opt[cur].price),
e0c1b49f5b674c Nick Terrell 2020-09-11 1056 opt[cur].rep[0], opt[cur].rep[1], opt[cur].rep[2]);
e0c1b49f5b674c Nick Terrell 2020-09-11 1057 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1058 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1059
e0c1b49f5b674c Nick Terrell 2020-09-11 1060 /* Set the repcodes of the current position. We must do it here
e0c1b49f5b674c Nick Terrell 2020-09-11 1061 * because we rely on the repcodes of the 2nd to last sequence being
e0c1b49f5b674c Nick Terrell 2020-09-11 1062 * correct to set the next chunks repcodes during the backward
e0c1b49f5b674c Nick Terrell 2020-09-11 1063 * traversal.
e0c1b49f5b674c Nick Terrell 2020-09-11 1064 */
e0c1b49f5b674c Nick Terrell 2020-09-11 1065 ZSTD_STATIC_ASSERT(sizeof(opt[cur].rep) == sizeof(repcodes_t));
e0c1b49f5b674c Nick Terrell 2020-09-11 1066 assert(cur >= opt[cur].mlen);
e0c1b49f5b674c Nick Terrell 2020-09-11 1067 if (opt[cur].mlen != 0) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1068 U32 const prev = cur - opt[cur].mlen;
e0c1b49f5b674c Nick Terrell 2020-09-11 1069 repcodes_t newReps = ZSTD_updateRep(opt[prev].rep, opt[cur].off, opt[cur].litlen==0);
e0c1b49f5b674c Nick Terrell 2020-09-11 1070 ZSTD_memcpy(opt[cur].rep, &newReps, sizeof(repcodes_t));
e0c1b49f5b674c Nick Terrell 2020-09-11 1071 } else {
e0c1b49f5b674c Nick Terrell 2020-09-11 1072 ZSTD_memcpy(opt[cur].rep, opt[cur - 1].rep, sizeof(repcodes_t));
e0c1b49f5b674c Nick Terrell 2020-09-11 1073 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1074
e0c1b49f5b674c Nick Terrell 2020-09-11 1075 /* last match must start at a minimum distance of 8 from oend */
e0c1b49f5b674c Nick Terrell 2020-09-11 1076 if (inr > ilimit) continue;
e0c1b49f5b674c Nick Terrell 2020-09-11 1077
e0c1b49f5b674c Nick Terrell 2020-09-11 1078 if (cur == last_pos) break;
e0c1b49f5b674c Nick Terrell 2020-09-11 1079
e0c1b49f5b674c Nick Terrell 2020-09-11 1080 if ( (optLevel==0) /*static_test*/
e0c1b49f5b674c Nick Terrell 2020-09-11 1081 && (opt[cur+1].price <= opt[cur].price + (BITCOST_MULTIPLIER/2)) ) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1082 DEBUGLOG(7, "move to next rPos:%u : price is <=", cur+1);
e0c1b49f5b674c Nick Terrell 2020-09-11 1083 continue; /* skip unpromising positions; about ~+6% speed, -0.01 ratio */
e0c1b49f5b674c Nick Terrell 2020-09-11 1084 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1085
e0c1b49f5b674c Nick Terrell 2020-09-11 1086 { U32 const ll0 = (opt[cur].mlen != 0);
e0c1b49f5b674c Nick Terrell 2020-09-11 1087 U32 const litlen = (opt[cur].mlen == 0) ? opt[cur].litlen : 0;
e0c1b49f5b674c Nick Terrell 2020-09-11 1088 U32 const previousPrice = opt[cur].price;
e0c1b49f5b674c Nick Terrell 2020-09-11 1089 U32 const basePrice = previousPrice + ZSTD_litLengthPrice(0, optStatePtr, optLevel);
e0c1b49f5b674c Nick Terrell 2020-09-11 1090 U32 nbMatches = ZSTD_BtGetAllMatches(matches, ms, &nextToUpdate3, inr, iend, dictMode, opt[cur].rep, ll0, minMatch);
e0c1b49f5b674c Nick Terrell 2020-09-11 1091 U32 matchNb;
e0c1b49f5b674c Nick Terrell 2020-09-11 1092
e0c1b49f5b674c Nick Terrell 2020-09-11 1093 ZSTD_optLdm_processMatchCandidate(&optLdm, matches, &nbMatches,
e0c1b49f5b674c Nick Terrell 2020-09-11 1094 (U32)(inr-istart), (U32)(iend-inr));
e0c1b49f5b674c Nick Terrell 2020-09-11 1095
e0c1b49f5b674c Nick Terrell 2020-09-11 1096 if (!nbMatches) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1097 DEBUGLOG(7, "rPos:%u : no match found", cur);
e0c1b49f5b674c Nick Terrell 2020-09-11 1098 continue;
e0c1b49f5b674c Nick Terrell 2020-09-11 1099 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1100
e0c1b49f5b674c Nick Terrell 2020-09-11 1101 { U32 const maxML = matches[nbMatches-1].len;
e0c1b49f5b674c Nick Terrell 2020-09-11 1102 DEBUGLOG(7, "cPos:%zi==rPos:%u, found %u matches, of maxLength=%u",
e0c1b49f5b674c Nick Terrell 2020-09-11 1103 inr-istart, cur, nbMatches, maxML);
e0c1b49f5b674c Nick Terrell 2020-09-11 1104
e0c1b49f5b674c Nick Terrell 2020-09-11 1105 if ( (maxML > sufficient_len)
e0c1b49f5b674c Nick Terrell 2020-09-11 1106 || (cur + maxML >= ZSTD_OPT_NUM) ) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1107 lastSequence.mlen = maxML;
e0c1b49f5b674c Nick Terrell 2020-09-11 1108 lastSequence.off = matches[nbMatches-1].off;
e0c1b49f5b674c Nick Terrell 2020-09-11 1109 lastSequence.litlen = litlen;
e0c1b49f5b674c Nick Terrell 2020-09-11 1110 cur -= (opt[cur].mlen==0) ? opt[cur].litlen : 0; /* last sequence is actually only literals, fix cur to last match - note : may underflow, in which case, it's first sequence, and it's okay */
e0c1b49f5b674c Nick Terrell 2020-09-11 1111 last_pos = cur + ZSTD_totalLen(lastSequence);
e0c1b49f5b674c Nick Terrell 2020-09-11 1112 if (cur > ZSTD_OPT_NUM) cur = 0; /* underflow => first match */
e0c1b49f5b674c Nick Terrell 2020-09-11 1113 goto _shortestPath;
e0c1b49f5b674c Nick Terrell 2020-09-11 1114 } }
e0c1b49f5b674c Nick Terrell 2020-09-11 1115
e0c1b49f5b674c Nick Terrell 2020-09-11 1116 /* set prices using matches found at position == cur */
e0c1b49f5b674c Nick Terrell 2020-09-11 1117 for (matchNb = 0; matchNb < nbMatches; matchNb++) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1118 U32 const offset = matches[matchNb].off;
e0c1b49f5b674c Nick Terrell 2020-09-11 1119 U32 const lastML = matches[matchNb].len;
e0c1b49f5b674c Nick Terrell 2020-09-11 1120 U32 const startML = (matchNb>0) ? matches[matchNb-1].len+1 : minMatch;
e0c1b49f5b674c Nick Terrell 2020-09-11 1121 U32 mlen;
e0c1b49f5b674c Nick Terrell 2020-09-11 1122
e0c1b49f5b674c Nick Terrell 2020-09-11 1123 DEBUGLOG(7, "testing match %u => offCode=%4u, mlen=%2u, llen=%2u",
e0c1b49f5b674c Nick Terrell 2020-09-11 1124 matchNb, matches[matchNb].off, lastML, litlen);
e0c1b49f5b674c Nick Terrell 2020-09-11 1125
e0c1b49f5b674c Nick Terrell 2020-09-11 1126 for (mlen = lastML; mlen >= startML; mlen--) { /* scan downward */
e0c1b49f5b674c Nick Terrell 2020-09-11 1127 U32 const pos = cur + mlen;
e0c1b49f5b674c Nick Terrell 2020-09-11 1128 int const price = basePrice + ZSTD_getMatchPrice(offset, mlen, optStatePtr, optLevel);
e0c1b49f5b674c Nick Terrell 2020-09-11 1129
e0c1b49f5b674c Nick Terrell 2020-09-11 1130 if ((pos > last_pos) || (price < opt[pos].price)) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1131 DEBUGLOG(7, "rPos:%u (ml=%2u) => new better price (%.2f<%.2f)",
e0c1b49f5b674c Nick Terrell 2020-09-11 1132 pos, mlen, ZSTD_fCost(price), ZSTD_fCost(opt[pos].price));
e0c1b49f5b674c Nick Terrell 2020-09-11 1133 while (last_pos < pos) { opt[last_pos+1].price = ZSTD_MAX_PRICE; last_pos++; } /* fill empty positions */
e0c1b49f5b674c Nick Terrell 2020-09-11 1134 opt[pos].mlen = mlen;
e0c1b49f5b674c Nick Terrell 2020-09-11 1135 opt[pos].off = offset;
e0c1b49f5b674c Nick Terrell 2020-09-11 1136 opt[pos].litlen = litlen;
e0c1b49f5b674c Nick Terrell 2020-09-11 1137 opt[pos].price = price;
e0c1b49f5b674c Nick Terrell 2020-09-11 1138 } else {
e0c1b49f5b674c Nick Terrell 2020-09-11 1139 DEBUGLOG(7, "rPos:%u (ml=%2u) => new price is worse (%.2f>=%.2f)",
e0c1b49f5b674c Nick Terrell 2020-09-11 1140 pos, mlen, ZSTD_fCost(price), ZSTD_fCost(opt[pos].price));
e0c1b49f5b674c Nick Terrell 2020-09-11 1141 if (optLevel==0) break; /* early update abort; gets ~+10% speed for about -0.01 ratio loss */
e0c1b49f5b674c Nick Terrell 2020-09-11 1142 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1143 } } }
e0c1b49f5b674c Nick Terrell 2020-09-11 1144 } /* for (cur = 1; cur <= last_pos; cur++) */
e0c1b49f5b674c Nick Terrell 2020-09-11 1145
e0c1b49f5b674c Nick Terrell 2020-09-11 1146 lastSequence = opt[last_pos];
e0c1b49f5b674c Nick Terrell 2020-09-11 1147 cur = last_pos > ZSTD_totalLen(lastSequence) ? last_pos - ZSTD_totalLen(lastSequence) : 0; /* single sequence, and it starts before `ip` */
e0c1b49f5b674c Nick Terrell 2020-09-11 1148 assert(cur < ZSTD_OPT_NUM); /* control overflow*/
e0c1b49f5b674c Nick Terrell 2020-09-11 1149
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
reply other threads:[~2021-12-30 11:59 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202112301855.dFsoSuw3-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.