| -- { 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; |