mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-22 12:08:33 +00:00
76 lines
2.1 KiB
C++
76 lines
2.1 KiB
C++
|
#include "llvm/Reoptimizer/Mapping/FInfo.h"
|
||
|
#include "llvm/Pass.h"
|
||
|
#include "llvm/Module.h"
|
||
|
|
||
|
|
||
|
namespace {
|
||
|
class FunctionInfo : public Pass {
|
||
|
std::ostream &Out;
|
||
|
public:
|
||
|
FunctionInfo(std::ostream &out) : Out(out){}
|
||
|
const char* getPassName() const{return "Sparc FunctionInfo";}
|
||
|
bool run(Module &M);
|
||
|
private:
|
||
|
void FunctionInfo::writePrologue(const char *area,
|
||
|
const char *label);
|
||
|
void FunctionInfo::writeEpilogue(const char *area,
|
||
|
const char *label);
|
||
|
};
|
||
|
}
|
||
|
|
||
|
Pass *getFunctionInfo(std::ostream &out){
|
||
|
return new FunctionInfo(out);
|
||
|
}
|
||
|
|
||
|
bool FunctionInfo::run(Module &M){
|
||
|
unsigned f;
|
||
|
|
||
|
writePrologue("FUNCTION MAP", "FunctionBB");
|
||
|
f=0;
|
||
|
for(Module::iterator FI=M.begin(), FE=M.end(); FE!=FI; ++FI){
|
||
|
if(FI->isExternal()) continue;
|
||
|
Out << "\t.xword BBMIMap"<<f<<"\n";
|
||
|
++f;
|
||
|
}
|
||
|
writeEpilogue("FUNCTION MAP", "FunctionBB");
|
||
|
|
||
|
writePrologue("FUNCTION MAP", "FunctionLI");
|
||
|
f=0;
|
||
|
for(Module::iterator FI=M.begin(), FE=M.end(); FE!=FI; ++FI){
|
||
|
if(FI->isExternal()) continue;
|
||
|
Out << "\t.xword LMIMap"<<f<<"\n";
|
||
|
++f;
|
||
|
}
|
||
|
writeEpilogue("FUNCTION MAP", "FunctionLI");
|
||
|
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
|
||
|
void FunctionInfo::writePrologue(const char *area,
|
||
|
const char *label){
|
||
|
Out << "\n\n\n!"<<area<<"\n";
|
||
|
Out << "\t.section \".rodata\"\n\t.align 8\n";
|
||
|
Out << "\t.global "<<label<<"\n";
|
||
|
Out << "\t.type "<<label<<",#object\n";
|
||
|
Out << label<<":\n";
|
||
|
//Out << "\t.word .end_"<<label<<"-"<<label<<"\n";
|
||
|
}
|
||
|
|
||
|
void FunctionInfo::writeEpilogue(const char *area,
|
||
|
const char *label){
|
||
|
Out << ".end_" << label << ":\n";
|
||
|
Out << "\t.size " << label << ", .end_"
|
||
|
<< label << "-" << label << "\n\n\n\n";
|
||
|
|
||
|
//Out << "\n\n!" << area << " Length\n";
|
||
|
//Out << "\t.section \".bbdata\",#alloc,#write\n";
|
||
|
//Out << "\t.global " << label << "_length\n";
|
||
|
//Out << "\t.align 4\n";
|
||
|
//Out << "\t.type " << label << "_length,#object\n";
|
||
|
//Out << "\t.size "<< label <<"_length,4\n";
|
||
|
//Out << label <<" _length:\n";
|
||
|
//Out << "\t.word\t.end_"<<label<<"-"<<label<<"\n\n\n\n";
|
||
|
}
|