Commit c5830edf by Daniel Berlin Committed by Daniel Berlin

re PR tree-optimization/32663 (revision 126369 went into an infinite loop)

2007-07-11  Daniel Berlin  <dberlin@dberlin.org>

	PR tree-optimization/32663
	
	* tree.h (VALUE_HANDLE_VUSES): Remove.
	(struct tree_value_handle): Remove vuses.

	* tree-vn.c (create_value_handle_for_expr): Don't set
	VALUE_HANDLE_VUSES. 

	* tree-ssa-pre.c (expression_vuses): New.
	(alloc_expression_id): Set up expression_vuses.
	(get_expression_vuses): New.
	(set_expression_vuses): Ditto.
	(clear_expression_ids): Modify for expression_vuses.
	(phi_translate_1): Ditto.
	(phi_translate_set): Ditto.
	(value_dies_in_block_x): Ditto
	(valid_in_sets): Ditto.
	(add_to_sets): Ditto.
	(find_existing_value_expr): Ditto.
	(create_value_handle_for_expr): Ditto.
	(make_values_for_stmt): Ditto.
	(vuse_equiv): Remove.

From-SVN: r126568
parent 433e6a8c
2007-07-11 Daniel Berlin <dberlin@dberlin.org>
PR tree-optimization/32663
* tree.h (VALUE_HANDLE_VUSES): Remove.
(struct tree_value_handle): Remove vuses.
* tree-vn.c (create_value_handle_for_expr): Don't set
VALUE_HANDLE_VUSES.
* tree-ssa-pre.c (expression_vuses): New.
(alloc_expression_id): Set up expression_vuses.
(get_expression_vuses): New.
(set_expression_vuses): Ditto.
(clear_expression_ids): Modify for expression_vuses.
(phi_translate_1): Ditto.
(phi_translate_set): Ditto.
(value_dies_in_block_x): Ditto
(valid_in_sets): Ditto.
(add_to_sets): Ditto.
(find_existing_value_expr): Ditto.
(create_value_handle_for_expr): Ditto.
(make_values_for_stmt): Ditto.
(vuse_equiv): Remove.
2007-07-11 Alexandre Oliva <aoliva@redhat.com>
* Makefile.in (mostlyclean): Remove object files.
......
2007-07-11 Daniel Berlin <dberlin@dberlin.org>
* gfortran.fortran-torture/compile/pr32663.f90: New test.
2007-07-11 Paolo Carlini <pcarlini@suse.de>
PR c++/31027
......@@ -37,7 +37,7 @@ void foo (void)
/* Second, we should thread the edge out of the loop via the break
statement. We also realize that the final bytes == 0 test is useless,
and thread over it. */
/* { dg-final { scan-tree-dump-times "Threaded jump" 2 "vrp1" } } */
/* { dg-final { scan-tree-dump-times "Threaded jump" 3 "vrp1" } } */
/* { dg-final { cleanup-tree-dump "vrp1" } } */
SUBROUTINE DIMOID(DEN,RLMO,SSQU,STRI,ATMU,IATM,IWHI,MAPT,INAT,
* IATB,L1,L2,M1,M2,NATS,NOSI,NCAT,NSWE)
C
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
C
DIMENSION RLMO(L1,L1),SSQU(L1,L1),STRI(L2),ATMU(NATS),DEN(M2)
DIMENSION IATM(NATS,M1),IWHI(M1+NATS),MAPT(M1),INAT(M1+NATS)
DIMENSION IATB(NATS,M1)
C
PARAMETER (MXATM=500, MXSH=1000, MXGTOT=5000, MXAO=2047)
C
LOGICAL GOPARR,DSKWRK,MASWRK
C
COMMON /INFOA / NAT,ICH,MUL,NUM,NQMT,NE,NA,NB,
* ZAN(MXATM),C(3,MXATM)
COMMON /IOFILE/ IR,IW,IP,IJKO,IJKT,IDAF,NAV,IODA(400)
COMMON /NSHEL / EX(MXGTOT),CS(MXGTOT),CP(MXGTOT),CD(MXGTOT),
* CF(MXGTOT),CG(MXGTOT),
* KSTART(MXSH),KATOM(MXSH),KTYPE(MXSH),
* KNG(MXSH),KLOC(MXSH),KMIN(MXSH),
* KMAX(MXSH),NSHELL
COMMON /OPTLOC/ CVGLOC,MAXLOC,IPRTLO,ISYMLO,IFCORE,NOUTA,NOUTB,
* MOOUTA(MXAO),MOOUTB(MXAO)
COMMON /PAR / ME,MASTER,NPROC,IBTYP,IPTIM,GOPARR,DSKWRK,MASWRK
COMMON /RUNLAB/ TITLE(10),A(MXATM),B(MXATM),BFLAB(MXAO)
C
C
DO 920 II=1,M1
INAT(II) = 0
920 CONTINUE
C
DO 900 IO = NOUTA+1,NUMLOC
IZ = IO - NOUTA
DO 895 II=NST,NEND
ATMU(II) = 0.0D+00
IATM(II,IZ) = 0
895 CONTINUE
IFUNC = 0
DO 890 ISHELL = 1,NSHELL
IAT = KATOM(ISHELL)
IST = KMIN(ISHELL)
IEN = KMAX(ISHELL)
DO 880 INO = IST,IEN
IFUNC = IFUNC + 1
IF (IAT.LT.NST.OR.IAT.GT.NEND) GOTO 880
ZINT = 0.0D+00
DO 870 II = 1,L1
ZINT = ZINT + RLMO(II,IO)*SSQU(II,IFUNC)
870 CONTINUE
ATMU(IAT) = ATMU(IAT) + RLMO(IFUNC,IO)*ZINT
880 CONTINUE
890 CONTINUE
IF (MASWRK) WRITE(IW,9010) IZ,(ATMU(II),II=NST,NEND)
900 CONTINUE
C
NOSI = 0
DO 700 II=1,M1
NO=0
DO 720 JJ=1,NAT
NO = NO + 1
720 CONTINUE
740 CONTINUE
IF (NO.GT.1.OR.NO.EQ.0) THEN
NOSI = NOSI + 1
IWHI(NOSI) = II
ENDIF
IF (MASWRK)
* WRITE(IW,9030) II,(IATM(J,II),A(IATM(J,II)),J=1,NO)
700 CONTINUE
C
IF (MASWRK) THEN
WRITE(IW,9035) NOSI
IF (NOSI.GT.0) THEN
WRITE(IW,9040) (IWHI(I),I=1,NOSI)
WRITE(IW,9040)
ELSE
WRITE(IW,9040)
ENDIF
ENDIF
C
CALL DCOPY(L1*L1,RLMO,1,SSQU,1)
CALL DCOPY(M2,DEN,1,STRI,1)
C
IP2 = NOUTA
IS2 = M1+NOUTA-NOSI
DO 695 II=1,NAT
INAT(II) = 0
695 CONTINUE
C
DO 690 IAT=1,NAT
DO 680 IORB=1,M1
IP1 = IORB + NOUTA
IF (IATM(1,IORB).NE.IAT) GOTO 680
IF (IATM(2,IORB).NE.0) GOTO 680
INAT(IAT) = INAT(IAT) + 1
IP2 = IP2 + 1
CALL DCOPY(L1,SSQU(1,IP1),1,RLMO(1,IP2),1)
CALL ICOPY(NAT,IATM(1,IORB),1,IATB(1,IP2-NOUTA),1)
MAPT(IORB) = IP2-NOUTA
680 CONTINUE
DO 670 IORB=1,NOSI
IS1 = IWHI(IORB) + NOUTA
IF (IAT.EQ.NAT.AND.IATM(1,IWHI(IORB)).EQ.0) GOTO 675
IF (IATM(1,IWHI(IORB)).NE.IAT) GOTO 670
675 CONTINUE
IS2 = IS2 + 1
MAPT(IWHI(IORB)) = IS2-NOUTA
670 CONTINUE
690 CONTINUE
C
NSWE = 0
NCAT = 0
LASP = 1
NLAST = 0
DO 620 II=1,NAT
NSWE = NSWE + (IWHI(II)*(IWHI(II)-1))/2
NCAT = NCAT + 1
INAT(NCAT) = LASP + NLAST
LASP = INAT(NCAT)
NLAST = IWHI(II)
IWHI(NCAT) = II
620 CONTINUE
C
DO 610 II=1,NOSI
NCAT = NCAT + 1
INAT(NCAT) = LASP + NLAST
LASP = INAT(NCAT)
NLAST = 1
IWHI(NCAT) = 0
610 CONTINUE
C
RETURN
C
8000 FORMAT(/1X,'** MULLIKEN ATOMIC POPULATIONS FOR EACH NON-FROZEN ',
* 'LOCALIZED ORBITAL **')
9000 FORMAT(/3X,'ATOM',2X,100(I2,1X,A4))
9005 FORMAT(1X,'LMO')
9010 FORMAT(1X,I3,3X,100F7.3)
9015 FORMAT(/1X,'** ATOMIC POPULATIONS GREATER THAN ',F4.2,
* ' ARE CONSIDERED MAJOR **')
9020 FORMAT(/2X,'LMO',3X,'MAJOR CONTRIBUTIONS FROM ATOM(S)')
9030 FORMAT(2X,I3,2X,100(I2,1X,A2,2X))
9035 FORMAT(/1X,'NO OF LMOS INVOLVING MORE THAN ONE ATOM =',I3)
9040 FORMAT(1X,'THESE ARE LMOS :',100I3)
C
END
......@@ -1431,6 +1431,14 @@ try_to_simplify (tree stmt, tree rhs)
/* For references, see if we find a result for the lookup,
and use it if we do. */
case tcc_declaration:
/* Pull out any truly constant values. */
if (TREE_READONLY (rhs)
&& TREE_STATIC (rhs)
&& DECL_INITIAL (rhs)
&& is_gimple_min_invariant (DECL_INITIAL (rhs)))
return DECL_INITIAL (rhs);
/* Fallthrough. */
case tcc_reference:
{
tree result = vn_reference_lookup (rhs,
......
......@@ -108,9 +108,6 @@ set_value_handle (tree e, tree v)
gcc_assert (is_gimple_min_invariant (e));
}
/* A comparison function for use in qsort to compare vuses. Simply
subtracts version numbers. */
......@@ -329,7 +326,7 @@ vn_lookup_with_vuses (tree expr, VEC (tree, gc) *vuses)
}
static tree
create_value_handle_for_expr (tree expr, VEC (tree, gc) *vuses)
create_value_handle_for_expr (tree expr, VEC(tree, gc) *vuses)
{
tree v;
......@@ -337,8 +334,6 @@ create_value_handle_for_expr (tree expr, VEC (tree, gc) *vuses)
if (dump_file && (dump_flags & TDF_DETAILS))
print_creation_to_file (v, expr, vuses);
if (vuses)
VALUE_HANDLE_VUSES (v) = vuses;
return v;
}
......
......@@ -3340,9 +3340,6 @@ struct tree_statement_list
#define VALUE_HANDLE_EXPR_SET(NODE) \
(VALUE_HANDLE_CHECK (NODE)->value_handle.expr_set)
#define VALUE_HANDLE_VUSES(NODE) \
(VALUE_HANDLE_CHECK (NODE)->value_handle.vuses)
/* Defined and used in tree-ssa-pre.c. */
struct tree_value_handle GTY(())
......@@ -3356,9 +3353,6 @@ struct tree_value_handle GTY(())
conveniently dense form starting at 0, so that we can make
bitmaps of value handles. */
unsigned int id;
/* Set of virtual uses represented by this handle. */
VEC (tree, gc) *vuses;
};
/* Define the overall contents of a tree node.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment