From 9e392989053729d4d50681e1742e2920d3b08ee4 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 12 Jul 2018 07:11:50 +0000 Subject: [PATCH] re PR tree-optimization/86479 ([graphite] ICE in gimplify_modify_expr, at gimplify.c:5756) 2018-07-12 Richard Biener PR middle-end/86479 * fold-const.c (fold_binary_op_with_conditional_arg): Do not move possibly trapping operations into the conditional. * gcc.dg/graphite/pr86479.c: New testcase. From-SVN: r262574 --- gcc/ChangeLog | 6 ++++ gcc/fold-const.c | 7 +++++ gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gcc.dg/graphite/pr86479.c | 39 +++++++++++++++++++++++++ 4 files changed, 57 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/graphite/pr86479.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d8a65861e5a..c36a8a83c26 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-07-12 Richard Biener + + PR middle-end/86479 + * fold-const.c (fold_binary_op_with_conditional_arg): Do not + move possibly trapping operations into the conditional. + 2018-07-12 Richard Biener * tree-ssa-sccvn.c (mprts_hook_cnt): Remove. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 97c435fa5e0..ac65dcfaf1d 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -6587,6 +6587,13 @@ fold_binary_op_with_conditional_arg (location_t loc, tree rhs = NULL_TREE; enum tree_code cond_code = COND_EXPR; + /* Do not move possibly trapping operations into the conditional as this + pessimizes code and causes gimplification issues when applied late. */ + if (operation_could_trap_p (code, FLOAT_TYPE_P (type), + ANY_INTEGRAL_TYPE_P (type) + && TYPE_OVERFLOW_TRAPS (type), op1)) + return NULL_TREE; + if (TREE_CODE (cond) == COND_EXPR || TREE_CODE (cond) == VEC_COND_EXPR) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e8df3b63a45..0958a1a57b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-07-12 Richard Biener + + PR middle-end/86479 + * gcc.dg/graphite/pr86479.c: New testcase. + 2018-07-11 Jakub Jelinek * gcc.target/i386/avx512bw-vpcmpb-2.c (CMP): Use SIZE macro instead diff --git a/gcc/testsuite/gcc.dg/graphite/pr86479.c b/gcc/testsuite/gcc.dg/graphite/pr86479.c new file mode 100644 index 00000000000..7df63546c05 --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/pr86479.c @@ -0,0 +1,39 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -floop-nest-optimize -fnon-call-exceptions -fno-guess-branch-probability -fno-tree-loop-im" } */ + +__INTPTR_TYPE__ uf; + +void +m7 (__INTPTR_TYPE__ *aw, __INTPTR_TYPE__ ws) +{ + __INTPTR_TYPE__ *e5 = &ws; + + if (ws < 1) + { + int cq = 0; + + while (cq < 1) + { + int *ng; + int *ud; + + *e5 *= uf < 0; + + for (*ng = 0; *ng < 2; ++*ng) + { + } + + ws /= cq; + *aw *= ws; + + for (*ud = 0; *ud < 2; ++*ud) + { + } + } + } + + if (ws < 2) + e5 = &uf; + + *e5 = 0; +} -- 2.30.2