codegen.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "cgstd.h"
  2. #include "codegen.h"
  3. #include "cgdebug.h"
  4. #include "cgallocregs.h"
  5. #include "cgmodule_x86.h"
  6. #include "cgmodule_ppc.h"
  7. void cgGenCode( ostream &o,const vector<CGFun*> &funs ){
  8. CGModule *mod;
  9. if( opt_arch=="x86" ) mod=new CGModule_X86(o);
  10. else if( opt_arch=="ppc" ) mod=new CGModule_PPC(o);
  11. else fail( "No backend available" );
  12. for( int k=0;k<funs.size();++k ){
  13. CGFun *fun=funs[k];
  14. // cout<<"Fun:"<<fun->sym->value<<endl;
  15. CGFrame *frame=mod->createFrame( fun );
  16. // cout<<frame->fun;
  17. // cout<<"FindEscapes"<<endl;
  18. frame->findEscapes(); //local escaping tmps
  19. //cout<<"RenameTmps"<<endl;
  20. frame->renameTmps(); //rename tmps->regs
  21. //cout<<"Linearize"<<endl;
  22. frame->linearize(); //remove SEQ and ESQ nodes
  23. //cout<<"fixInt64"<<endl;
  24. frame->fixInt64(); //rewrite int_64 code
  25. //cout<<"fixSymbols"<<endl;
  26. frame->fixSymbols(); //fix symbols depending on platform
  27. //cout<<"preOptimize"<<endl;
  28. frame->preOptimize(); //do some opts before asm gen
  29. //cout<<"genAssem"<<endl;
  30. frame->genAssem();
  31. //cout<<"createFlow"<<endl;
  32. frame->createFlow();
  33. // cout<<frame->assem;
  34. //cout<<"optDeadCode"<<endl;
  35. frame->optDeadCode();
  36. //cout<<"optDupLoads"<<endl;
  37. frame->optDupLoads();
  38. // cout<<frame->fun;
  39. // cout<<frame->assem;
  40. //cout<<"allocRegs"<<endl;
  41. frame->allocRegs();
  42. frame->finish();
  43. frame->deleteFlow();
  44. // frame->peepOpt(); //BROKEN!!!!!
  45. //cout<<frame->assem;
  46. }
  47. mod->emitModule();
  48. }