with Instrument;
use Instrument;
------------------
-- LOCAL REFERENCE 10
------------------

-- THIS TEST EVALUATES THE CODE EFFICIENCY OF REFERENCING A COMPONENT OF
-- A LOCAL ARRAY VARIABLE, I.E., A REFERENCE TO AN ARRAY THAT IS
-- DECLARED IMMEDIATELY WITHIN THE DECLARATIVE REGION IN WHICH THE
-- COMPONENT IS REFERENCED.

-- THE TEST AND NOISE VERSIONS FOR THIS EVALUATION ARE STRUCTURALLY
-- IDENTICAL TO LOCAL_REFERENCE_01 EXCEPT THAT TEN LOCAL REFERENCES ARE
-- INCLUDED.  THIS MULTIPLICITY REDUCES THE LIKELIHOOD THAT THE CODE
-- EFFICIENCY METRICS ARE COMPROMISED BY DEDICATING THE BASE ADDRESS OF
-- ALL LOCAL ARRAY VARIABLES TO REGISTERS, A POSSIBLE OPTIMIZATION IN
-- THE SINGLE REFERENCE EVALUATION.  THE METRICS FOR THE EVALUATION ARE
-- COMPUTED BY AVERAGING THE DERIVED RESULTS.

procedure Lavrb2 is
    Arr_Size : constant := 1000;
    package Dr_Cs is new Arr_Procs (Integer, Arr_Size);
    use Dr_Cs;

    Local_01 : T (Init'Range);
    Local_02 : T (Init'Range);
    Local_03 : T (Init'Range);
    Local_04 : T (Init'Range);
    Local_05 : T (Init'Range);
    Local_06 : T (Init'Range);
    Local_07 : T (Init'Range);
    Local_08 : T (Init'Range);
    Local_09 : T (Init'Range);
    Local_10 : T (Init'Range);

    I : Index := Init'First;

begin
    Start ("LAVRB2", "10 Local Var. Ref. (test)");
    for I in 1 .. Arr_Size loop

        Let (Global, Ident (Init));
        Let (Local_01, Ident (Init));
        Let (Local_02, Ident (Init));
        Let (Local_03, Ident (Init));
        Let (Local_04, Ident (Init));
        Let (Local_05, Ident (Init));
        Let (Local_06, Ident (Init));
        Let (Local_07, Ident (Init));
        Let (Local_08, Ident (Init));

        Let (Local_09, Ident (Init));
        Let (Local_10, Ident (Init));

        if Global (I) = Init (I) then
            Global (I) := Local_01 (I);   -- COMMENTED OUT IN NOISE VERSION
            Let (Local_01, Ident (Init));
        end if;

        if Global (I) = Init (I) then
            Global (I) := Local_02 (I);   -- COMMENTED OUT IN NOISE VERSION
            Let (Local_02, Ident (Init));
        end if;

        if Global (I) = Init (I) then
            Global (I) := Local_03 (I);   -- COMMENTED OUT IN NOISE VERSION
            Let (Local_03, Ident (Init));
        end if;

        if Global (I) = Init (I) then
            Global (I) := Local_04 (I);   -- COMMENTED OUT IN NOISE VERSION
            Let (Local_04, Ident (Init));
        end if;

        if Global (I) = Init (I) then
            Global (I) := Local_05 (I);   -- COMMENTED OUT IN NOISE VERSION
            Let (Local_05, Ident (Init));
        end if;

        if Global (I) = Init (I) then
            Global (I) := Local_06 (I);   -- COMMENTED OUT IN NOISE VERSION
            Let (Local_06, Ident (Init));
        end if;

        if Global (I) = Init (I) then
            Global (I) := Local_07 (I);   -- COMMENTED OUT IN NOISE VERSION
            Let (Local_07, Ident (Init));
        end if;

        if Global (I) = Init (I) then
            Global (I) := Local_08 (I);   -- COMMENTED OUT IN NOISE VERSION
            Let (Local_08, Ident (Init));
        end if;

        if Global (I) = Init (I) then
            Global (I) := Local_09 (I);   -- COMMENTED OUT IN NOISE VERSION
            Let (Local_09, Ident (Init));
        end if;

        if Global (I) = Init (I) then

            Global (I) := Local_10 (I);   -- COMMENTED OUT IN NOISE VERSION
            Let (Local_10, Ident (Init));
        end if;


        Let (Global, Ident (Local_01));
        Let (Global, Ident (Local_02));
        Let (Global, Ident (Local_03));
        Let (Global, Ident (Local_04));
        Let (Global, Ident (Local_05));
        Let (Global, Ident (Local_06));
        Let (Global, Ident (Local_07));
        Let (Global, Ident (Local_08));
        Let (Global, Ident (Local_09));
        Let (Global, Ident (Local_10));

    end loop;
    Stop;
end Lavrb2;