From 16967aff7a209389283280a17ef08f2fe206fed3 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 9 Mar 2017 13:20:50 +0000 Subject: [PATCH] re PR target/79971 (ICE in const_binop, at fold-const.c:1554 on ARM target with saturated integers) 2017-03-09 Richard Biener PR middle-end/79971 * gimple-expr.c (useless_type_conversion_p): Preserve TYPE_SATURATING for fixed-point types. * gcc.dg/fixed-point/pr79971.c: New testcase. From-SVN: r246002 --- gcc/ChangeLog | 6 ++++++ gcc/gimple-expr.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/fixed-point/pr79971.c | 14 ++++++++++++++ 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/fixed-point/pr79971.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index da50ae6cd43..7eab0421066 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-03-09 Richard Biener + + PR middle-end/79971 + * gimple-expr.c (useless_type_conversion_p): Preserve + TYPE_SATURATING for fixed-point types. + 2017-03-09 Richard Biener PR ipa/79970 diff --git a/gcc/gimple-expr.c b/gcc/gimple-expr.c index 2ee87c2c490..9d8034c3192 100644 --- a/gcc/gimple-expr.c +++ b/gcc/gimple-expr.c @@ -124,7 +124,7 @@ useless_type_conversion_p (tree outer_type, tree inner_type) /* Fixed point types with the same mode are compatible. */ else if (FIXED_POINT_TYPE_P (inner_type) && FIXED_POINT_TYPE_P (outer_type)) - return true; + return TYPE_SATURATING (inner_type) == TYPE_SATURATING (outer_type); /* We need to take special care recursing to pointed-to types. */ else if (POINTER_TYPE_P (inner_type) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 78f68314db1..3e7e15760b7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-03-09 Richard Biener + + PR middle-end/79971 + * gcc.dg/fixed-point/pr79971.c: New testcase. + 2017-03-09 Richard Biener PR ipa/79970 diff --git a/gcc/testsuite/gcc.dg/fixed-point/pr79971.c b/gcc/testsuite/gcc.dg/fixed-point/pr79971.c new file mode 100644 index 00000000000..cccea1f5dc8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/fixed-point/pr79971.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +void +a () +{ + unsigned _Accum b; + for (b = 0.1; b; b += 0.1uk) + { + _Sat unsigned _Accum b; + for (b = 0; b <= 0.8; b = 0.1) + ; + } +}