aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-06-15 21:30:58 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-06-15 21:30:58 +0200
commitb8d850056860ea8cdc47234d3fbf89c8d03c9342 (patch)
tree55d4264b76a39d539c20545edbed2a80418636c7 /gcc
parentb48f2352a967d6ae9342529124dd8209d0d620da (diff)
downloadgcc-b8d850056860ea8cdc47234d3fbf89c8d03c9342.zip
gcc-b8d850056860ea8cdc47234d3fbf89c8d03c9342.tar.gz
gcc-b8d850056860ea8cdc47234d3fbf89c8d03c9342.tar.bz2
re PR middle-end/86123 (ICE in prepare_cmp_insn, at optabs.c:3967)
PR middle-end/86123 * match.pd ((X / Y) == 0 -> X < Y): Don't transform complex divisions. Fix up comment formatting. * gcc.c-torture/compile/pr86123.c: New test. From-SVN: r261647
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/match.pd7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr86123.c17
4 files changed, 32 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c91c81e..9c7c574 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-06-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/86123
+ * match.pd ((X / Y) == 0 -> X < Y): Don't transform complex divisions.
+ Fix up comment formatting.
+
2018-06-15 Bernd Edlinger <bernd.edlinger@hotmail.de>
* typed-splay-tree.h (typed_splay_tree::remove): New function.
diff --git a/gcc/match.pd b/gcc/match.pd
index f70a88c..7e22771 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -1462,14 +1462,15 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(op @1 { build_zero_cst (TREE_TYPE (@1)); }))))
/* Transform:
- * (X / Y) == 0 -> X < Y if X, Y are unsigned.
- * (X / Y) != 0 -> X >= Y, if X, Y are unsigned.
- */
+ (X / Y) == 0 -> X < Y if X, Y are unsigned.
+ (X / Y) != 0 -> X >= Y, if X, Y are unsigned. */
(for cmp (eq ne)
ocmp (lt ge)
(simplify
(cmp (trunc_div @0 @1) integer_zerop)
(if (TYPE_UNSIGNED (TREE_TYPE (@0))
+ /* Complex ==/!= is allowed, but not </>=. */
+ && TREE_CODE (TREE_TYPE (@0)) != COMPLEX_TYPE
&& (VECTOR_TYPE_P (type) || !VECTOR_TYPE_P (TREE_TYPE (@0))))
(ocmp @0 @1))))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 72b8615..045c4cd 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-06-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/86123
+ * gcc.c-torture/compile/pr86123.c: New test.
+
2018-06-15 Tom de Vries <tdevries@suse.de>
* gcc.dg-selftests/dg-final.exp: Force sequential execution.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr86123.c b/gcc/testsuite/gcc.c-torture/compile/pr86123.c
new file mode 100644
index 0000000..707e6dc
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr86123.c
@@ -0,0 +1,17 @@
+/* PR middle-end/86123 */
+
+int
+foo (_Complex unsigned x, _Complex unsigned y)
+{
+ _Complex unsigned t1 = x / y;
+ int t2 = (t1 != 0);
+ return t2;
+}
+
+int
+bar (_Complex unsigned x, _Complex unsigned y)
+{
+ _Complex unsigned t1 = x / y;
+ int t2 = (t1 == 0);
+ return t2;
+}