In contrast probabilistic data-flow systems take runtime information into account by using edge probabilities to distinguish between frequently and rarely executed branches. The solution of such a system specifies the probability of data-flow facts at each program point. Figure 2.2 depicts a probabilistic optimization framework for a compiler with a profiling feedback loop. The profiler is responsible for producing profile information based on the execution environment. This information is passed over to the probabilistic optimizer.
Sophisticated transformations can utilize that solution for generating highly efficient code.
In fact, there are two reasons which are responsible for the deviations. On the one hand a program path is reduced to edge probabilities, and on the other hand it is assumed that a particular branch is independent of the execution history, which is obviously not the case in reality. While the usage of edge probabilities is indispensable to get an efficient handle on the problem, there is potential for improvement by taking execution history into account. Currently, we are working on further improvements of our probabilistic data-flow analysis framework and on advanced optimizations in various contexts based on it. This work is being done in cooperation with Bernhard Scholz from the Vienna University of Technology.