📄 opt_heuristics.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 + -