]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/32366 (Segfault in significand_size with -ftree-vectorize)
authorUros Bizjak <ubizjak@gmail.com>
Sun, 17 Jun 2007 19:23:30 +0000 (21:23 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Sun, 17 Jun 2007 19:23:30 +0000 (21:23 +0200)
        PR rtl-optimization/32366
        * simplify-rtx.c (simplify_unary_operation_1) [FLOAT_TRUNCATE,
        FLOAT_EXTEND]: Prevent non-scalar modes from entering
        significand_size.

testsuite/ChangeLog:

        PR rtl-optimization/32366
        * testsuite/gcc.dg/vect/pr32366.c: New test.

From-SVN: r125777

gcc/ChangeLog
gcc/simplify-rtx.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/pr32366.c [new file with mode: 0644]

index f284af0cbd13ecc233ba8f8cd8fd30069c6c211f..33e23b916de5ac5a37dd8746ad58a9891e327ecf 100644 (file)
@@ -1,3 +1,10 @@
+2007-06-17  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR rtl-optimization/32366
+       * simplify-rtx.c (simplify_unary_operation_1) [FLOAT_TRUNCATE,
+       FLOAT_EXTEND]: Prevent non-scalar modes from entering
+       significand_size.
+
 2007-06-17  Kenneth Zadeck <zadeck@naturalbridge.com>
 
        PR middle-end/32349
index ade3968d0e68a1e35511ded5b58c8c1ada9fa2d8..9b27bbdbd70be96716c36766da0a4a95e9c03a34 100644 (file)
@@ -700,10 +700,11 @@ simplify_unary_operation_1 (enum rtx_code code, enum machine_mode mode, rtx op)
       /*  (float_truncate (float x)) is (float x)  */
       if (GET_CODE (op) == FLOAT
          && (flag_unsafe_math_optimizations
-             || ((unsigned)significand_size (GET_MODE (op))
-                 >= (GET_MODE_BITSIZE (GET_MODE (XEXP (op, 0)))
-                     - num_sign_bit_copies (XEXP (op, 0),
-                                            GET_MODE (XEXP (op, 0)))))))
+             || (SCALAR_FLOAT_MODE_P (GET_MODE (op))
+                 && ((unsigned)significand_size (GET_MODE (op))
+                     >= (GET_MODE_BITSIZE (GET_MODE (XEXP (op, 0)))
+                         - num_sign_bit_copies (XEXP (op, 0),
+                                                GET_MODE (XEXP (op, 0))))))))
        return simplify_gen_unary (FLOAT, mode,
                                   XEXP (op, 0),
                                   GET_MODE (XEXP (op, 0)));
@@ -736,6 +737,7 @@ simplify_unary_operation_1 (enum rtx_code code, enum machine_mode mode, rtx op)
           */
       if (GET_CODE (op) == FLOAT_EXTEND
          || (GET_CODE (op) == FLOAT
+             && SCALAR_FLOAT_MODE_P (GET_MODE (op))
              && ((unsigned)significand_size (GET_MODE (op))
                  >= (GET_MODE_BITSIZE (GET_MODE (XEXP (op, 0)))
                      - num_sign_bit_copies (XEXP (op, 0),
index 5b08f687091acb0730f874594ccdaf0e740e13c0..96f6ff32d5ff7c2565767c90718f52c3bdfb387e 100644 (file)
@@ -1,3 +1,8 @@
+2007-06-17  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR rtl-optimization/32366
+       * testsuite/gcc.dg/vect/pr32366.c: New test.
+
 2007-06-17  Kenneth Zadeck <zadeck@naturalbridge.com>
 
        * gcc.c-torture/compile/pr32349.c: New testcase.
diff --git a/gcc/testsuite/gcc.dg/vect/pr32366.c b/gcc/testsuite/gcc.dg/vect/pr32366.c
new file mode 100644 (file)
index 0000000..f4eb99f
--- /dev/null
@@ -0,0 +1,13 @@
+/* Testcase by Martin Michlmayr <tbm@cyrius.com> */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_float } */
+
+stream_test (void)
+{
+  static float input[20];
+  int k;
+  for (k = 0; k < 20; k++)
+    input[k] = k * 1.0;
+}
+