aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2007-06-17 21:23:30 +0200
committerUros Bizjak <uros@gcc.gnu.org>2007-06-17 21:23:30 +0200
commita0c6429598d325bd5d615cb717b1494a436a08c5 (patch)
tree3a5ef37106918b462ee5817ba6fb93a6bc863cb3
parent5f7055585a583123884ed6b9c2eec1c8f340dbdb (diff)
downloadgcc-a0c6429598d325bd5d615cb717b1494a436a08c5.zip
gcc-a0c6429598d325bd5d615cb717b1494a436a08c5.tar.gz
gcc-a0c6429598d325bd5d615cb717b1494a436a08c5.tar.bz2
re PR rtl-optimization/32366 (Segfault in significand_size with -ftree-vectorize)
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
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/simplify-rtx.c10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr32366.c13
4 files changed, 31 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f284af0..33e23b9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index ade3968..9b27bbd 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -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),
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5b08f68..96f6ff3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..f4eb99f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr32366.c
@@ -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;
+}
+