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

📄 opt_reduce.c

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 C
字号:
#line 57 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_reduce.mx"#include "mal_config.h"#include "opt_reduce.h"#include "mal_interpreter.h"static void MRconstant(MalBlkPtr mb){	int i,j;	int *cst,*alias,top=0;	InstrPtr p;	cst= (int*) alloca(mb->vtop *sizeof(int));	alias= (int*) alloca(mb->vtop *sizeof(int));	for(i = 0; i< mb->vtop; i++)	if( isConstant(mb,i) ){		alias[i]= i;		for(j=0; j<top; j++)		if( getVarType(mb,i) == getVarType(mb,cst[j]) &&			ATOMcmp(getVarType(mb,i),			VALget(&getVar(mb,i)->value),			VALget(&getVar(mb,cst[j])->value)) == 0){				alias[i]= cst[j];				break;			}		cst[top++]= i;	}	for( i=0; i< mb->stop; i++){		p= getInstrPtr(mb,i);		for(j=p->retc; j < p->argc; j++)		if( isConstant(mb, getArg(p,j)) )			getArg(p,j) = alias[getArg(p,j)];	}}static intOPTreduceImplementation(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	int *vars, *used;	int cnt = 0, i, j;	InstrPtr q;	int actions = 0;	(void)stk;	(void) p;	vars = (int *) alloca(mb->vtop * sizeof(int));	used= (int *) alloca(mb->vtop * sizeof(int));	memset((char*) vars, 0, mb->vtop * sizeof(int));	memset((char*) used, 0, mb->vtop * sizeof(int));	/* reduce constant list */	MRconstant(mb);	/* build the use table */	for(i=0; i<mb->stop; i++){		q= getInstrPtr(mb,i);		for(j=0; j<q->argc; j++)			used[getArg(q,j)]= 1;	}	/* build the alias table */	for (i = 0; i < mb->vtop; i++) {		if ( used[i]==0 ){			clearVariable(mb, i);			continue;		}		if (i>cnt) {			/* remap temporary variables */			if (isTmpVar(mb,i))				getVarTmp(mb,i) = cnt;			mb->var[cnt] = mb->var[i];			mb->var[i] = NULL;		}		vars[i] = cnt;		cnt++;	}	actions = mb->vtop - cnt;#ifdef DEBUG_OPT_REDUCE	stream_printf(GDKout, "Reduction %d -> %d\n", mb->vtop, cnt);#endif	/* remap all variable references to their new position. */	if (actions) {		for (i = 1; i < mb->stop; i++) {			q = getInstrPtr(mb, i);			for (j = 0; j < q->argc; j++)				getArg(q, j) = vars[getArg(q, j)];		}	}	mb->vtop = cnt;	return actions;}#line 150 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_reduce.mx"#line 148 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_reduce.mx"/* #define _DEBUG_OPTIMIZER_*/str OPTreduce(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 reduce\n");	printFunction(GDKout,mb,LIST_MAL_ALL);#endif	if( p && p->argc > 1 && getFunctionId(p) != multiplexRef){#ifdef _DEBUG_OPTIMIZER_		stream_printf(GDKout,"locate function reduce\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.reduce",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.reduce",buf);		}#ifdef _DEBUG_OPTIMIZER_		stream_printf(GDKout,"reduce %s %d\n",modnme,fcnnme);#endif		mb = s->def;		stk= 0;	} 	if( mb->errors )		return MAL_SUCCEED;	addtoMalBlkHistory(mb);	actions= OPTreduceImplementation(mb,stk,p);#ifdef _DEBUG_OPTIMIZER_	stream_printf(GDKout,"finished reduce %d\n",actions);	printFunction(GDKout,mb,LIST_MAL_ALL);#endif    optimizerCheck(mb, "optimizer.reduce", actions, GDKusec() - clk,OPT_CHECK_ALL);	return MAL_SUCCEED;}#line 150 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_reduce.mx"#line 152 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_reduce.mx"

⌨️ 快捷键说明

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