Description:
Previous deforestation and supercompilation algorithms may introduceaccidental termination when applied to call-by-value programs. This hideslooping bugs from the programmer, and changes the behavior of a programdepending on whether it is optimized or not. We present a supercompilationalgorithm for a higher-order call-by-value language and prove that thealgorithm both terminates and preserves termination properties. This algorithmutilizes strictness information to decide whether to substitute or not andcompares favorably with previous call-by-name transformations.