📄 mal_scheduler.c
字号:
#line 183 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/scheduler/mal_scheduler.mx"#include "mal_config.h"#include "mal_scheduler.h"#include "mal_interpreter.h" /* for showErrors() */#include "opt_prelude.h"#include "opt_macro.h"strdebugScheduler(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ Client cntxt = MCgetClient(); (void) stk; cntxt->debugScheduler = cntxt->debugScheduler ? FALSE : TRUE; #line 178 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/scheduler/mal_scheduler.mx" if(pci) { removeInstruction(mb,pci); chkFlow(mb); }#line 197 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/scheduler/mal_scheduler.mx" return MAL_SUCCEED;}#line 207 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/scheduler/mal_scheduler.mx"strschedulerMALBlock(MalBlkPtr mb){ InstrPtr p; int callMALinterpreter = 1, pc, cnt = 0; str msg = NULL; int loops = 0;#ifdef DEBUG_MAL_SCHEDULER int oldstop = mb->stop;#endif /* update the runtime status */ do { cnt = 0; for (pc = 0; pc < mb->stop; pc++) { p = getInstrPtr(mb, pc); if (getModuleId(p) && idcmp(getModuleId(p), "scheduler") == 0) { cnt++; callMALinterpreter++; if (p->fcn) /* all schedulers should behave like patterns */ /* However, we don;t have a stack now */ msg = (str) (*p->fcn) (mb, 0, p); if (msg) { GDKerror(msg); showErrors(); return msg; } pc--; /*scheduler statement has been removed */ } } } while (cnt && loops++ < 64); if (callMALinterpreter) return MAL_SUCCEED;#ifdef DEBUG_MAL_SCHEDULER if (MCgetClient()->debugScheduler && oldstop != mb->stop) { stream_printf(GDKout, "Scheduler effect %d -> %d instructions\n", oldstop, mb->stop); }#endif if (cnt >= 64) throw(MAL, "scheduler.MALscheduler", "too many optimization cycles\n"); return MAL_SUCCEED;}strMALscheduler(Client c){ return schedulerMALBlock(c->curprg->def);}#line 259 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/scheduler/mal_scheduler.mx"#line 278 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/scheduler/mal_scheduler.mx"strRUNisolate(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){ Client cntxt = MCgetClient(); (void) stk; if (cntxt->backup) throw(MAL, "scheduler.isolation", "no space for backup"); cntxt->backup = cntxt->curprg; cntxt->curprg->def = copyMalBlk(mb); removeInstruction(cntxt->curprg->def, p); return MAL_SUCCEED;}#line 293 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/scheduler/mal_scheduler.mx"#line 323 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/scheduler/mal_scheduler.mx"strRUNinline(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){ Symbol qc; str modnme = getVarConstant(mb, getArg(p, 1)).val.sval; str fcnnme = getVarConstant(mb, getArg(p, 2)).val.sval; (void) stk; (void) p; qc = findMALSymbol(modnme, fcnnme); if (qc) MACROprocessor(mb, qc); return MAL_SUCCEED;}#line 344 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/scheduler/mal_scheduler.mx"strRUNsqlbind(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){ int i; str msg = MAL_SUCCEED; Client cntxt = MCgetClient(); Symbol sqlbind = findMALSymbol("sql", "bind"); MALfcn f = getSignature(sqlbind)->fcn; for (i = 0; i < mb->stop; i++) { p = getInstrPtr(mb, i); if (p->fcn == f) { if ((msg = reenterMAL(cntxt, mb, i, i + 1, stk, 0, 0))) break; /* fetch the BAT properties and turn off this instruction */ p->token = NOOPsymbol; } }#ifdef DEBUG_MAL_SCHEDULER stream_printf(GDKout, "scheduler.sqlbind results\n"); printFunction(GDKout, mb, LIST_MAL_ALL);#endif return msg;}#line 370 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/scheduler/mal_scheduler.mx"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -