1. A method for compiling a high level language (HLL) program into a machine level language (MLL) program readable by a target computer, the method comprising: forming an initial control flow graph of the HLL program, the initial control flow graph including nodes and edge, the nodes including a starting node; initializing a collapse count to zero; setting the initial control flow graph as a current control flow graph; performing iterative collapsing operations on the current control flow graph until only a single node remains, wherein each iteration of the iterative collapsing operations includes: detecting each node in the current control flow graph that has a backedge into a current starting node; for each detected node, performing a collapsing operation in which all nodes of the current control flow graph between the detected node and the current starting node are collapsed into a new starting node; incrementing the collapse count by one for each collapsing operation; updating the current control flow graph to include the new starting node; and if the updated control flow graph includes more than one node, setting the new starting node as the current starting node and the updated control flow graph as the current control flow graph; after performing the iterative collapsing operations, performing data flow analysis on the initial control flow graph for a number of iterations equal to one greater than the collapse count; and generating the MLL program corresponding to the HLL program based upon the data flow analysis.