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 Layer::build() { ConversionStation* conversionStation; try { materialObject_.store(propertyTree()); materialObject_.build(); logINFO(Form("Building %s", fullid(*this).c_str())); check(); if (tiltedLayerSpecFile().empty()) buildStraight(); else buildTilted(); for (auto& currentStationNode : stationsNode) { conversionStation = new ConversionStation(); conversionStation->store(currentStationNode.second); conversionStation->check(); conversionStation->build(); if(conversionStation->stationType() == ConversionStation::Type::FLANGE) { if(flangeConversionStation_ == nullptr) { //take only first defined flange station flangeConversionStation_ = conversionStation; } }else if(conversionStation->stationType() == ConversionStation::Type::SECOND) { secondConversionStations_.push_back(conversionStation); } } cleanup(); builtok(true); } catch (PathfulException& pe) { pe.pushPath(fullid(*this)); throw; } }