* tree.c (tree_size) <VECTOR_CST>: New case.
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 28 Mar 2012 21:59:23 +0000 (21:59 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 28 Mar 2012 21:59:23 +0000 (21:59 +0000)
From-SVN: r185930

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/vect7.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/vect7.ads [new file with mode: 0644]
gcc/tree.c

index f84e25e..55fc1e4 100644 (file)
@@ -1,3 +1,7 @@
+2012-03-28  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * tree.c (tree_size) <VECTOR_CST>: New case.
+
 2012-03-28  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.c (ix86_modes_tieable_p): Handle 32bit AVX modes.
index 945e507..b16a490 100644 (file)
@@ -1,3 +1,7 @@
+2012-03-28  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/vect7.ad[sb]: New test.
+
 2012-03-28  Paul Thomas  <pault@gcc.gnu.org>
        Tobias Burnus  <burnus@gcc.gnu.org>
 
diff --git a/gcc/testsuite/gnat.dg/vect7.adb b/gcc/testsuite/gnat.dg/vect7.adb
new file mode 100644 (file)
index 0000000..7911cc8
--- /dev/null
@@ -0,0 +1,20 @@
+-- { dg-do compile }
+
+package body Vect7 is
+
+  procedure Assign is
+    v1 : constant v4sf := (-1.0, -2.0, -3.0, -4.0);
+    v2 : v4sf := v1;
+    v3 : v4sf;
+  begin
+    v3 := vzero;
+    v3 := vconst;
+    v3 := v1;
+    v3 := v2;
+    v3 := (1.0, -2.0, 3.0, -4.0);
+    v3 := (1.0, -2.0, 3.0, F);
+
+    v2 := vzero;
+  end;
+
+end Vect7;
diff --git a/gcc/testsuite/gnat.dg/vect7.ads b/gcc/testsuite/gnat.dg/vect7.ads
new file mode 100644 (file)
index 0000000..faf0167
--- /dev/null
@@ -0,0 +1,15 @@
+package Vect7 is
+
+  type v4sf is array (1 .. 4) of Float;
+  for v4sf'Alignment use 16;
+  pragma Machine_Attribute (v4sf, "vector_type");
+
+  vzero  : constant v4sf := (0.0, 0.0, 0.0, 0.0);
+  vconst : constant v4sf := (1.0, 2.0, 3.0, 4.0);
+  vvar   : v4sf := vconst;
+
+  F : Float := 5.0;
+
+  procedure Assign;
+
+end Vect7;
index cfea9f7..7c7e43a 100644 (file)
@@ -724,6 +724,10 @@ tree_size (const_tree node)
       return (sizeof (struct tree_vec)
              + (TREE_VEC_LENGTH (node) - 1) * sizeof (tree));
 
+    case VECTOR_CST:
+      return (sizeof (struct tree_vector)
+             + (TYPE_VECTOR_SUBPARTS (TREE_TYPE (node)) - 1) * sizeof (tree));
+
     case STRING_CST:
       return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1;