[Bug target/35659] [4.3/4.4 Regression] Miscompiled code with -O2 (but not with -O2 -funroll-loops) on ia64

jakub at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Tue Jun 24 14:45:00 GMT 2008



------- Comment #11 from jakub at gcc dot gnu dot org  2008-06-24 14:44 -------
      PROGRAM PR35659
      DIMENSION A(1000), B(1010), AUX(8), IPIV(8), X(16)
      COMMON /TLSDIM/ M1,M,N,L,IER
      COMMON /SLATE/ V1,V2,IAR(24),DUM(14)
      DATA A/0, 1, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 1, 0.200000003,
     1  0.0399999991, 0.00800000038, 1, 0.400000006, 0.159999996,
     2  0.064000003, 1, 0.600000024, 0.360000014, 0.216000006, 1,
     3  0.800000012, 0.639999986, 0.512000024, 1, 1, 1, 1, 968*0./
      DATA B/1, 2, 1, 1.22140002, 1.49179995, 1.82210004,
     4  2.22550011, 2.7183001, 0, 0, 1000*0./
      M1 = 2
      M = 8
      N = 4
      L = 1
      IER = 0
      V1 = 0
      V2 = 1.40129846e-45
      IAR(:) = 538976288
      DUM(:) = 1.35631564e-19
      CALL TLSC(A,B,AUX,IPIV,1.,X)
      IF (ABS(X(1) - 0.99785352).GE.0.1) CALL ABORT
      IF (ABS(X(2) - 1.0).GE.0.1) CALL ABORT
      IF (ABS(X(3) - 0.50107324).GE.0.1) CALL ABORT
      IF (ABS(X(4) - 0.21670136).GE.0.1) CALL ABORT
      END
      SUBROUTINE TLSMSQ (B,L,M,F)                                               
      COMMON /SLATE/ DUM(38),I,JB                                               
      DIMENSION      B(*)                                                       
      F  = 0.                                                                   
      JB = 1                                                                    
      DO           10        I=1,M                                              
      F  = F + B(JB)*B(JB)                                                      
   10 JB = JB + L                                                               
      RETURN                                                                    
      END                                   
      SUBROUTINE TLSWOP (A,AD,N,NR)                                             
      COMMON /SLATE/ DUM(37),H,I,JA                                             
      DIMENSION      A(*), AD(*)                                                
      JA = 1                                                                    
      DO           10        I=1,NR                                             
      H  = A(JA)                                                                
      A(JA)  = AD(JA)                                                           
      AD(JA) = H                                                                
   10 JA = JA + N                                                               
      RETURN                                                                    
      END                                      
      SUBROUTINE TLUK (A,IASEP,NR,SIG,BETA)
      COMMON /SLATE/ DUM(37),I,JA,LL
      DIMENSION A(*)
      SIG= 0.
      JA = 1
      LL = 0
      DO           10        I=1,NR
      IF     (A(JA).EQ.0.)             GO TO     10
      LL = I
      SIG= SIG + A(JA)* A(JA)
   10 JA = JA + IASEP
      NR = LL
      IF     (NR.EQ.0)                 RETURN
      SIG  = SIGN (SQRT (SIG),A(1))
      BETA = A(1) + SIG
      A(1) = BETA
      BETA = 1. / (SIG * BETA)
      RETURN
      END
      SUBROUTINE TLSTEP (A,B,IASEP,IBSEP,NR,NC,BETA)
      COMMON /SLATE/ DUM(34),H,I,IB,J,JA,JB
      DIMENSION      A(*), B(*)
      IB = 0
      DO           30        J=1,NC
      IB = IB + 1
      H  = 0.
      JA = 1
      JB = IB
      DO           10        I=1,NR
      H  = H + A(JA) * B(JB)
      JA = JA +IASEP
   10 JB = JB + IBSEP
      H  = H * BETA
      JA = 1
      JB = IB
      DO           20        I=1,NR
      B(JB) = B(JB) - A(JA) * H
      JA = JA +IASEP
   20 JB = JB + IBSEP
   30 CONTINUE
      RETURN
      END

together with tlsc.f can work as a testcase, and reproduces the problem with
current 4.3 branch.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35659



More information about the Gcc-bugs mailing list