int main(int argc, char *argv[]) { fprintf(stderr, "Welcome to LoopTesterApp, C++ edition\n"); MaoCFG cfg; LoopStructureGraph lsg; fprintf(stderr, "Constructing Simple CFG...\n"); cfg.CreateNode(0); // top buildBaseLoop(&cfg, 0); cfg.CreateNode(1); // bottom new BasicBlockEdge(&cfg, 0, 2); fprintf(stderr, "15000 dummy loops\n"); for (int dummyloops = 0; dummyloops < 15000; ++dummyloops) { LoopStructureGraph * lsglocal = new LoopStructureGraph(); FindHavlakLoops(&cfg, lsglocal); delete(lsglocal); } fprintf(stderr, "Constructing CFG...\n"); int n = 2; for (int parlooptrees = 0; parlooptrees < 10; parlooptrees++) { cfg.CreateNode(n + 1); buildConnect(&cfg, 2, n + 1); n = n + 1; for (int i = 0; i < 100; i++) { int top = n; n = buildStraight(&cfg, n, 1); for (int j = 0; j < 25; j++) { n = buildBaseLoop(&cfg, n); } int bottom = buildStraight(&cfg, n, 1); buildConnect(&cfg, n, top); n = bottom; } buildConnect(&cfg, n, 1); } fprintf(stderr, "Performing Loop Recognition\n1 Iteration\n"); int num_loops = FindHavlakLoops(&cfg, &lsg); fprintf(stderr, "Another 50 iterations...\n"); int sum = 0; for (int i = 0; i < 50; i++) { LoopStructureGraph lsg; fprintf(stderr, "."); sum += FindHavlakLoops(&cfg, &lsg); } fprintf(stderr, "\nFound %d loops (including artificial root node)" "(%d)\n", num_loops, sum); }
int buildBaseLoop(MaoCFG *cfg, int from) { int header = buildStraight(cfg, from, 1); int diamond1 = buildDiamond(cfg, header); int d11 = buildStraight(cfg, diamond1, 1); int diamond2 = buildDiamond(cfg, d11); int footer = buildStraight(cfg, diamond2, 1); buildConnect(cfg, diamond2, d11); buildConnect(cfg, diamond1, header); buildConnect(cfg, footer, from); footer = buildStraight(cfg, footer, 1); return footer; }
void QwtPlotPropertySetDialog::setChartPtr(ChartWave_qwt *chart) { if(m_plot)//如果已经关联了图表,需要先接触连接 disChartConnect(); m_plot = chart; buildConnect(); }
int buildStraight(MaoCFG *cfg, int start, int n) { for (int i = 0; i < n; i++) { buildConnect(cfg, start + i, start + i + 1); } return start + n; }
QwtPlotPropertySetDialog::QwtPlotPropertySetDialog(QWidget *parent,ChartWave_qwt* plot) : QWidget(parent) ,m_plot(plot) ,m_enableSet(false) { createUI(); buildConnect(); }