1. A method of generating an executable version of an application using a distributed compiler operating on a plurality of compute nodes, the method comprising: receiving, by each compute node, a portion of source code for an application; compiling, in parallel by each compute node, the portion of the source code received by that compute node into a portion of object code for the application; performing, in parallel by each compute node, inter-procedural analysis on the portion of the object code of the application for that compute node, including sharing results of the inter-procedural analysis among the compute nodes, wherein sharing the results among the compute nodes further comprises performing by the compute nodes an All-To-All collective operation; optimizing, in parallel by each compute node, the portion of the object code of the application for that compute node using the shared results of the inter-procedural analysis including: identifying internal functions and external functions in the portion of the object code of the application for that compute node, wherein identifying external functions includes determining that a function in the portion of the object code is invoked by object code portions on another compute node using the shared results of the inter-procedural analysis; and optimizing the portion of the object code of the application for that compute node in dependence upon the internal functions and the external functions for that portion of the object code; and generating the executable version of the application in dependence upon the optimized portions of the object code of the application.