re PR tree-optimization/70396 (ICE on valid code at -O3 in 32-bit and 64-bit modes...
authorRichard Biener <rguenther@suse.de>
Thu, 24 Mar 2016 14:07:42 +0000 (14:07 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 24 Mar 2016 14:07:42 +0000 (14:07 +0000)
2016-03-24  Richard Biener  <rguenther@suse.de>

PR tree-optimization/70396
* tree-vect-stmts.c (vectorizable_comparison): Use
get_vectype_for_scalar_type.

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

From-SVN: r234455

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

index a4ade25c6ca17d983a168fe04dff70075b3a4a5b..c17cc11c624e2fca62a5b0bfff0ab2647353663d 100644 (file)
@@ -1,3 +1,9 @@
+2016-03-24  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/70396
+       * tree-vect-stmts.c (vectorizable_comparison): Use
+       get_vectype_for_scalar_type.
+
 2016-03-24  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/70370
index 73cb726f644fe37968324ecc4b027ad8af4e6d8d..99ef9f7a4177cc1f8d009e8822bb3065216772c5 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-24  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/70396
+       * gcc.dg/torture/pr70396.c: New testcase.
+
 2016-03-24  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/70370
diff --git a/gcc/testsuite/gcc.dg/torture/pr70396.c b/gcc/testsuite/gcc.dg/torture/pr70396.c
new file mode 100644 (file)
index 0000000..839610f
--- /dev/null
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+
+struct S2 {
+    signed f1 : 3;
+};
+int a[100];
+int b, c;
+char d;
+void fn1() {
+    struct S2 e;
+    b / e.f1;
+    c = 2;
+    for (; c < 100; c++) {
+       d = 0;
+       a[c] = ~e.f1 != d;
+    }
+}
index d12c06281962cc5e597211102ef3963dece36970..cd5afeafebd6b21996e50ea9e9d2ed6389764843 100644 (file)
@@ -7790,8 +7790,8 @@ vectorizable_comparison (gimple *stmt, gimple_stmt_iterator *gsi,
   /* Invariant comparison.  */
   if (!vectype)
     {
-      vectype = build_vector_type (TREE_TYPE (rhs1), nunits);
-      if (tree_to_shwi (TYPE_SIZE_UNIT (vectype)) != current_vector_size)
+      vectype = get_vectype_for_scalar_type (TREE_TYPE (rhs1));
+      if (TYPE_VECTOR_SUBPARTS (vectype) != nunits)
        return false;
     }
   else if (nunits != TYPE_VECTOR_SUBPARTS (vectype))