re PR tree-optimization/54767 (Incorrect code generated with "-O2 -fcheck=bounds")
2013-01-16 Richard Biener <rguenther@suse.de> PR tree-optimization/54767 PR tree-optimization/53465 * tree-vrp.c (vrp_meet_1): Revert original fix for PR53465. (vrp_visit_phi_node): For PHI arguments coming via backedges drop all symbolical range information. (execute_vrp): Compute backedges. * gfortran.fortran-torture/execute/pr54767.f90: New testcase. From-SVN: r195238
This commit is contained in:
parent
04b535af39
commit
c25a0c60a5
|
@ -1,3 +1,12 @@
|
|||
2013-01-16 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/54767
|
||||
PR tree-optimization/53465
|
||||
* tree-vrp.c (vrp_meet_1): Revert original fix for PR53465.
|
||||
(vrp_visit_phi_node): For PHI arguments coming via backedges
|
||||
drop all symbolical range information.
|
||||
(execute_vrp): Compute backedges.
|
||||
|
||||
2013-01-16 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* doc/install.texi: Update CLooG and ISL requirements to
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2013-01-16 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/54767
|
||||
PR tree-optimization/53465
|
||||
* gfortran.fortran-torture/execute/pr54767.f90: New testcase.
|
||||
|
||||
2013-01-16 Christian Bruel <christian.bruel@st.com>
|
||||
|
||||
PR target/55301
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
SUBROUTINE XXX (IL, IU)
|
||||
implicit none
|
||||
integer, INTENT(IN) :: IL, IU
|
||||
|
||||
integer :: NXX (14) = (/ 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14 /)
|
||||
integer :: ivvv, ia, ja, iaii
|
||||
logical :: qop
|
||||
|
||||
QOP=.FALSE.
|
||||
|
||||
DO IA=IL,IU
|
||||
JA=NXX(IA)
|
||||
IF (.NOT. QOP .and. JA.GT.0) THEN
|
||||
IAII=IA
|
||||
QOP=.TRUE.
|
||||
ENDIF
|
||||
|
||||
IF (QOP) THEN
|
||||
ivvv=IA-IAII+1 ! mis-compiled
|
||||
ENDIF
|
||||
ENDDO
|
||||
|
||||
IF (ivvv.NE.2) THEN
|
||||
call abort
|
||||
ENDIF
|
||||
END subroutine
|
||||
|
||||
program p
|
||||
implicit none
|
||||
CALL XXX (1, 3)
|
||||
end
|
|
@ -7877,17 +7877,13 @@ vrp_meet_1 (value_range_t *vr0, value_range_t *vr1)
|
|||
|
||||
if (vr0->type == VR_UNDEFINED)
|
||||
{
|
||||
/* Drop equivalences. See PR53465. */
|
||||
set_value_range (vr0, vr1->type, vr1->min, vr1->max, NULL);
|
||||
set_value_range (vr0, vr1->type, vr1->min, vr1->max, vr1->equiv);
|
||||
return;
|
||||
}
|
||||
|
||||
if (vr1->type == VR_UNDEFINED)
|
||||
{
|
||||
/* VR0 already has the resulting range, just drop equivalences.
|
||||
See PR53465. */
|
||||
if (vr0->equiv)
|
||||
bitmap_clear (vr0->equiv);
|
||||
/* VR0 already has the resulting range. */
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -8012,6 +8008,21 @@ vrp_visit_phi_node (gimple phi)
|
|||
if (TREE_CODE (arg) == SSA_NAME)
|
||||
{
|
||||
vr_arg = *(get_value_range (arg));
|
||||
/* Do not allow equivalences or symbolic ranges to leak in from
|
||||
backedges. That creates invalid equivalencies.
|
||||
See PR53465 and PR54767. */
|
||||
if (e->flags & EDGE_DFS_BACK
|
||||
&& (vr_arg.type == VR_RANGE
|
||||
|| vr_arg.type == VR_ANTI_RANGE))
|
||||
{
|
||||
vr_arg.equiv = NULL;
|
||||
if (symbolic_range_p (&vr_arg))
|
||||
{
|
||||
vr_arg.type = VR_VARYING;
|
||||
vr_arg.min = NULL_TREE;
|
||||
vr_arg.max = NULL_TREE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -9260,12 +9271,18 @@ execute_vrp (void)
|
|||
rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
|
||||
scev_initialize ();
|
||||
|
||||
/* ??? This ends up using stale EDGE_DFS_BACK for liveness computation.
|
||||
Inserting assertions may split edges which will invalidate
|
||||
EDGE_DFS_BACK. */
|
||||
insert_range_assertions ();
|
||||
|
||||
to_remove_edges.create (10);
|
||||
to_update_switch_stmts.create (5);
|
||||
threadedge_initialize_values ();
|
||||
|
||||
/* For visiting PHI nodes we need EDGE_DFS_BACK computed. */
|
||||
mark_dfs_back_edges ();
|
||||
|
||||
vrp_initialize ();
|
||||
ssa_propagate (vrp_visit_stmt, vrp_visit_phi_node);
|
||||
vrp_finalize ();
|
||||
|
|
Loading…
Reference in New Issue