------- Comment #2 from brian dot e dot bliss at intel dot com 2007-11-09
00:06 -------
Subject: RE: Bogus codegen for openmp atomics w/ indirects operands on IPF
The C example looks correct (but you have to use the += operator to get
a legal example, which might have affected things):
% cat foo.c
void foo(float *lhs, float*rhs) {
#pragma omp atomic
*lhs += *rhs;
}
% gcc -fopenmp -O1 -S foo.c
% cat foo.s
.file "foo.c"
.pred.safe_across_calls p1-p5,p16-p63
.text
.align 16
.global foo#
.proc foo#
foo:
.prologue
.body
ldfs f6 = [r33]
ld4 r15 = [r32]
;;
mov r16 = r15
.L2:
setf.s f7 = r15
;;
fadd.s f7 = f7, f6
;;
getf.s r15 = f7
addp4 r14 = r16, r0
;;
mov ar.ccv = r14
mf
;;
cmpxchg4.rel r17 = [r32], r15, ar.ccv
;;
mov r15 = r17
cmp4.eq p6, p7 = r17, r16
(p6) br.ret.dpnt.many rp
mov r16 = r17
br .L2
;;
.endp foo#
.ident "GCC: (GNU) 4.2.0"
-bb
-----Original Message-----
From: fxcoudert at gcc dot gnu dot org [mailto:[EMAIL PROTECTED]
Sent: Thursday, November 08, 2007 6:50 AM
To: Bliss, Brian E
Subject: [Bug fortran/34020] Bogus codegen for openmp atomics w/
indirects operands on IPF
------- Comment #1 from fxcoudert at gcc dot gnu dot org 2007-11-08
12:49 -------
Does the same thing happen with C?
void foo(float *lhs, float*rhs) {
#pragma omp atomic
*lhs = *rhs + *lhs;
}
--
fxcoudert at gcc dot gnu dot org changed:
What |Removed |Added
------------------------------------------------------------------------
----
CC| |fxcoudert at gcc dot
gnu dot
| |org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34020
------- You are receiving this mail because: -------
You reported the bug, or are watching the reporter.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34020