diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2012-12-08 11:44:05 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@adacore.com> | 2012-12-08 11:44:05 +0000 |
commit | 5abbfe03c9e1badf35447efc7a408961155df69b (patch) | |
tree | d9b060fb7c4750dc855126d3dedb6e4a6ae0c99d | |
parent | 6caff32a3fd0cdf8392c2170be89a2612aaf8f8e (diff) |
* tree-ssa-loop-im.c (for_each_index) <CONST_DECL>: New case.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@194320 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/vect9.adb | 45 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/vect9.ads | 14 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/vect9_pkg.ads | 17 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-im.c | 1 |
6 files changed, 86 insertions, 0 deletions
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 <ebotcazou@adacore.com> + + * tree-ssa-loop-im.c (for_each_index) <CONST_DECL>: New case. + 2012-12-07 Steven Bosscher <steven@gcc.gnu.org> * 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 <ebotcazou@adacore.com> + + * gnat.dg/vect9.ad[sb]: New test. + * gnat.dg/vect9_pkg.ads: New helper. + 2012-12-07 Mike Stump <mikestump@comcast.net> * 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: |