📄 mal_mes.c
字号:
#line 223 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/scheduler/mal_mes.mx"#include "mal_config.h"#include "mal_mes.h"#include "mal_builder.h"#line 238 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/scheduler/mal_mes.mx"#ifdef WIN32#ifndef LIBMAL_MES#define mal_mes_export extern __declspec(dllimport)#else#define mal_mes_export extern __declspec(dllexport)#endif#else#define mal_mes_export extern#endifmal_mes_export str meo_loop_optimizer(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);mal_mes_export str meo_loop_optimizerImpl(MalBlkPtr mb, MALfcn f, str name);strmeo_loop_optimizerImpl(MalBlkPtr mb, MALfcn f, str name){ int i, l, lb, r, rb; InstrPtr *oldblk; InstrPtr *garbage; InstrPtr ql, qr; int oldtop = 0, g = 0; InstrPtr p; (void) name; oldblk = (InstrPtr *) mb->stmt; oldtop = mb->stop; mb->stmt = alloca(mb->stop * 2 * sizeof(InstrPtr)); mb->stop = 0; garbage = alloca(mb->stop * sizeof(InstrPtr)); for (i = 0; i < oldtop; i++) { p = oldblk[i]; if (p->fcn != f) { pushInstruction(mb, p); continue; }#ifdef MAL_MES_DEBUG printf("meo_loop_optimizer attempt\n"); printInstruction(GDKout, mb, p, LIST_MAL_ALL);#endif /* craft the new code block */ lb = newTmpVariable(mb, TYPE_bit); l = newTmpVariable(mb, getVarType(mb, p->argv[1])); rb = newTmpVariable(mb, TYPE_bit); r = newTmpVariable(mb, getVarType(mb, p->argv[2])); ql = newFcnCall(mb, GDKstrdup("chop"), GDKstrdup("newIterator")); ql->argv[0] = lb; ql->argv[1] = l; ql->retc = 2; ql->argv[2] = p->argv[1]; ql->argc = 3; ql->barrier = BARRIERsymbol; qr = newFcnCall(mb, GDKstrdup("chop"), GDKstrdup("newIterator")); qr->argv[0] = rb; qr->argv[1] = r; qr->retc = 2; qr->argv[2] = p->argv[2]; qr->argc = 3; qr->barrier = BARRIERsymbol; /* and the intelligence should come here */ /* redo part */ qr = newFcnCall(mb, GDKstrdup("chop"), GDKstrdup("hasMoreElements")); qr->argv[0] = rb; qr->argv[1] = r; qr->retc = 2; qr->argc = 3; qr->barrier = REDOsymbol; ql = newFcnCall(mb, GDKstrdup("chop"), GDKstrdup("hasMoreElements")); ql->argv[0] = lb; ql->argv[1] = l; ql->retc = 2; ql->argc = 3; ql->barrier = REDOsymbol; /* exit part */ ql = newAssignment(mb); ql->argv[0] = l; ql->argc = 1; ql->barrier = EXITsymbol; qr = newAssignment(mb); qr->argv[0] = r; qr->argc = 1; qr->barrier = EXITsymbol; } /* if we fail, garbage collection is easy */ for (i = 0; i < g; i++) if (garbage[i]) { } return MAL_SUCCEED;}strmeo_loop_optimizer(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){ MALfcn f; (void) stk; (void) p; f = findMALSymbol("algebra", "cross")->def->stmt[0]->fcn; meo_loop_optimizerImpl(mb, f, "cross"); f = findMALSymbol("algebra", "join")->def->stmt[0]->fcn; meo_loop_optimizerImpl(mb, f, "join"); return MAL_SUCCEED;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -