From: DDL <dd...@ve...> - 2006-04-12 01:55:46
|
Hi, long time lurker, first time poster. I was poking around the Python's back end (!!) to see where a peephole = optimizer could go. As occasional comments in the mail archives have = noted, there seems to be no place in the compiler that the full set of a = function's assembly instructions are collected together. The only = apparent way to add a peephole optimizer to the assembler is by either a = massive rewrite to the way machine instructions are emitted by vops, or = some bad kludge that tries to capture the assembly instructions as the = vops are processed (and keep syncronized with the backpatches and = fixups). Is there another option, such as optimizing the code completely = separately from the compiler? For example take a compiled function, use = the disassembler to re-create the assembly code, then peephole process = the assembly code and make any resulting changes to the machine code = (either in parallel or queue up changes). You would also need to then = update the labels, offsets and any padding for the machine code. = Finally, bind the new machine instruction set to the proper slot of the = symbol. Another approach might be to read an existing fasl file in a streaming = fashion, and optimize function code before writing it out to a new fasl = file. My question is does any of these alternatives make sense? In some ways = it would be a nice tool separate from the compiler that can allow = experimenting and benchmarking certain code optimizations (of the = peephole variety, not the stuff Python already excels at) to find low = hanging fruit. DDL |