IBM Support

LI74216: 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.
    
    ===== Compile Command=====
    blrts_f90 -O3 -qfixed -qarch=440d -qtune=440 -I
    /bgl/BlueLight/ppcfloor/bglsys/include -qsource -qlist
    -qreport=hotlist   -c test.f
    
    blrts_f90 test.o   -O3 -qhot
    -L/bgl/BlueLight/ppcfloor/bglsys/lib -lmpich.rts -lmsglayer.rts
    -lrts.rts -ldevices.rts   -o test
    
    
    ===== TESTCASE:
    ====Start of test.f======
          program test
          implicit REAL*8 (A-H,O-Z)
          PARAMETER(Nmax = 140)
          PARAMETER(Nsbt = 8)
          COMPLEX*16 c(NMAX,NMAX)
          COMPLEX*16 vprd(NMAX,NMAX)
          REAL*8 TDa(NMAX)
    c
          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.0d0,1.0d0)
            enddo
          enddo
    
          call
    test_init(c,vprd,TDa,4.0d0,2.0d0,1.0d0,0.5d0,NMAX,Nsbt)
    
          do i=1,Nsbt*2
            do j=1,Nsbt*2
              write(*,*) 'c(',j,',',i,')=',c(j,i)
            enddo
            write(*,*)
          enddo
    
          stop
          end
    
          subroutine test_reset(a,N)
          COMPLEX*16 a(N)
          integer n,i
          do i=1,n
            a(i) = 0.0D0
          enddo
          return
          end
    
    
    c@PROCESS nohot
          subroutine test_init(c,vprd,TDa,Rm0,Rm,p0,u0,NMAX,Nsbt)
          COMPLEX*16 c(NMAX,NMAX)
          COMPLEX*16 vprd(NMAX,NMAX)
          COMPLEX*16 w(NMAX,NMAX)
          REAL*8 TDa(NMAX),Rm0,Rm,p0,u0
          integer NMAX,Nsbt,i,j,k
    c
          call test_reset(c,Nmax*Nmax)
    c
          do i=1,2*Nsbt
            c(i,i) = -u0
          enddo
    c
          do i=1,Nsbt
            c(i,i+Nsbt)=(Rm0-0.5D0*Rm)*DSIGN(1.D0,TDa(i)) -
    p0*TDa(i)
          enddo
    c
          do i = 1, Nsbt
          do j = Nsbt+1, 2*Nsbt
            c(i,j) = c(i,j) + u0*vprd(i,j)
          enddo
          enddo
    c
          return
          end
    
    ========End of test.f============
    
    ===== ACTUAL OUTPUT:
    .
    .
    stdout[0]:  c( 1 , 9 )=
    (4.50000000000000000,0.500000000000000000) <--Notice the 4.5
    stdout[0]:  c( 2 , 9 )=
    (0.500000000000000000,0.500000000000000000)
    .
    .
    stdout[0]:  c( 1 , 11 )=
    (0.500000000000000000,0.500000000000000000)
    stdout[0]:  c( 2 , 11 )=
    (0.500000000000000000,0.500000000000000000)
    stdout[0]:  c( 3 , 11 )=
    (4.50000000000000000,0.500000000000000000) <--Notice the 4.5
    stdout[0]:  c( 4 , 11 )=
    (0.500000000000000000,0.500000000000000000)
    .
    .
    stdout[0]:  c( 5 , 13 )=
    (4.50000000000000000,0.500000000000000000) <--Notice the 4.5
    .
    .
    stdout[0]:  c( 6 , 15 )=
    (0.500000000000000000,0.500000000000000000)
    stdout[0]:  c( 7 , 15 )=
    (4.50000000000000000,0.500000000000000000) <--Notice the 4.5
    .
    
    
    
    ===== EXPECTED OUTPUT:
    .
    .
    stdout[0]:  c( 1 , 9 )=
    (-1.50000000000000000,0.500000000000000000) <--Should be -1.5
    stdout[0]:  c( 2 , 9 )=
    (0.500000000000000000,0.500000000000000000)
    .
    .
    stdout[0]:  c( 1 , 11 )=
    (0.500000000000000000,0.500000000000000000)
    stdout[0]:  c( 2 , 11 )=
    (0.500000000000000000,0.500000000000000000)
    stdout[0]:  c( 3 , 11 )=
    (-1.50000000000000000,0.500000000000000000) <--Should be -1.5
    stdout[0]:  c( 4 , 11 )=
    (0.500000000000000000,0.500000000000000000)
    .
    .
    stdout[0]:  c( 5 , 13 )=
    (-1.50000000000000000,0.500000000000000000) <--Should be -1.5
    .
    .
    stdout[0]:  c( 6 , 15 )=
    (0.500000000000000000,0.500000000000000000)
    stdout[0]:  c( 7 , 15 )=
    (-1.50000000000000000,0.500000000000000000) <--Should be -1.5
    

Local fix

  • n/a
    

Problem summary

  • Users with 440d or 450d (using the double
    hummer unit) maybe affected by this issue.
    
    There is a transformation where the compiler
    replaces pattern USEL with float compares 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

APAR Information

  • APAR number

    LI74216

  • Reported component name

    XL FORTRAN AE B

  • Reported component ID

    5799HJG00

  • Reported release

    B10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2009-02-25

  • Closed date

    2009-04-28

  • Last modified date

    2009-04-28

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

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

    LI74942

Fix information

  • Fixed component name

    XL FORTRAN AE B

  • Fixed component ID

    5799HJG00

Applicable component levels

  • RB10 PSY

       UP

[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSB259","label":"XL Fortran Advanced Edition for Linux"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"B.1","Line of Business":{"code":"LOB57","label":"Power"}}]

Document Information

Modified date:
24 February 2022