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

📄 opt_heuristics.c

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 C
字号:
#line 71 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_heuristics.mx"#include "mal_config.h"#include "opt_heuristics.h"intSPcombi000(MalBlkPtr mb, int pc1, int pc2){	InstrPtr p, q;	p = getInstrPtr(mb, pc1);	q = getInstrPtr(mb, pc2);	if (#line 50 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_heuristics.mx"	(( getModuleId(p)==0 || ( "bat" && idcmp(getModuleId(p), "bat")==0) ) &&		 (getFunctionId(p)==0 || ( "reverse" && idcmp(getFunctionId(p), "reverse")==0) ))#line 80 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_heuristics.mx") {		if (#line 50 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_heuristics.mx"	(( getModuleId(q)==0 || ( "algebra" && idcmp(getModuleId(q), "algebra")==0) ) &&		 (getFunctionId(q)==0 || ( "select" && idcmp(getFunctionId(q), "select")==0) ))#line 81 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_heuristics.mx") {			if (p->argv[0] == q->argv[1]) {				setModuleId(p, putName("algebra", 7));				setFunctionId(p, putName("reverse_select", 14));				p = pushArgument(mb, p, q->argv[1]);				p = pushArgument(mb, p, q->argv[2]);				p = pushArgument(mb, p, q->argv[3]);				removeInstruction(mb, q);				chkFlow(mb);				chkDeclarations(mb, TRUE);				return 1;			}		}	}	return 0;}intSPsqueezer000(MalBlkPtr mb, int pc1, int pc2){	InstrPtr p, q;	p = getInstrPtr(mb, pc1);	q = getInstrPtr(mb, pc2);	(void) p;	(void) q;		/* do something useful later on */	return 0;}static intOPTheuristicsImplementation(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){	int i, k, combis = 0, squeeze = 0;	InstrPtr p;	(void) stk;		/* fool compilers */	(void) pci;	/* process the combinators */	for (i = 0; i < mb->stop - 1; i++) {		p = getInstrPtr(mb, i);		for (k = i + 1; k < mb->stop && isAlife(mb, p->argv[0], k); k++)			if (SPcombi000(mb, i, k)) {#ifdef DEBUG_OPT_OPTIMIZER				stream_printf(GDKout, "Combinator found\n");				printInstruction(GDKout, mb, getInstrPtr(mb, i), LIST_MAL_ALL);#endif				combis++;				k--;	/* an instruction has been removed */				setLifespan(mb);	/* expensive but needed */			}	}	/* process the squeezers */	for (i = 0; i < mb->stop - 1; i++) {		p = getInstrPtr(mb, i);		for (k = i + 1; k < mb->stop && isAlife(mb, p->argv[0], k); k++)			if (SPsqueezer000(mb, i, k)) {#ifdef DEBUG_OPT_OPTIMIZER				stream_printf(GDKout, "Squeezer found\n");				printInstruction(GDKout, mb, getInstrPtr(mb, i), LIST_MAL_ALL);#endif				squeeze++;				k--;	/* an instruction has been removed */			}	}	return squeeze;}#line 168 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_heuristics.mx"#line 166 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_heuristics.mx"/* #define _DEBUG_OPTIMIZER_*/str OPTheuristics(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 heuristics\n");	printFunction(GDKout,mb,LIST_MAL_ALL);#endif	if( p && p->argc > 1 && getFunctionId(p) != multiplexRef){#ifdef _DEBUG_OPTIMIZER_		stream_printf(GDKout,"locate function heuristics\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.heuristics",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.heuristics",buf);		}#ifdef _DEBUG_OPTIMIZER_		stream_printf(GDKout,"heuristics %s %d\n",modnme,fcnnme);#endif		mb = s->def;		stk= 0;	} 	if( mb->errors )		return MAL_SUCCEED;	addtoMalBlkHistory(mb);	actions= OPTheuristicsImplementation(mb,stk,p);#ifdef _DEBUG_OPTIMIZER_	stream_printf(GDKout,"finished heuristics %d\n",actions);	printFunction(GDKout,mb,LIST_MAL_ALL);#endif    optimizerCheck(mb, "optimizer.heuristics", actions, GDKusec() - clk,OPT_CHECK_ALL);	return MAL_SUCCEED;}#line 168 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_heuristics.mx"#line 171 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/optimizer/opt_heuristics.mx"

⌨️ 快捷键说明

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