From bbe879d516491676c6a0b251a4d133d2227bb8d0 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 14 Nov 2009 18:04:35 +0000 Subject: [PATCH] Make the sqlite3VdbeExec() function about 2% faster by storing the opcode array in a local variable. FossilOrigin-Name: 8bd3cc82720ac7e8a9d4a03a882b6f8226867b0d --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/vdbe.c | 12 +++++++----- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/manifest b/manifest index efad3c5cdc..cf35357f94 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C Performance\simprovements\sand\ssize\sreductions\son\sthe\sOP_Seek*\sfamily\sof\nVDBE\sopcodes. -D 2009-11-13T20:52:44 +C Make\sthe\ssqlite3VdbeExec()\sfunction\sabout\s2%\sfaster\sby\sstoring\sthe\sopcode\narray\sin\sa\slocal\svariable. +D 2009-11-14T18:04:36 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 53f3dfa49f28ab5b80cb083fb7c9051e596bcfa1 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -210,7 +210,7 @@ F src/update.c 8efeb09822886e33c265dd96d29a3d865ea6dcf2 F src/utf.c dad16adcc0c35ef2437dca125a4b07419d361052 F src/util.c ad4f03079ba0fe83590d1cc9197e8e4844e38592 F src/vacuum.c 03309a08d549f9389cc3a3589afd4fadbdaf0679 -F src/vdbe.c 74158ea3fd68231720ba75ebec5072eda1ad8cf9 +F src/vdbe.c 0abb88a10fb243cc753c3ab468d6aab7c3ee5211 F src/vdbe.h 65cd747e36ad444cb1a17e529030942c45a61fe3 F src/vdbeInt.h 59c65e7b810836b9e946acee45c7b3c02b967d1b F src/vdbeapi.c 17680ab7a75ec938c5ba039a6c87489d01faf2cb @@ -771,14 +771,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 3352b3eba545c3128efb7665ec91d4df3b16011d -R 2242fd95cd691be062201d4a6409f215 +P ed820f45cf4354b1e1db64049c47a07221a7ff6d +R 03060ba235b0950aa9146609f8d8a31d U drh -Z fdb196c2be03c08f60c67969937fe987 +Z ce5be4ec1d2dd720600d2c9af2d32994 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD8DBQFK/ccfoxKgR168RlERAsHZAJ45TKVOQRlFzMf0pR03Ik5X3PWGHgCfbTo2 -sR7n4qre/qrfhmog3CvnvbQ= -=5/U8 +iD8DBQFK/vE5oxKgR168RlERAor4AJ4s/kWdVBsQ2tAlXF4Ix+CSbm+a5wCfWYrX +75gfXpBzWcUcFFhH7YbfTXU= +=IpIH -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index bc3cfba6e0..aba27a3989 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ed820f45cf4354b1e1db64049c47a07221a7ff6d \ No newline at end of file +8bd3cc82720ac7e8a9d4a03a882b6f8226867b0d \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index b04e60e277..f4d66e41ae 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -555,6 +555,7 @@ int sqlite3VdbeExec( Vdbe *p /* The VDBE */ ){ int pc; /* The program counter */ + Op *aOp = p->aOp; /* Copy of p->aOp */ Op *pOp; /* Current operation */ int rc = SQLITE_OK; /* Value to return */ sqlite3 *db = p->db; /* The database */ @@ -599,7 +600,7 @@ int sqlite3VdbeExec( printf("VDBE Program Listing:\n"); sqlite3VdbePrintSql(p); for(i=0; inOp; i++){ - sqlite3VdbePrintOp(stdout, i, &p->aOp[i]); + sqlite3VdbePrintOp(stdout, i, &aOp[i]); } } if( fileExists(db, "vdbe_trace") ){ @@ -614,7 +615,7 @@ int sqlite3VdbeExec( origPc = pc; start = sqlite3Hwtime(); #endif - pOp = &p->aOp[pc]; + pOp = &aOp[pc]; /* Only allow tracing if SQLITE_DEBUG is defined. */ @@ -847,6 +848,7 @@ case OP_Halt: { ** as the p2 of the calling OP_Program. */ pc = p->aOp[pc].p2-1; } + aOp = p->aOp; break; } @@ -1383,7 +1385,7 @@ case OP_Function: { ctx.isError = 0; if( ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){ - assert( pOp>p->aOp ); + assert( pOp>aOp ); assert( pOp[-1].p4type==P4_COLLSEQ ); assert( pOp[-1].opcode==OP_CollSeq ); ctx.pColl = pOp[-1].p4.pColl; @@ -4873,7 +4875,7 @@ case OP_Program: { /* jump */ p->nMem = pFrame->nChildMem; p->nCursor = (u16)pFrame->nChildCsr; p->apCsr = (VdbeCursor **)&p->aMem[p->nMem+1]; - p->aOp = pProgram->aOp; + p->aOp = aOp = pProgram->aOp; p->nOp = pProgram->nOp; pc = -1; @@ -5633,7 +5635,7 @@ default: { /* This is really OP_Noop and OP_Explain */ pOp->cnt++; #if 0 fprintf(stdout, "%10llu ", elapsed); - sqlite3VdbePrintOp(stdout, origPc, &p->aOp[origPc]); + sqlite3VdbePrintOp(stdout, origPc, &aOp[origPc]); #endif } #endif -- 2.47.2