1. A method for multistage acyclic static code scheduling of functional languages for very long instruction word architectures including: receiving an intermediate representation of source code representing a function; building a region of an instruction directed acyclic graph representing control flow, data dependency, and scheduling hazards in the function; selecting a portion of the region of the instruction directed acyclic graph that is prone to aggressive instruction scheduling to be partitioned into a plurality of clusters; creating ordered acyclic chains of dependent machine instructions from the portion of the region of the instruction directed acyclic graph for cluster formation wherein creating ordered chains of dependent instructions includes: detecting acyclic chain starter nodes in the directed acyclic graph; sorting the acyclic chain starter nodes in a priority order based upon a topology of the directed acyclic graph; and adding directed acyclic graph nodes to each acyclic chain starter node so directed acyclic graph nodes within each acyclic chain are related by non-control-flow dependency, each added directed acyclic graph node in a particular acyclic chain is dominated by the chain starter node of the particular acyclic chain, and each acyclic chain is independent from other acyclic chains; merging by sequential concatenation of selected ones of the ordered acyclic chains of dependent machine instructions to form the plurality of clusters and marking each node in a cluster with an identifier of the cluster it is part of to generate a marked machine instruction directed acyclic graph, wherein the ordered acyclic chains of dependent machine instructions are selected for merging when all nodes in one chain dominate another chain; and performing static list scheduling on the marked machine instruction directed acyclic graph using information about the plurality of clusters to generate an ordered intermediate representation of the source code.