From ea7d7da886911a91831bd45fc56d0aa1e2a55ecc Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 28 Mar 2017 13:57:43 +0000 Subject: [PATCH] re PR ipa/78644 (ICE: SIGSEGV in is_gimple_reg_type with -Og -fipa-cp) 2017-03-28 Richard Biener PR tree-optimization/78644 * tree-ssa-ccp.c (evaluate_stmt): When we may not use the value of a simplification result we may not use it at all. * gcc.dg/pr78644-1.c: New testcase. * gcc.dg/pr78644-2.c: Likewise. From-SVN: r246534 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.dg/pr78644-1.c | 21 +++++++++++++++++++++ gcc/testsuite/gcc.dg/pr78644-2.c | 20 ++++++++++++++++++++ gcc/tree-ssa-ccp.c | 22 ++++++++++++++-------- 5 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr78644-1.c create mode 100644 gcc/testsuite/gcc.dg/pr78644-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f15a8a882bb..df901592ec9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-03-28 Richard Biener + + PR tree-optimization/78644 + * tree-ssa-ccp.c (evaluate_stmt): When we may not use the value + of a simplification result we may not use it at all. + 2017-03-28 Richard Biener PR ipa/80205 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e7b3f01d215..0c0281e5f46 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2017-03-28 Richard Biener + + PR tree-optimization/78644 + * gcc.dg/pr78644-1.c: New testcase. + * gcc.dg/pr78644-2.c: Likewise. + 2017-03-28 Toma Tabacu * gcc.dg/pic-3.c: Skip for mips*-*-linux-*. diff --git a/gcc/testsuite/gcc.dg/pr78644-1.c b/gcc/testsuite/gcc.dg/pr78644-1.c new file mode 100644 index 00000000000..d6aafeb7c63 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr78644-1.c @@ -0,0 +1,21 @@ +/* { dg-do compile { target int128 } } */ +/* { dg-options "-Og -fipa-cp -w -Wno-psabi" } */ + +typedef unsigned __int128 u128; +typedef unsigned __int128 V __attribute__ ((vector_size (64))); + +V x4; + +static V +bar (u128 x2, u128 x3) +{ + while (x4[0]--) + x2 /= x3 >>= 1; + return x2 + x3 + x4; +} + +void +foo (void) +{ + bar (0, 0); +} diff --git a/gcc/testsuite/gcc.dg/pr78644-2.c b/gcc/testsuite/gcc.dg/pr78644-2.c new file mode 100644 index 00000000000..3395ddee952 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr78644-2.c @@ -0,0 +1,20 @@ +/* { dg-do compile { target int128 } } */ +/* { dg-options "-Og -finline-functions-called-once -w -Wno-psabi" } */ + +typedef unsigned V __attribute__ ((vector_size (64))); +typedef unsigned __int128 U __attribute__ ((vector_size (64))); + +U +bar4 (U u0, U u1) +{ + if (u1[0]) + u1 <<= 1; + return u0 + u1; +} + +V +foo (U u, V v) +{ + v |= (unsigned)bar4(u, (U){})[0]; + return v; +} diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 023018c8d33..23f2adcb9c4 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -1749,18 +1749,24 @@ evaluate_stmt (gimple *stmt) fold_defer_overflow_warnings (); simplified = ccp_fold (stmt); if (simplified - && TREE_CODE (simplified) == SSA_NAME + && TREE_CODE (simplified) == SSA_NAME) + { /* We may not use values of something that may be simulated again, see valueize_op_1. */ - && (SSA_NAME_IS_DEFAULT_DEF (simplified) - || ! prop_simulate_again_p (SSA_NAME_DEF_STMT (simplified)))) - { - ccp_prop_value_t *val = get_value (simplified); - if (val && val->lattice_val != VARYING) + if (SSA_NAME_IS_DEFAULT_DEF (simplified) + || ! prop_simulate_again_p (SSA_NAME_DEF_STMT (simplified))) { - fold_undefer_overflow_warnings (true, stmt, 0); - return *val; + ccp_prop_value_t *val = get_value (simplified); + if (val && val->lattice_val != VARYING) + { + fold_undefer_overflow_warnings (true, stmt, 0); + return *val; + } } + else + /* We may also not place a non-valueized copy in the lattice + as that might become stale if we never re-visit this stmt. */ + simplified = NULL_TREE; } is_constant = simplified && is_gimple_min_invariant (simplified); fold_undefer_overflow_warnings (is_constant, stmt, 0); -- 2.30.2