OSDN Git Service

2011-11-02 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 2 Nov 2011 10:20:32 +0000 (10:20 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 2 Nov 2011 10:20:32 +0000 (10:20 +0000)
PR tree-optimization/50902
* tree-vect-stmts.c (vectorizable_load): Properly convert
an invariant initializer element.

* gcc.dg/torture/pr50902.c: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180765 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr50902.c [new file with mode: 0644]
gcc/tree-vect-stmts.c

index 87e0240..8749863 100644 (file)
@@ -1,3 +1,9 @@
+2011-11-02  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/50902
+       * tree-vect-stmts.c (vectorizable_load): Properly convert
+       an invariant initializer element.
+
 2010-11-02  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/50890
index bf7c366..389dfd4 100644 (file)
@@ -1,3 +1,8 @@
+2011-11-02  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/50902
+       * gcc.dg/torture/pr50902.c: New testcase.
+
 2010-11-02  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/50890
diff --git a/gcc/testsuite/gcc.dg/torture/pr50902.c b/gcc/testsuite/gcc.dg/torture/pr50902.c
new file mode 100644 (file)
index 0000000..5b7275b
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+
+_Bool data[128];
+void foo (_Bool *init)
+{
+  int i;
+  for (i = 0; i < 128; i++)
+    data[i] = *init;
+}
index c6df30e..e91efc9 100644 (file)
@@ -4726,11 +4726,20 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
              /* 4. Handle invariant-load.  */
              if (inv_p && !bb_vinfo)
                {
-                 tree vec_inv;
+                 tree tem, vec_inv;
                  gimple_stmt_iterator gsi2 = *gsi;
                  gcc_assert (!strided_load);
                  gsi_next (&gsi2);
-                 vec_inv = build_vector_from_val (vectype, scalar_dest);
+                 tem = scalar_dest;
+                 if (!useless_type_conversion_p (TREE_TYPE (vectype),
+                                                 TREE_TYPE (tem)))
+                   {
+                     tem = fold_convert (TREE_TYPE (vectype), tem);
+                     tem = force_gimple_operand_gsi (&gsi2, tem, true,
+                                                     NULL_TREE, true,
+                                                     GSI_SAME_STMT);
+                   }
+                 vec_inv = build_vector_from_val (vectype, tem);
                  new_temp = vect_init_vector (stmt, vec_inv,
                                               vectype, &gsi2);
                  new_stmt = SSA_NAME_DEF_STMT (new_temp);