1. A computer implemented method of compiling a human readable high level language program into a machine readable language program of a target computer type comprising the steps of: forming an initial control-flow graph of the program in the human readable language program having nodes, including a starting node, and edges; iteratively detecting each node having a backedge into a current starting node, for each node having a backedge into the current starting node, collapsing the control-flow graph including all nodes between the node having the backedge into the current starting node and the current starting node into a new starting node, counting each collapse, until only a single node remains in the control-flow graph; performing data-flow analysis over the initial control flow graph iterating one more than a number of times equal to the number of counted collapses; and generating a machine readable language program corresponding to said human readable high level language program based upon the data-flow analysis.