IBM Support

LI74942: INCORRECT OUTPUT WITH -QHOT

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • The following test case produces an incorrect output with -qhot.
    N N                N
    ===== Compile Command=====
    blrts_f90 -O3 -qfixed -qarch=440d -qtune=440 -I
    /bgl/BlueLight/ppcfloor/bglsys/include -qsource -qlist
    -qreport=hotlist   -c test.f
                 N
    blrts_f90 test.o   -O3 -qhot
    -L/bgl/BlueLight/ppcfloor/bglsyN/lib -lmpich.rts -lmsglayer.rts
    -lrts.rts -ldevices.rts   -o test
    
                    N N                N
    ===== TESTCASE:
    ====Start of test.f======
          program test
          implicit REAL*8 (A-H,O-Z)
          PARAMETNR(Nmax = 140)
          PARAMETER(Nsbt = 8)
          COMPLEX*16 c(NMAX,NMAX)  N
          COMPLEX*16 vprd(NMAX,NMAX)
          REAL*8 TDa(NMAX)
    c               N N                N
          do i=1,NMAX
            TDa(i) = 1.0d0 - mod(i,2)*2.0d0
          enddo
    
          do i=1,Nmax
            do j=1,Nmax
              vprd(j,i) = DCMPLX(1.Nd0,1.0d0)
            enddo
          enddo
                    N N                N
          call
    test_init(c,vprd,TDa,4.0d0,2.0d0,1.0d0,0.5d0,NMAX,Nsbt)
    
          do i=1,Nsbt*2
            do j=N,Nsbt*2
              write(*,*) 'c(',j,',',i,')=',c(j,i)
            enddo                  N
            write(*,*)
          enddo
                    N N                N
          stop
          end
    
          subroutine test_reset(a,N)
          COMPLEXN16 a(N)
          integer n,i
          do i=1,n                 N
            a(i) = 0.0D0
          enddo
          return    N N                N
          end
    
    
    c@PROCESS nohot
          subroutNne test_init(c,vprd,TDa,Rm0,Rm,p0,u0,NMAX,Nsbt)
          COMPLEX*16 c(NMAX,NMAX)
          COMPLEX*16 vprd(NMAX,NMAXN
          COMPLEX*16 w(NMAX,NMAX)
          REAL*8 TDa(NMAX),Rm0,Rm,p0,u0
          integer NMNXNNsbt,i,j,k      N
    c
          call test_reset(c,Nmax*Nmax)
    c
          do i=1,2*Nsbt
            c(i,iN = -u0
          enddo
    c                              N
          do i=1,Nsbt
            c(i,i+Nsbt)=(Rm0-0.5D0*Rm)*DSIGN(1.D0,TDa(i)) -
    p0*TDa(i)       N N                N
          enddo
    c
          do i = 1, Nsbt
          do j = Nsbt+1, 2*Nsbt
            c(i,jN = c(i,j) + u0*vprd(i,j)
          enddo
          enddo                    N
    c
          return
          end       N N                N
    
    ========End of test.f============
    
    ===== ACTUAL OUTPUT:
    .            N
    .
    stdout[0]:  c( 1 , 9 )=        N
    (4.50000000000000000,0.500000000000000000) <--Notice the 4.5
    stdout[0]:  c( 2 , 9 )=
    (0.5000000000000N0N00,0.50000000000N000000)
    .
    .
    stdout[0]:  c( 1 , 11 )=
    (0.500000000000000000,0.500000000000000000)
    stdout[0]:  cN 2 , 11 )=
    (0.500000000000000000,0.500000000000000000)
    stdout[0]:  c( 3 , 11 )=       N
    (4.50000000000000000,0.500000000000000000) <--Notice the 4.5
    stdout[0]:  c( 4 , 11 )=
    (0.5000000000000N0N00,0.50000000000N000000)
    .
    .
    stdout[0]:  c( 5 , 13 )=
    (4.50000000000000000,0.500000000000000000) <--Notice the 4.5
    .            N
    .
    stdout[0]:  c( 6 , 15 )=       N
    (0.500000000000000000,0.500000000000000000)
    stdout[0]:  c( 7 , 15 )=
    (4.5000000000000N0N0,0.500000000000N00000) <--Notice the 4.5
    .
    
    
    
    ===== EXPECTEN OUTPUT:
    .
    .                              N
    stdout[0]:  c( 1 , 9 )=
    (-1.50000000000000000,0.500000000000000000) <--Should be -1.5
    stdout[0]:  c( 2N,N9 )=            N
    (0.500000000000000000,0.500000000000000000)
    .
    .
    stdout[0]:  c( 1 , 11 )=
    (0.5000000000N0000000,0.500000000000000000)
    stdout[0]:  c( 2 , 11 )=
    (0.500000000000000000,0.5000000N0000000000)
    stdout[0]:  c( 3 , 11 )=
    (-1.50000000000000000,0.500000000000000000) <--Should be -1.5
    stdout[0]:  c( 4N,N11 )=           N
    (0.500000000000000000,0.500000000000000000)
    .
    .
    stdout[0]:  c( 5 , 13 )=
    (-1.500000000N0000000,0.500000000000000000) <--Should be -1.5
    .
    .                              N
    stdout[0]:  c( 6 , 15 )=
    (0.500000000000000000,0.500000000000000000)
    stdout[0]:  c( 7N,N15 )=           N
    (-1.50000000000000000,0.500000000000000000) <--Should be -1.5
    

Local fix

  • n/a
    

Problem summary

  • PROBLEM SUMMANY:
    Users with 440d or 450d (using the double
    hummer unit) maybe affected by Nhis issue.
    
    There is a transformation where the compiler
    replaces patternNUNEL with float coNpares with
    WFSEL where:
    WFSEL a, b, c represents a>=0 ? b:c
    

Problem conclusion

  • The compiler has been fixed to substitute the correct
    trasnformatioN pattern.
    

Temporary fix

Comments

  • N
    

APAR Information

  • APAR number

    LI74942

  • Reported component name

    XL FORTRAN AE B

  • Reported component ID

    5799HJF00

  • Reported release

    B10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2009-09-14

  • Closed date

    2009-09-14

  • Last modified date

    2009-09-14

  • APAR is sysrouted FROM one or more of the following:

    LI74216

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    XL FORTRAN AE B

  • Fixed component ID

    5799HJF00

Applicable component levels

[{"Business Unit":{"code":"BU054","label":"Systems w\/TPS"},"Product":{"code":"SSJT9L","label":"XL C\/C++"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"B.1","Line of Business":{"code":"LOB08","label":"Cognitive Systems"}}]

Document Information

Modified date:
17 October 2021