def compile_string(s): ast = compiler.parse(s) east = explicate(ast) print east fast = flatten(east) print fast assembly = instr_select(fast) print assembly assembly = regalloc.regalloc(assembly) assembly = destructure(assembly) assembly = '.globl main\nmain:\n\t' + '\n\t'.join(map(str,assembly)) + '\n' print assembly
def compile_file(file_name, output_name): ast = compiler.parseFile(file_name) east = explicate(ast) fast = flatten(east) assembly = instr_select(fast) assembly = regalloc.regalloc(assembly) assembly = destructure(assembly) assembly = '.globl main\nmain:\n\t' + '\n\t'.join(map(str,assembly)) + '\n' output_file = open(output_name, 'w+') output_file.write(assembly) output_file.close()
def main(): regs = callee_save_regs nregs = len(regs) if len(sys.argv) > 1: nregs = min(nregs, int(sys.argv[1])) if len(sys.argv) > 2: sys.stdin = open(sys.argv[2], 'r') if len(sys.argv) > 3: sys.stdout = open(sys.argv[3], 'w') bril = json.load(sys.stdin) regs = regs[:nregs] for func in bril['functions']: regmap, colored, spilled = regalloc(func['instrs'], regs) codegen_func(func['name'], func['instrs'], regmap) printfooter()
from regalloc import regalloc from codegen import codegen import json import argparse import sys REG_PREFIX = "r_" if __name__ == '__main__': parser = argparse.ArgumentParser( description='register allocation for bril json format') parser.add_argument( "--stats", action="store_true", help="print var to reg mapping instead of code generation") parser.add_argument("--num", type=int, default=3, help="number of registers") args = parser.parse_args() bril = json.load(sys.stdin) regs = [REG_PREFIX + '%02d' % (i + 1) for i in range(args.num)] for func in bril['functions']: regmap, colored, spilled = regalloc(func['instrs'], regs) print('%s {' % func['name']) codegen(func['instrs'], regmap) print('}')