From a2ce7808e4763ebbcea9d9369a5a506cddd90dea Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sat, 8 Dec 2012 11:44:05 +0000 Subject: [PATCH] * tree-ssa-loop-im.c (for_each_index) : New case. From-SVN: r194320 --- gcc/ChangeLog | 4 +++ gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gnat.dg/vect9.adb | 45 +++++++++++++++++++++++++++++ gcc/testsuite/gnat.dg/vect9.ads | 14 +++++++++ gcc/testsuite/gnat.dg/vect9_pkg.ads | 17 +++++++++++ gcc/tree-ssa-loop-im.c | 1 + 6 files changed, 86 insertions(+) create mode 100644 gcc/testsuite/gnat.dg/vect9.adb create mode 100644 gcc/testsuite/gnat.dg/vect9.ads create mode 100644 gcc/testsuite/gnat.dg/vect9_pkg.ads diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6d4e74b3055..cf7bb72fa41 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2012-12-08 Eric Botcazou + + * tree-ssa-loop-im.c (for_each_index) : New case. + 2012-12-07 Steven Bosscher * ree.c (struct ext_cand): Remove GTY markers. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6958948bb71..b150c598b70 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-12-08 Eric Botcazou + + * gnat.dg/vect9.ad[sb]: New test. + * gnat.dg/vect9_pkg.ads: New helper. + 2012-12-07 Mike Stump * gnat.dg/discr38.adb: Don't use ^M line endings. diff --git a/gcc/testsuite/gnat.dg/vect9.adb b/gcc/testsuite/gnat.dg/vect9.adb new file mode 100644 index 00000000000..9c586c2b9c6 --- /dev/null +++ b/gcc/testsuite/gnat.dg/vect9.adb @@ -0,0 +1,45 @@ +-- { dg-do compile } +-- { dg-options "-O" } + +package body Vect9 is + + function Cmove + (X : in Unit; + Y : in Unit; + If_True : in Unit; + If_False : in Unit) + return Unit + is + Res : Unit; + begin + for P in Unit'Range loop + if X (P) >= Y (P) then + Res (P) := If_True (P); + else + Res (P) := If_False (P); + end if; + end loop; + + return Res; + end; + pragma Inline_Always (Cmove); + + procedure Proc + (This : in Rec; + CV : in Unit_Vector; + Data : in out Unit_Vector) + is + begin + for Index in Data'Range loop + Data (Index) := Mul (Zero_Unit, Zero_Unit); + declare + Addend : constant Unit + := Cmove (CV (Index), Zero_Unit, Zero_Unit, Zero_Unit) ; + begin + Data (Index) := Data(Index) + Addend; + end; + This.Data (Index) := Data (Index); + end loop; + end; + +end Vect9; diff --git a/gcc/testsuite/gnat.dg/vect9.ads b/gcc/testsuite/gnat.dg/vect9.ads new file mode 100644 index 00000000000..38a0ae44b86 --- /dev/null +++ b/gcc/testsuite/gnat.dg/vect9.ads @@ -0,0 +1,14 @@ +with Vect9_Pkg; use Vect9_Pkg; + +package Vect9 is + + type Rec is record + Data : Vector_Access; + end record; + + procedure Proc + (This : in Rec; + CV : in Unit_Vector; + Data : in out Unit_Vector); + +end Vect9; diff --git a/gcc/testsuite/gnat.dg/vect9_pkg.ads b/gcc/testsuite/gnat.dg/vect9_pkg.ads new file mode 100644 index 00000000000..973a87b5d03 --- /dev/null +++ b/gcc/testsuite/gnat.dg/vect9_pkg.ads @@ -0,0 +1,17 @@ +package Vect9_Pkg is + + type Unit is array (1 .. 4) of Float; + for Unit'Alignment use 32; + pragma Machine_Attribute (Unit, "vector_type"); + pragma Machine_Attribute (Unit, "may_alias"); + + Zero_Unit : constant Unit := (others => 0.0); + + function Mul (X : in Unit; Y : in Unit) return Unit; + function "+"(Left, Right : Unit) return Unit; + function "*"(Left, Right : Unit) return Unit; + + type Unit_Vector is array (Positive range <>) of Unit; + type Vector_Access is access all Unit_Vector; + +end Vect9_Pkg; diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c index d9265db44e5..bad218dbb44 100644 --- a/gcc/tree-ssa-loop-im.c +++ b/gcc/tree-ssa-loop-im.c @@ -291,6 +291,7 @@ for_each_index (tree *addr_p, bool (*cbck) (tree, tree *, void *), void *data) case VAR_DECL: case PARM_DECL: + case CONST_DECL: case STRING_CST: case RESULT_DECL: case VECTOR_CST: -- 2.30.2