From 2d33a2effdaf3e8405a2fa05c3bf863ce6c4f1ee Mon Sep 17 00:00:00 2001 From: Diego Novillo Date: Sat, 15 Oct 2005 14:30:36 +0000 Subject: [PATCH] re PR tree-optimization/23141 (ACATS FAIL c45651a fixed point wrong code) PR 23141 PR 23142 * tree-vrp.c (vrp_meet): Fix the intersection of equivalence sets VR0->EQUIV and VR1->EQUIV when meeting a range and an anti-range. (vrp_visit_phi_node): Only prevent infinite iterations when the previous result and the new result are both VR_RANGEs. From-SVN: r105436 --- gcc/ChangeLog | 10 ++++++++++ gcc/tree-vrp.c | 7 +++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5cf5a4982e6f..1d6eed22f9f8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2005-10-15 Diego Novillo + + PR 23141 + PR 23142 + * tree-vrp.c (vrp_meet): Fix the intersection of equivalence + sets VR0->EQUIV and VR1->EQUIV when meeting a range and an + anti-range. + (vrp_visit_phi_node): Only prevent infinite iterations when + the previous result and the new result are both VR_RANGEs. + 2005-10-15 Ranjit Mathew * tree-into-ssa.c (mark_def_sites): Correct minor typo in diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index e9d6c81c7d47..7642ced28631 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -3497,8 +3497,11 @@ vrp_meet (value_range_t *vr0, value_range_t *vr1) && !symbolic_range_p (vr1) && !value_ranges_intersect_p (vr0, vr1)) { + /* Copy most of VR1 into VR0. Don't copy VR1's equivalence + set. We need to compute the intersection of the two + equivalence sets. */ if (vr1->type == VR_ANTI_RANGE) - copy_value_range (vr0, vr1); + set_value_range (vr0, vr1->type, vr1->min, vr1->max, vr0->equiv); /* The resulting set of equivalences is the intersection of the two sets. */ @@ -3609,7 +3612,7 @@ vrp_visit_phi_node (tree phi) /* To prevent infinite iterations in the algorithm, derive ranges when the new value is slightly bigger or smaller than the previous one. */ - if (lhs_vr->type == VR_RANGE) + if (lhs_vr->type == VR_RANGE && vr_result.type == VR_RANGE) { if (!POINTER_TYPE_P (TREE_TYPE (lhs))) { -- 2.47.2