49 lines
1.3 KiB
Ada
49 lines
1.3 KiB
Ada
|
-- { dg-do compile }
|
||
|
-- { dg-options "-O2" }
|
||
|
|
||
|
with Opt8_Pkg;
|
||
|
|
||
|
package body Opt8 is
|
||
|
|
||
|
function Content_Value (Rec : Kappa_Component_Rec)
|
||
|
return Value_Number is
|
||
|
begin
|
||
|
return Opt8_Pkg.Id_To_VN (Rec.Content_VN);
|
||
|
end;
|
||
|
|
||
|
function Possible_Values_Count (V: Kappa_Component_Ptr) return Natural is
|
||
|
Result : Natural := 0;
|
||
|
List : Kappa_Component_Ptr := V;
|
||
|
begin
|
||
|
while List /= null loop
|
||
|
Result := Result +1;
|
||
|
List := List.Next;
|
||
|
end loop;
|
||
|
return Result;
|
||
|
end;
|
||
|
|
||
|
function VN_Complexity (Val : Value_Number; N : Natural)
|
||
|
return Natural is
|
||
|
Result : Natural := 0;
|
||
|
begin
|
||
|
case Val.Kind is
|
||
|
when Membership_VN =>
|
||
|
Result := VN_Complexity(Val, N);
|
||
|
when Selected_Address_VN =>
|
||
|
Result := VN_Complexity(Val, N) + 1;
|
||
|
when Kappa_VN =>
|
||
|
Result := Possible_Values_Count(Val.Possible_New_Values)*3;
|
||
|
if Val.Use_Default then
|
||
|
if Result < N then
|
||
|
Result := Result +
|
||
|
VN_Complexity(Content_Value (Val.old_Value), N);
|
||
|
end if;
|
||
|
end if;
|
||
|
when others =>
|
||
|
Result := 0;
|
||
|
end case;
|
||
|
return Result;
|
||
|
end;
|
||
|
|
||
|
end Opt8;
|