From a0c6429598d325bd5d615cb717b1494a436a08c5 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Sun, 17 Jun 2007 21:23:30 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 +++++++ gcc/simplify-rtx.c | 10 ++++++---- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/vect/pr32366.c | 13 +++++++++++++ 4 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/pr32366.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f284af0cbd1..33e23b916de 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-06-17 Uros Bizjak + + 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 PR middle-end/32349 diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index ade3968d0e6..9b27bbdbd70 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 5b08f687091..96f6ff32d5f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-06-17 Uros Bizjak + + PR rtl-optimization/32366 + * testsuite/gcc.dg/vect/pr32366.c: New test. + 2007-06-17 Kenneth Zadeck * 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 00000000000..f4eb99fbca3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr32366.c @@ -0,0 +1,13 @@ +/* Testcase by Martin Michlmayr */ + +/* { 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; +} + -- 2.30.2