optimize.py 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #!/usr/bin/python
  2. from parser import parse_file
  3. from basic_block import find_basic_blocks
  4. from optimizer import optimize_blocks, optimize_global
  5. from writer import write_statements
  6. if __name__ == '__main__':
  7. from sys import argv, exit
  8. if len(argv) < 2:
  9. print 'Usage: python %s FILE' % argv[0]
  10. exit(1)
  11. # Parse File
  12. statements = parse_file(argv[1])
  13. st_original = len(statements)
  14. # Optimize on a global level
  15. statements = optimize_global(statements)
  16. st_aft_global = len(statements)
  17. # Create basic blocks
  18. blocks = find_basic_blocks(statements)
  19. # Optimize basic blocks
  20. statements = optimize_blocks(blocks)
  21. # Rewrite to assembly
  22. out = write_statements(statements)
  23. print "Optimization:"
  24. print "Original statements:", st_original
  25. print "After global optimization:", st_aft_global
  26. print "After basic blocks optimization:", len(statements)
  27. if len(argv) > 2:
  28. # Save output assembly
  29. f = open(argv[2], 'w+')
  30. f.write(out)
  31. f.close()