[Bug fortran/34020] New: Bogus codegen for openmp atomics w/ indirects operands on IPF

brian dot e dot bliss at intel dot com gcc-bugzilla@gcc.gnu.org
Thu Nov 8 00:11:00 GMT 2007


The codegen for atomic instructions with indirect/reference operands on
Itanium seems to be bogus:

% cat bar.F
        subroutine atomic_add(lhs, rhs)
        real lhs, rhs
!$omp atomic
        lhs = rhs + lhs
        end

% gfortran -v -fopenmp -O1 -S bar.F
Using built-in specs.
Target: ia64-unknown-linux-gnu
Configured with: /net/gnu-13/export/gnu/src/gcc-4.2/gcc/configure
--enable-cloca
le=gnu --with-system-zlib --with-demangler-in-ld --enable-shared
--enable-thread
s=posix --enable-haifa --enable-checking=assert --prefix=/usr/gcc-4.2
--with-loc
al-prefix=/usr/local
.
.
.

% cat bar.s
        .file   "bar.F"
        .pred.safe_across_calls p1-p5,p16-p63
        .text
        .align 16
        .global atomic_add_#
        .proc atomic_add_#
atomic_add_:
        .prologue
        .body
        ld4 r14 = [r32]
        ldfs f6 = [r33]
        ;;
        setf.s f7 = r14
        ;;
        fadd.s f7 = f7, f6
        ;;
        getf.s r16 = f7
        mov r15 = r14
.L2:
        ;;
        addp4 r14 = r15, r0
        ;;
        mov ar.ccv = r14
        mf
        ;;
        cmpxchg4.rel r14 = [r32], r16, ar.ccv
        ;;
        cmp4.eq p6, p7 = r14, r15
        (p6) br.ret.dpnt.many rp
        mov r15 = r14
        br .L2
        ;;
        .endp atomic_add_#
        .ident  "GCC: (GNU) 4.2.0"

Note that the fp add instruction is not in the retry path, so if the cmpxchg
fails because of contention from another thread, the incorrect result will
be written to the atomic location.

The bug happens in all versions of gfortran 4.2.x and 4.3.0 that I have tried.
It does not happen if lhs is a symbolic constant.
It happens for all data types, not just fp.
It happens for all optimization levels.


-- 
           Summary: Bogus codegen for openmp atomics w/ indirects operands
                    on IPF
           Product: gcc
           Version: 4.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: brian dot e dot bliss at intel dot com


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



More information about the Gcc-bugs mailing list