diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-12-11 18:16:48 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-12-11 18:16:48 +0100 |
commit | ccef67160c2c467b3101e0d3e7f08ea996624fc6 (patch) | |
tree | a427fc0673507bec170c6e3473d4b663b3730534 | |
parent | 5b238a4591932c5e5a28fa8f9b3a413a3ce641a6 (diff) | |
download | gcc-ccef67160c2c467b3101e0d3e7f08ea996624fc6.zip gcc-ccef67160c2c467b3101e0d3e7f08ea996624fc6.tar.gz gcc-ccef67160c2c467b3101e0d3e7f08ea996624fc6.tar.bz2 |
re PR tree-optimization/88444 (ICE: tree check: expected ssa_name, have integer_cst in live_on_edge, at tree-vrp.c:468; or ICE: tree check: expected ssa_name, have integer_cst in get_value_range, at vr-values.c:84)
PR tree-optimization/88444
* tree-vrp.c (register_edge_assert_for_2): Only register assertions
for conversions if rhs1 is a SSA_NAME.
* gcc.dg/pr88444.c: New test.
From-SVN: r267026
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr88444.c | 30 | ||||
-rw-r--r-- | gcc/tree-vrp.c | 3 |
4 files changed, 44 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cc126c7..94c7ca7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-12-11 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/88444 + * tree-vrp.c (register_edge_assert_for_2): Only register assertions + for conversions if rhs1 is a SSA_NAME. + 2018-12-11 Dimitar Dimitrov <dimitar@dinux.eu> * cfgexpand.c (asm_clobber_reg_is_valid): Also produce diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3c15bf7..e69abe6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-12-11 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/88444 + * gcc.dg/pr88444.c: New test. + 2018-12-11 Dimitar Dimitrov <dimitar@dinux.eu> * gcc.target/i386/pr52813.c: New test. diff --git a/gcc/testsuite/gcc.dg/pr88444.c b/gcc/testsuite/gcc.dg/pr88444.c new file mode 100644 index 0000000..01b0d45 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr88444.c @@ -0,0 +1,30 @@ +/* PR tree-optimization/88444 */ +/* { dg-do compile } */ +/* { dg-options "-O1 -ftree-vrp -fno-tree-ccp -fno-tree-forwprop -fno-tree-fre" } */ + +int v; + +int +foo (int, int); + +static inline int +bar (long int x) +{ + return !!x ? x : 1; +} + +static inline void +baz (int x) +{ + v += foo (0, 0) + bar (x); +} + +void +qux (void) +{ + int a = 0; + v = v || foo (0, 0); + v = v || foo (0, 0); + v = v || foo (0, 0); + baz (a); +} diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 15ac65b..864de41 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -2894,6 +2894,7 @@ register_edge_assert_for_2 (tree name, edge e, { name2 = gimple_assign_rhs1 (def_stmt); if (CONVERT_EXPR_CODE_P (rhs_code) + && TREE_CODE (name2) == SSA_NAME && INTEGRAL_TYPE_P (TREE_TYPE (name2)) && TYPE_UNSIGNED (TREE_TYPE (name2)) && prec == TYPE_PRECISION (TREE_TYPE (name2)) @@ -2990,6 +2991,7 @@ register_edge_assert_for_2 (tree name, edge e, wide_int rmin, rmax; tree rhs1 = gimple_assign_rhs1 (def_stmt); if (INTEGRAL_TYPE_P (TREE_TYPE (rhs1)) + && TREE_CODE (rhs1) == SSA_NAME /* Make sure the relation preserves the upper/lower boundary of the range conservatively. */ && (comp_code == NE_EXPR @@ -3054,6 +3056,7 @@ register_edge_assert_for_2 (tree name, edge e, { names[1] = gimple_assign_rhs1 (def_stmt2); if (!CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (def_stmt2)) + || TREE_CODE (names[1]) != SSA_NAME || !INTEGRAL_TYPE_P (TREE_TYPE (names[1])) || (TYPE_PRECISION (TREE_TYPE (name2)) != TYPE_PRECISION (TREE_TYPE (names[1])))) |