ABSTRACT

The method of determining reverse code based on local information, such as inverting each statement individually, is effective in many situations, but it is not the most efficient (memory-wise or computationally). In contrast, other non-local approaches are needed to arrive at a good reversal, ideally, eliminating the need for history. Examples include backtracking in the defuse graph of the variables and/or performing inter-statement code analysis. How much higher one might have to rise in increasing the scope or reach of code depends on the particular code to be reversed. In this vein, reversibility depends on the beholder’s eye, especially on the granularity of computation at which the reversal is attempted. While individual instructions might not be retraced backward perfectly, some program fragments might be perfectly invertible when considered in aggregate. In other words, while a local view might be irreversible, a more global view might readily make it reversible with reduced or no memory. However, the generation of the aggregate reverses may be highly challenging.