-- FOR-LOOP 1 ITERATION INDEX USED
-------------------------------

-- THIS TEST EVALUATES THE CODE EFFICIENCY OF A LOOP STATEMENT, WITH
-- THE FOR ITERATION SCHEME, THAT USES THE LOOP PARAMETER IN THE BODY OF
-- THE LOOP.  THE LOOP IS EXECUTED ONE TIME.

-- THE TEST CONSISTS OF TWO LOOP STATEMENTS THAT ARE EACH EXECUTED ONE
-- TIME.  THE BODY OF EACH LOOP INCLUDES A CAMOUFLAGED ASSIGNMENT TO THE
-- GLOBAL VARIABLE USING THE LOOP PARAMETER.

-- IN THE NOISE VERSION, THE FIRST LOOP STATEMENT IS REMOVED AND THE
-- CAMOUFLAGED ASSIGNMENT IS RELOCATED TO THE BODY OF THE REMAINING LOOP
-- TO REFERENCE THAT LOOP PARAMETER.  AS A RESULT, THE CODE EFFICIENCY
-- METRICS FOR A LOOP STATEMENT IN WHICH THE LOOP PARAMETER IS USED CAN
-- BE DERIVED.  ADDITIONAL CAMOUFLAGED ASSIGNMENTS ARE INCLUDED TO
-- PREVENT THE LOCAL VARIABLES FROM BECOMING CANDIDATES FOR ELIMINATION
-- AS DEAD VARIABLES IN THE NOISE VERSION.  THE NON-STATIC DISCRETE
-- RANGES IN THE TEST VERSION ARE CAMOUFLAGED DIFFERENTLY TO PREVENT
-- THE FUSION OF THE TWP LOOP STATEMENTS.

with Instrument;
use Instrument;
with Ics;
use Ics;
procedure F1iua2 is

    N : Integer;
    M : Integer;

begin

    Start ("F1IUA2", " LOOP STMT, USING FOR WITH " &
                        "LOOP PARAMETER USED, 1000 REPETITIONS");

    for Lcv in 1 .. 1000 loop
        N := Ident (One);
        M := Ident (One);

        for I in N .. M loop
            -- ONLY EXECUTED ONCE
            Let (Global, Ident (I));
        end loop;

        for K in Ident (Zero) .. Ident (Zero) loop
            Let (Global, Ident (K));
            --  LET(GLOBAL, IDENT(K));
        end loop;

        Let (Global, N);
        Let (Global, M);

    end loop;

    Stop;

end F1iua2;