Abstract:For software pipeling of loops with conditional statements, the worst-case path is a great abstacle. In such a loop, some data dependencies called flexible dependencies, may or may not have instances during execution of the loop. From this fact, flexible dependencies that severely limit parallelization of the loop are identified and replaced with less tight virtual dependencies. Then software pipelining is applied. If the schedule does not satisfy the original flexible dependencies, downpush transform is used to rectify. The resulting schedule is partly or completely free of the worst-case effects. This approac is a complement to the classical control speculation. It is characterized by a try-and-catch way: errors are first allowed to be present in the schedule, and then rectified.