aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-03-09 13:20:50 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-03-09 13:20:50 +0000
commit16967aff7a209389283280a17ef08f2fe206fed3 (patch)
tree0fb1cda8b2c5fab8da11d73209f3aefa3d5399b4 /gcc
parent26d7dc48b628d0fa16f2a1660b23602821c748f9 (diff)
downloadgcc-16967aff7a209389283280a17ef08f2fe206fed3.zip
gcc-16967aff7a209389283280a17ef08f2fe206fed3.tar.gz
gcc-16967aff7a209389283280a17ef08f2fe206fed3.tar.bz2
re PR target/79971 (ICE in const_binop, at fold-const.c:1554 on ARM target with saturated integers)
2017-03-09 Richard Biener <rguenther@suse.de> 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/gimple-expr.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/fixed-point/pr79971.c14
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index da50ae6..7eab042 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2017-03-09 Richard Biener <rguenther@suse.de>
+ PR middle-end/79971
+ * gimple-expr.c (useless_type_conversion_p): Preserve
+ TYPE_SATURATING for fixed-point types.
+
+2017-03-09 Richard Biener <rguenther@suse.de>
+
PR ipa/79970
* ipa-prop.c (ipa_modify_formal_parameters): Avoid changing
alignment of BLKmode params.
diff --git a/gcc/gimple-expr.c b/gcc/gimple-expr.c
index 2ee87c2..9d8034c 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 78f6831..3e7e1576 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2017-03-09 Richard Biener <rguenther@suse.de>
+ PR middle-end/79971
+ * gcc.dg/fixed-point/pr79971.c: New testcase.
+
+2017-03-09 Richard Biener <rguenther@suse.de>
+
PR ipa/79970
* gcc.dg/torture/pr79970.c: New testcase.
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 0000000..cccea1f
--- /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)
+ ;
+ }
+}