⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opt_commonterms.c

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 C
字号:
#line 36 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_commonTerms.mx"#include "mal_config.h"#include "opt_commonTerms.h"#include "mal_interpreter.h"	/* for showErrors() */#include "opt_aliases.h"#line 41 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_commonTerms.mx"#line 95 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_commonTerms.mx"static intOPTcommonTermsImplementation(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){	int i, j, k, last, n=1;	InstrPtr p, q;	int actions = 0;	int filter[1024];	int *mask,*alias,limit;	InstrPtr *old;	lng c;	(void) stk;	(void) pci;	mask= (int *) alloca(mb->stop * sizeof(int));	memset((void*) filter, 0, 1024 * sizeof(int));	alias= (int*) alloca(sizeof(int)* mb->vtop);	for(i=0; i<mb->vtop; i++) alias[i]=i;	setLifespan(mb);	old= mb->stmt;	limit= mb->stop;	newMalBlkStmt(mb, mb->stop); /* a new statement stack */	for ( n= i = 0; i < limit; i++) {		p = old[i];		pushInstruction(mb,p);		n++;#line 125 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_commonTerms.mx"		if( p->token == ENDsymbol){			for(i++; i<limit; i++)				pushInstruction(mb,old[i]);			break;		}		if( p->token == NOOPsymbol) continue;		if( p->token == ASSIGNsymbol && p->argc== 2 && p->barrier==0){			if( getLastUpdate(mb,getArg(p,0)) == i &&				getBeginLifespan(mb,getArg(p,0)) == i &&				getLastUpdate(mb,getArg(p,1)) < i){					alias[getArg(p,0)]= alias[getArg(p,1)];					freeInstruction(p);					mb->stop--;					mb->stmt[mb->stop]=0;					n--;					continue;			}		} else {			for(j=0; j<p->argc; j++)				getArg(p,j)= alias[getArg(p,j)];		}#line 149 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_commonTerms.mx"		c = p->argc;		for(j=p->retc; j<p->argc; j++){			c *= 4;			if( !isConstant(mb,getArg(p,j)) )				c += getArg(p,j);		}		c &= 1023;		mask[n-1] = c;				if (filter[c] && p->retc != p->argc){#line 165 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_commonTerms.mx"			last=1;			for( j = p->retc; j<p->argc; j++)			if( getBeginLifespan(mb,getArg(p,j)) > last )				last = getBeginLifespan(mb,getArg(p,j));			for (j = (n-1) - 1; j >= last-(i-(n-1)) && j>0; j--) 			if( mask[j] == c ){				if (safetyBarrier(p, q = getInstrPtr(mb, j)))					break;#ifdef DEBUG_OPT_COMMONTERMS				printInstruction(GDKout, mb, q, LIST_MAL_ALL);				printInstruction(GDKout, mb, p, LIST_MAL_ALL);				printf("%d, %d  %d %d ", i, j, 					hasSameSignature(p, q), 					hasSameArguments(mb, p, q));				printf(" :%d %d %d %d\n", 					!isUpdated(mb, i), 					!hasCommonResults(p, q), 					!hasSideEffects(p, TRUE),					!hasSideEffects(q, TRUE));#endif				if (hasSameSignature(p, q) && 					hasSameArguments(mb, p, q) && 					!isUpdated(mb, i) && 					!hasCommonResults(p, q) && 					!hasSideEffects(p, TRUE) &&					allTargetsVisible(mb,j,n-1) 					) {#ifdef DEBUG_OPT_COMMONTERMS					stream_printf(GDKout, "Found a common expression " "%d <-> %d\n", j, i);#endif					clrFunction(p);					p->token = ASSIGNsymbol;					p->argc = p->retc + q->retc;					for (k = 0; k < q->retc; k++)						p->argv[p->retc + k] =  q->argv[k];#ifdef DEBUG_OPT_COMMONTERMS					stream_printf(GDKout, "common modified expression");					printInstruction(GDKout, mb, p, LIST_MAL_ALL);#endif					actions++;					if( p->argc== 2 &&						getLastUpdate(mb,getArg(p,0)) == i &&						getBeginLifespan(mb,getArg(p,0)) == i &&						getLastUpdate(mb,getArg(p,1)) < i){							alias[getArg(p,0)]= alias[getArg(p,1)];							freeInstruction(p);							mb->stop--;							mb->stmt[mb->stop]=0;							n--;					}					j= 0; /* end of search */				}			}		}		filter[c ]= 1;	}	return actions;}#line 230 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_commonTerms.mx"#line 228 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_commonTerms.mx"/* #define _DEBUG_OPTIMIZER_*/str OPTcommonTerms(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	str modnme;	str fcnnme;	Module  scope=NULL;	Symbol s= NULL;	lng clk= GDKusec();	int actions = 0;	optimizerInit();	if( p )		removeInstruction(mb, p);#ifdef _DEBUG_OPTIMIZER_	stream_printf(GDKout,"apply commonTerms\n");	printFunction(GDKout,mb,LIST_MAL_ALL);#endif	if( p && p->argc > 1 && getFunctionId(p) != multiplexRef){#ifdef _DEBUG_OPTIMIZER_		stream_printf(GDKout,"locate function commonTerms\n");#endif		if( getArgType(mb,p,1) != TYPE_str ||			getArgType(mb,p,2) != TYPE_str ||			!isConstant(mb,getArg(p,1)) ||			!isConstant(mb,getArg(p,2))		) {			char buf[1024];			snprintf(buf,1024, "Optimizer requires constant string arguments\n");			throw(MAL, "optimizer.commonTerms",buf);		}		if( stk != 0){			modnme= (str)getArgValue(stk,p,1);			fcnnme= (str)getArgValue(stk,p,2);		} else {			modnme= getArgDefault(mb,p,1);			fcnnme= getArgDefault(mb,p,2);		}		scope = findModule(MCgetClient()->nspace,putName(modnme,strlen(modnme)) );		if( scope)			s= findSymbolInModule(scope,putName(fcnnme,strlen(fcnnme)));		if( s == NULL) {			char buf[1024];			snprintf(buf,1024, "Could not find %s.%s\n",modnme,fcnnme);			throw(MAL, "optimizer.commonTerms",buf);		}#ifdef _DEBUG_OPTIMIZER_		stream_printf(GDKout,"commonTerms %s %d\n",modnme,fcnnme);#endif		mb = s->def;		stk= 0;	} 	if( mb->errors )		return MAL_SUCCEED;	addtoMalBlkHistory(mb);	actions= OPTcommonTermsImplementation(mb,stk,p);#ifdef _DEBUG_OPTIMIZER_	stream_printf(GDKout,"finished commonTerms %d\n",actions);	printFunction(GDKout,mb,LIST_MAL_ALL);#endif    optimizerCheck(mb, "optimizer.commonTerms", actions, GDKusec() - clk,OPT_CHECK_ALL);	return MAL_SUCCEED;}#line 230 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_commonTerms.mx"#line 232 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_commonTerms.mx"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -