diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-06-15 21:30:58 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-06-15 21:30:58 +0200 |
commit | b8d850056860ea8cdc47234d3fbf89c8d03c9342 (patch) | |
tree | 55d4264b76a39d539c20545edbed2a80418636c7 /gcc | |
parent | b48f2352a967d6ae9342529124dd8209d0d620da (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/match.pd | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr86123.c | 17 |
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; +} |