summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gnat.dg/opt8.adb
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gnat.dg/opt8.adb
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/gnat.dg/opt8.adb')
-rw-r--r--gcc/testsuite/gnat.dg/opt8.adb48
1 files changed, 48 insertions, 0 deletions
diff --git a/gcc/testsuite/gnat.dg/opt8.adb b/gcc/testsuite/gnat.dg/opt8.adb
new file mode 100644
index 000000000..72145fd6b
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt8.adb
@@ -0,0 +1,48 @@
+-- { 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;