Unrestricted Code Motion: A Program Representation and Transformation Algorithms Based on Future Values