bool ProgramAnalysis :: runOnModule(Module &M) { PI = &getAnalysis<ProfileInfo>(); //Code to set the Hot trace pointer for the Function ; MergeBlocks ; Function HOTTRACEBLOCKCOUNT = -1; MERGEBLOCKCOUNT = -1; for (Module::iterator i = M.begin(), e = M.end(); i!=e; ++i ) { if(i->isDeclaration()) continue; AnalyseFunction(*i); FUNCTIONCOUNT++; HOTTRACEBLOCKCOUNT += HotTraceCounter; HotTraceLink.push_back(HOTTRACEBLOCKCOUNT); MERGEBLOCKCOUNT += MergeCounter; MergeBlockLink.push_back(MERGEBLOCKCOUNT); } // Save things to a File ; Things to be saved: vectors: MergeBlocks && HotTrace // Vectors: BasicBlock Link; MergeBlock Link //Two files created: arrays stores HotTrace and MergeBlocks, seperated by Commas // Each is separated by \n // HotTrace and MergeBlocks are Seperated by -- FILE *fhottrace,*fmerge,*fhotlink,*fmergelink; if((fhottrace=fopen("hottrace", "w"))==NULL) printf("Cannot open file hottrace for reading.\n"); if((fmerge=fopen("merge", "w"))==NULL) printf("Cannot open file merge for reading.\n"); if((fhotlink=fopen("hotlinks", "w"))==NULL) printf("Cannot open file hotlink for reading.\n"); if((fmergelink=fopen("mergelinks", "w"))==NULL) printf("Cannot open file mergelink for reading.\n"); for(int i=0; i<(int)HotTrace.size();i++) fprintf(fhottrace, "%s\n", (HotTrace.at(i)->getName())); for(int i=0; i<(int)MergeBlocks.size();i++) fprintf(fmerge, "%s\n", (MergeBlocks.at(i)->getName())); for(int i=0; i<(int)HotTraceLink.size();i++) fprintf(fhotlink, "%d\n", HotTraceLink.at(i)); for(int i=0; i<(int)MergeBlockLink.size();i++) fprintf(fmergelink, "%d\n", MergeBlockLink.at(i)); printAnalysis(); //Code to set the Hot trace pointer for the Function ; MergeBlocks ; Function End Pointers return false; }
void SymbolTableAnalyse::_Analyse(ast* node){ if (node == NULL) return; switch (node->nodetype) { case 5: { //cout << "variable" << endl; AnalyseVariable(node); return; } case 6: { //cout << "type" << endl; AnalyseType(node); return; } case 7: { //cout << "func" << endl; AnalyseFunction(node); return; } case 8: { AnalyseClassDec(node); return; } case 9: { AnalyseClassDef(node); return; } case 'L': { _Analyse(node->l); _Analyse(node->r); return; } } }