]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/37143 (ICE in VRP with the auto-vectorizer)
authorRichard Guenther <rguenther@suse.de>
Fri, 22 Aug 2008 21:11:48 +0000 (21:11 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 22 Aug 2008 21:11:48 +0000 (21:11 +0000)
2008-08-22  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/37143
* tree-vect-transform.c (vect_create_cond_for_align_checks): Build
a conversion statement instead of a copy.

* g++.dg/vect/pr37143.C: New testcase.

From-SVN: r139500

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/vect/pr37143.C [new file with mode: 0644]
gcc/tree-vrp.c

index c7e5e5a15b9604942d6c49564ac288375eea958c..84e6baa42d8deb74401d426423260273e2a191b2 100644 (file)
@@ -1,3 +1,9 @@
+2008-08-22  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/37143
+       * tree-vect-transform.c (vect_create_cond_for_align_checks): Build
+       a conversion statement instead of a copy.
+
 2008-08-22  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/37184
index 4ee805b5b4eeb5d1b8f2102076ee87913ed6ddb4..8b41251f29698f6b000c2889a44477178e8a5159 100644 (file)
@@ -1,3 +1,8 @@
+2008-08-22  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/37143
+       * g++.dg/vect/pr37143.C: New testcase.
+
 2008-08-22  Daniel Kraft  <d@domob.eu>
 
        PR fortran/30239
diff --git a/gcc/testsuite/g++.dg/vect/pr37143.C b/gcc/testsuite/g++.dg/vect/pr37143.C
new file mode 100644 (file)
index 0000000..70cdfd2
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+
+void
+f(int NumberOfSideSets, int *ssNumDFperSide, float *ssDF)
+{
+  int i;
+  float *newssDF = __null;
+  int *newssNumDF = new int [NumberOfSideSets];
+  int ndf, nextDF, numNewDF = 0;
+  int ii=0;
+  for (i=0;  i<NumberOfSideSets;  i++)  
+    numNewDF += newssNumDF[i];
+  if (numNewDF > 0)
+    newssDF = new float [numNewDF];
+  nextDF = 0;
+  ndf = ssNumDFperSide[ii];
+  for (i=0;  i<ndf; i++)
+    newssDF[nextDF++] = ssDF[i];
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
index a61f292c43f550879568475060effc2d4bf24296..17fbcdbb7703fe32c550a8c93430ef8458d6c81f 100644 (file)
@@ -2707,7 +2707,10 @@ extract_range_from_unary_expr (value_range_t *vr, enum tree_code code,
        max = fold_unary_to_constant (code, type, vr0.max);
       else if (!needs_overflow_infinity (type))
        max = TYPE_MAX_VALUE (type);
-      else if (supports_overflow_infinity (type))
+      else if (supports_overflow_infinity (type)
+              /* We shouldn't generate [+INF, +INF] as set_value_range
+                 doesn't like this and ICEs.  */
+              && !is_positive_overflow_infinity (min))
        max = positive_overflow_infinity (type);
       else
        {