void benchAnalyzingVertices(CallGraph& graph) { Infos infos; Analyzer analyzer(graph, infos); Timer timer; FunctionIterator fit, fend; for (boost::tie(fit, fend) = graph.functions(); fit != fend; ++fit) { analyzer.computeFunctionTemperature(*fit); } analyzeVertices += timer.elapsed(); }
void benchForeachVertices(const CallGraph& graph) { double sum = 0; Timer timer; FunctionIterator first, last; for (boost::tie(first, last) = graph.functions(); first != last; ++first) { sum += graph[*first].temperature; } foreachVertices += timer.elapsed(); fakeSum += sum; }
int main(int argc, const char* argv[]) { if (argc < 2) { cout << "Not enough arguments. Provide at least the dot file to read" << endl; return 1; } Parameters::init(); Infos infos; GraphReader reader(infos); CallGraph* graph = reader.read(argv[1]); ofstream stream; stream.open("main.cpp"); stream << "//Auto generated by inlining analyzer" << endl; stream << "#include <iostream>" << endl << endl; stream << "using std::cout;" << endl; stream << "using std::endl;" << endl << endl; string mainFunction = ""; //Print the declarations FunctionIterator first, last; for (boost::tie(first, last) = graph->functions(); first != last; ++first) { string name = (*graph)[*first].name; transform(name); if (filter(name)) { continue; } if ((*graph)[*first].calls == 0) { mainFunction = name; } //Declaration stream << "void FFF" << name << "() __attribute__ ((noinline));" << endl; } //Print the definitions for (boost::tie(first, last) = graph->functions(); first != last; ++first) { string name = (*graph)[*first].name; transform(name); if (filter(name)) { continue; } //Definition stream << "void FFF" << name << "() {" << endl; stream << "\tcout << \"I'm in " << name << "\" << endl;" << endl; OutCallSiteIterator it, end; for (boost::tie(it, end) = boost::out_edges(*first, *graph->getGraph()); it != end; ++it) { string called = (*graph)[boost::target(*it, *graph->getGraph())].name; transform(called); if (filter(called)) { continue; } stream << "\tFFF" << called << "();" << endl; } stream << "}" << endl << endl; } //Write main function stream << "int main(){" << endl; stream << "\tcout << \"I'm in main()\" << endl;" << endl; stream << "\tFFF" << mainFunction << "();" << endl; stream << "\treturn 0;" << endl; stream << "}" << endl; stream.close(); delete graph; return 0; }