-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
I noticed that VRP was missing many obvious jump threading
opportunities; investigation showed that it wasn't threading through
conditionals with pointer types, just those with integral types.
Fix is rather obvious.
Bootstrapped and regression tested on x86_64-unknown-linux-gnu. OK for
trunk?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/
iQEcBAEBAgAGBQJNf9wXAAoJEBRtltQi2kC7i3gH+wS6SZNEVwMeHrx04LkRUV7i
hdWsBKWoWxFCm/JjIVEXkticztRGG2cF6OgtTutXCyYHriVXpHvJSATw0OrYLT2y
zMjj1+wy9NKcznIaulyYzCadoFiJUuTnZ3pMDGo+gqx7ThqrG11sJ581CnMtZWxA
Y3tpUBebhovORi4IZOvp2atjIFEnI/CCttxzVyTXtzaflysDr6rbZP75z/AGANI4
5gkcDkLCEglGHYL6phT0fxHjZAUaIJN/JHTvZ4MGA6lJjO8wG/Z4ZnDmtUURhLiR
z9th3gBzFtdjlkwcu8U1qulXDaxbMEmLLP3zMgmFthvI+PmqITsoshu3c7nn154=
=yWE3
-----END PGP SIGNATURE-----
* tree-vrp.c (identify_jump_threads): Also allow comparisons
with pointers.
Index: tree-vrp.c
===================================================================
*** tree-vrp.c (revision 170949)
--- tree-vrp.c (working copy)
*************** identify_jump_threads (void)
*** 7540,7549 ****
/* We're basically looking for any kind of conditional with
integral type arguments. */
if (TREE_CODE (gimple_cond_lhs (last)) == SSA_NAME
! && INTEGRAL_TYPE_P (TREE_TYPE (gimple_cond_lhs (last)))
&& (TREE_CODE (gimple_cond_rhs (last)) == SSA_NAME
|| is_gimple_min_invariant (gimple_cond_rhs (last)))
! && INTEGRAL_TYPE_P (TREE_TYPE (gimple_cond_rhs (last))))
{
edge_iterator ei;
--- 7540,7551 ----
/* We're basically looking for any kind of conditional with
integral type arguments. */
if (TREE_CODE (gimple_cond_lhs (last)) == SSA_NAME
! && (INTEGRAL_TYPE_P (TREE_TYPE (gimple_cond_lhs (last)))
! || POINTER_TYPE_P (TREE_TYPE (gimple_cond_lhs (last))))
&& (TREE_CODE (gimple_cond_rhs (last)) == SSA_NAME
|| is_gimple_min_invariant (gimple_cond_rhs (last)))
! && (INTEGRAL_TYPE_P (TREE_TYPE (gimple_cond_rhs (last)))
! || POINTER_TYPE_P (TREE_TYPE (gimple_cond_rhs (last)))))
{
edge_iterator ei;