blob: b6ea17f4ae2d21efd3bd4c0328ecdeadf029c600 [file] [log] [blame]
C PR rtl-optimization/58968.f
C { dg-do compile { target powerpc*-*-* } }
C { dg-options "-mcpu=power7 -O3 -w -ffast-math -funroll-loops" }
SUBROUTINE MAKTABS(IW,SOME,LBOX1,LBOX2,LBOX3,NSPACE,NA,NB,
* LBST,X,
* NX,IAMA,IAMI,IBMA,IBMI,MNUM,IDIM,MSTA,IBO,
* IDSYM,ISYM1,NSYM,
* NACT,LWRK,KTAB,LGMUL,
* LCON,LCOA,LCOB,
* LANDET,LBNDET,NAST,NBST,LSYMA,LSYMB,LGCOM,
* MINI,MAXI,LSPA,LSPB,LDISB,
* LSAS,LSBS,LSAC,LSBC,
* ITGA,ITGB,IAST,IBST,NCI,NA1EX,NB1EX,FDIRCT)
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
LOGICAL SOME
DIMENSION LBOX1(NSPACE),LBOX2(NSPACE),LBOX3(NSPACE),LBST(NSPACE)
DIMENSION X(NX)
DIMENSION IAMA(NSPACE),IAMI(NSPACE),IBMA(NSPACE),IBMI(NSPACE)
DIMENSION MNUM(NSPACE),IDIM(NSPACE),MSTA(NSPACE+1),IBO(NACT)
DIMENSION LWRK(43),KTAB(NSYM),LGMUL(NSYM,NSYM)
DIMENSION LCON(NA)
DIMENSION LCOA(NSYM,ITGA),LCOB(NSYM,ITGB)
DIMENSION LANDET(NSPACE,ITGA),LBNDET(NSPACE,ITGB)
DIMENSION NAST(ITGA+1),NBST(ITGB+1)
DIMENSION LSYMA(IAST),LSYMB(IBST)
DIMENSION LGCOM(ITGB,ITGA)
DIMENSION MINI(NSPACE),MAXI(NSPACE)
DIMENSION LSPA(IAST),LSPB(IBST)
DIMENSION LDISB(NSYM,ITGB,ITGA)
DIMENSION LSAS(NSYM+1,ITGA),LSBS(NSYM+1,ITGB)
DIMENSION LSAC(IAST),LSBC(IBST)
LOGICAL FDIRCT
LCOA = 0
LCOB = 0
ISTA1 = LBST(1)
CALL RESETCO(LBOX1,NSPACE,NB,IBMA,IBMI,LBOX2)
NAST(1) = 0
NBST(1) = 0
DO II=1,ITGA
ITOT = 1
DO JJ=1,NSPACE
ITOT = ITOT * LANDET(JJ,II)
ENDDO
NAST(II+1) = NAST(II) + ITOT
ENDDO
DO II=1,ITGB
ITOT = 1
DO JJ=1,NSPACE
ITOT = ITOT * LBNDET(JJ,II)
ENDDO
NBST(II+1) = NBST(II) + ITOT
ENDDO
ICOMP = 0
CALL RESETCO(LBOX1,NSPACE,NA,IAMA,IAMI,LBOX3)
NA1EX = 0
NB1EX = 0
CALL RESETCO(LBOX1,NSPACE,NB,IBMA,IBMI,LBOX3)
DO IIB = 1,ITGB
CALL RESETDE(LBOX1,NSPACE,NB,MSTA,LCON)
DO KKB=NBST(IIB)+1,NBST(IIB+1)
DO II=1,NSPACE
LBOX2(II) = LBOX1(II)
ENDDO
IEBS = NB+1
DO ISPB1=NSPACE,1,-1
IOC1 = LBOX1(ISPB1)
IEBE = IEBS - 1
IEBS = IEBS - IOC1
LBOX2(ISPB1) = LBOX2(ISPB1)-1
DO IB1=IEBE,IEBS,-1
IO1 = LCON(IB1)
IGBE = IEBE - LBOX1(ISPB1)
DO ISPB2=ISPB1,NSPACE
IGBS = IGBE + 1
IGBE = IGBE + LBOX1(ISPB2)
LBOX2(ISPB2) = LBOX2(ISPB2) + 1
IGBA = MAX(IB1+1,IGBS)
DO IGAP=IGBA,IGBE+1
DO JJ=ISTA,IEND
NB1EX = NB1EX + 1
ENDDO
ISTA = LCON(IGAP)+1
IEND = LCON(IGAP+1)-1
IF (IGAP.EQ.IGBE) IEND=MSTA(ISPB2+1)-1
ENDDO
LBOX2(ISPB2) = LBOX2(ISPB2) - 1
ENDDO
ENDDO
LBOX2(ISPB1) = LBOX2(ISPB1) + 1
ENDDO
CALL MOVEUP2(LBOX1,NSPACE,NB,MSTA,LCON)
ENDDO
CALL PUSHCO(LBOX1,NSPACE,NB,IBMA,IBMI,LBOX3,IEND)
ENDDO
RETURN
END