]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Bypass a single branch in vdbeRecordCompareString() in the common case, for
authordrh <>
Sun, 27 Feb 2022 18:54:33 +0000 (18:54 +0000)
committerdrh <>
Sun, 27 Feb 2022 18:54:33 +0000 (18:54 +0000)
a performance increase of over 600K CPU cycles.

FossilOrigin-Name: 36f0f07e505dfb38c61d3b4d5b947013c8793e6796fe690e53864479b9276abb

manifest
manifest.uuid
src/vdbeaux.c

index bbf330528dec1fc1e684ae0311a3594fb9c0d622..3b121c810a05e15d47d2ec1477bc6c50d65323b4 100644 (file)
--- 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.
index c989e71c09c066427cbbe883b89f09b96c74211e..35e6c33ef54afa9948961c359dae79286c0b2d19 100644 (file)
@@ -1 +1 @@
-9bda611f0d182a62ac1b68610313143c2e28868c16c7d4362a8f5945c27dd88e
\ No newline at end of file
+36f0f07e505dfb38c61d3b4d5b947013c8793e6796fe690e53864479b9276abb
\ No newline at end of file
index 35044127acb80f28093c49c2a180b25152e92d9a..be9cebd51df244c6f9da7e19a92634f66df977cb 100644 (file)
@@ -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 */