From: drh <> Date: Sun, 27 Feb 2022 18:54:33 +0000 (+0000) Subject: Bypass a single branch in vdbeRecordCompareString() in the common case, for X-Git-Tag: version-3.39.0~363 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a1e951fa48050ac346e49cb74a923f6309fedf80;p=thirdparty%2Fsqlite.git Bypass a single branch in vdbeRecordCompareString() in the common case, for a performance increase of over 600K CPU cycles. FossilOrigin-Name: 36f0f07e505dfb38c61d3b4d5b947013c8793e6796fe690e53864479b9276abb --- diff --git a/manifest b/manifest index bbf330528d..3b121c810a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\san\sunnecessary\slocal\svariable\sfor\sa\ssmall\sperformance\sincrease\sand\ssize\nreduction. -D 2022-02-26T23:01:25.800 +C Bypass\sa\ssingle\sbranch\sin\svdbeRecordCompareString()\sin\sthe\scommon\scase,\sfor\na\sperformance\sincrease\sof\sover\s600K\sCPU\scycles. +D 2022-02-27T18:54:33.505 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -628,7 +628,7 @@ F src/vdbe.c 4b969ebe6b61f87a90aebf817bc6ebda5075fe56987591091a9bf22556262484 F src/vdbe.h a1d0e3b934e835e73edd146f2e7c4eadb711b5c9875c18159a57483fd78e550e F src/vdbeInt.h de2348c1643c1ac5bf0932452cbb708f52f52d8b4e29b667abdcfd4bacbf6aa6 F src/vdbeapi.c 8863ffb5a7bac42fe9a68aaa3526ee29fc18fb02a9b27188b756de41e33856e9 -F src/vdbeaux.c 1dc2bdd377baf4e3602e02ca33d241944f04bda2e724526437018f143f9e75f3 +F src/vdbeaux.c 855d86f29143177253c554344362a78ba30feaa221554e17e0cd2b144658f077 F src/vdbeblob.c 5e61ce31aca17db8fb60395407457a8c1c7fb471dde405e0cd675974611dcfcd F src/vdbemem.c 7737f0b1c480a32b057849c804d2f21d5389649bb8be80f77ad75df700adc9a1 F src/vdbesort.c 43756031ca7430f7aec3ef904824a7883c4ede783e51f280d99b9b65c0796e35 @@ -1944,8 +1944,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 1bf4848995ab094ad84ef4aa1563bce641d5acf7335fb4630c892b16cf7d7edd -R 6ea0329386e044b14d5ca6833590b961 +P 9bda611f0d182a62ac1b68610313143c2e28868c16c7d4362a8f5945c27dd88e +R 76aeac53a072a4a75391246dfc2d8423 U drh -Z 0c7c29fba439ea1710add27e6f563edc +Z 87e616c52c5100e606e896a97c48322f # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index c989e71c09..35e6c33ef5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9bda611f0d182a62ac1b68610313143c2e28868c16c7d4362a8f5945c27dd88e \ No newline at end of file +36f0f07e505dfb38c61d3b4d5b947013c8793e6796fe690e53864479b9276abb \ No newline at end of file diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 35044127ac..be9cebd51d 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -4746,11 +4746,15 @@ static int vdbeRecordCompareString( assert( pPKey2->aMem[0].flags & MEM_Str ); vdbeAssertFieldCountWithinLimits(nKey1, pKey1, pPKey2->pKeyInfo); - serial_type = (u8)(aKey1[1]); - if( serial_type >= 0x80 ){ - sqlite3GetVarint32(&aKey1[1], (u32*)&serial_type); - } + serial_type = (signed char)(aKey1[1]); + +vrcs_restart: if( serial_type<12 ){ + if( serial_type<0 ){ + sqlite3GetVarint32(&aKey1[1], (u32*)&serial_type); + if( serial_type>=12 ) goto vrcs_restart; + assert( CORRUPT_DB ); + } res = pPKey2->r1; /* (pKey1/nKey1) is a number or a null */ }else if( !(serial_type & 0x01) ){ res = pPKey2->r2; /* (pKey1/nKey1) is a blob */