if __name__ == "__main__": import sys, compiler import logging.config from p3declassify import P3Declassify from p3wrapper import P3Wrapper from p3uniquifyvars import P3UniquifyVars from gcflattener import GCFlattener from gcrefcount import GCRefCount if len(sys.argv) < 2: sys.exit(1) # configure logging logging.config.fileConfig('logging.cfg') testcases = sys.argv[1:] for testcase in testcases: varalloc = VariableAllocator() declassify = P3Declassify(varalloc) wrapper = P3Wrapper() gcflatten = GCFlattener(varalloc) uniquify = P3UniquifyVars() explicator = P3Explicate(varalloc, handleLambdas=False) gcrefcount = GCRefCount(varalloc) ast = compiler.parseFile(testcase) ast = declassify.transform(ast) ast = wrapper.transform(ast) ast = uniquify.transform(ast) ast = gcflatten.transform(ast) ast = gcrefcount.transform(ast) print prettyAST(explicator.transform(ast))
testcases = sys.argv[1:] for testcase in testcases: varalloc = VariableAllocator() declassify = P3Declassify(varalloc) unique = P3UniquifyVars() wrapper = P3Wrapper() gcflatten = GCFlattener(varalloc) gcrefcount = GCRefCount(varalloc) explicator = P3Explicate(varalloc, handleLambdas=False) heap = P3Heapify(explicator) closure = P3ClosureConversion(explicator, varalloc) flatten = P3Flattener(varalloc) insselector = P3InstructionSelector(varalloc) ast = compiler.parseFile(testcase) ast = declassify.transform(ast) ast = wrapper.transform(ast) ast = unique.transform(ast) ast = gcflatten.transform(ast) ast = gcrefcount.transform(ast) ast = explicator.explicate(ast) ast = heap.transform(ast) astlist = closure.transform(ast) for ast in astlist: ast = flatten.flatten(ast) program = insselector.transform(ast) allocator = P3StackAllocator(program) program = allocator.substitute() print '\nFunction\n=================' print prettyAST(program)
gcrefcount = GCRefCount(varalloc) explicator = P3Explicate(varalloc, handleLambdas=False) heap = P3Heapify(explicator) closer = P3ClosureConversion(explicator, varalloc) flattener = P3Flattener(varalloc) instruction_selector = P3InstructionSelector(varalloc) ifinsselector = P3IfInstructionSelector( varalloc, instruction_selector.labelalloc) generator = P3Generator(allowMem2Mem=True) # send the AST through the pipeline ast = compiler.parseFile(testcase) ast = declassify.transform(ast) ast = wrapper.transform(ast) ast = uniquify.transform(ast) ast = gcflattener.transform(ast) ast = gcrefcount.transform(ast) ast = explicator.explicate(ast) ast = heap.transform(ast) astlist = closer.transform(ast) output = '' for ast in astlist: flatast = flattener.flatten(ast) program = instruction_selector.visit(flatast) allocator = P3StackAllocator(program) #allocator = P3RegAllocator(program, varalloc) program = allocator.substitute() program = ifinsselector.visit(program) output = output + generator.generate(program) outputfile = '%s.s' % testcase[:testcase.rfind('.')] f = open(outputfile, 'w')
gcflattener = GCFlattener(varalloc) gcrefcount = GCRefCount(varalloc) explicator = P3Explicate(varalloc,handleLambdas=False) heap = P3Heapify(explicator) closer = P3ClosureConversion(explicator, varalloc) flattener = P3Flattener(varalloc) instruction_selector = P3InstructionSelector(varalloc) ifinsselector = P3IfInstructionSelector(varalloc,instruction_selector.labelalloc) generator = P3Generator(allowMem2Mem=True) # send the AST through the pipeline ast = compiler.parseFile(testcase) ast = declassify.transform(ast) ast = wrapper.transform(ast) ast = uniquify.transform(ast) ast = gcflattener.transform(ast) ast = gcrefcount.transform(ast) ast = explicator.explicate(ast) ast = heap.transform(ast) astlist = closer.transform(ast) output = '' for ast in astlist: flatast = flattener.flatten(ast) program = instruction_selector.visit(flatast) allocator = P3StackAllocator(program) #allocator = P3RegAllocator(program, varalloc) program = allocator.substitute() program = ifinsselector.visit(program) output = output + generator.generate(program) outputfile = '%s.s' % testcase[:testcase.rfind('.')] f = open(outputfile, 'w')
def visit_Compare(self, node, *args, **kwargs): return node if __name__ == "__main__": import compiler, sys import logging.config if len(sys.argv) < 2: sys.exit(1) # configure logging logging.config.fileConfig('logging.cfg') testcases = sys.argv[1:] for testcase in testcases: varalloc = VariableAllocator() declassify = P3Declassify(varalloc) wrapper = P3Wrapper() unique = P3UniquifyVars() flatten = GCFlattener(varalloc,True) refcount = GCRefCount(varalloc) ast = compiler.parseFile(testcase) ast = declassify.transform(ast) ast = wrapper.transform(ast) ast = unique.transform(ast) ast = flatten.transform(ast) ast = refcount.transform(ast) print ast print prettyAST(ast)