-#include "debug-print.h"
-
-/* LOOP strategy:
-
- Each loop causes 3 different transformations to be output. The
- first two are output when the LOOP command is encountered; the last
- is output when the END LOOP command is encountered.
-
- The first to be output resets the pass number in the second
- transformation to -1. This ensures that the pass number is set to
- -1 every time the loop is encountered, before the first iteration.
-
- The second transformation increments the pass number. If
- there is no indexing or test clause on either LOOP or END
- LOOP, then the pass number is checked against MXLOOPS and
- control may pass out of the loop. Otherwise the indexing or
- test clause(s) on LOOP are checked, and again control may pass
- out of the loop.
-
- After the second transformation the body of the loop is
- executed.
-
- The last transformation checks the test clause if present and
- either jumps back up to the second transformation or
- terminates the loop.
-
- Flow of control:
-
- 1. LOOP. Sets pass number to -1 and continues to next
- transformation.
-
- 2. LOOP. Increments pass number. Tests optional indexing
- clause and optional IF clause. If we're done with the
- loop, we jump to the transformation just after LOOP
- transformation 3.
-
- Otherwise, we continue through the transformations in the
- loop body.
-
- 3. END LOOP. We test the optional IF clause. If we need to
- make another pass through the loop, we jump to LOOP
- transformation 2.
-
- Otherwise, we continue with the transformation jump after
- the loop.
- */
-
-/* Types of limits on loop execution. */
-enum
+/* LOOP outputs a transformation that is executed only on the
+ first pass through the loop. On this trip, it initializes for
+ the first pass by resetting the pass number, setting up the
+ indexing clause, and testing the LOOP IF clause. If the loop
+ is not to be entered at all, it jumps forward just past the
+ END LOOP transformation; otherwise, it continues to the
+ transformation following LOOP.
+
+ END LOOP outputs a transformation that executes at the end of
+ each trip through the loop. It checks the END LOOP IF clause,
+ then updates the pass number, increments the indexing clause,
+ and tests the LOOP IF clause. If another pass through the
+ loop is due, it jumps backward to just after the LOOP
+ transformation; otherwise, it continues to the transformation
+ following END LOOP. */
+
+struct loop_trns