If I see a dead volatile load I can remove the actual load, but
a volatile ref includes a 'MemBarAcquire' (in HotSpot parlance)
to help prevent various compiler & hardware reorderings. Can I
remove the MemBarAcquire as well?
static volatile int V1, V2, V3;
static int I1, I2;
/* MemBarRelease inserted before volatile store */
V3 = ...; /* other volatile refs */
... = V2;
/* MemBarAcquire inserted here after volatile ref */
... I1; /* other non-volatile refs */
I2 = ...;
int dead = V1; /* load global variable V1, ITS DEAD, NO LOAD ACTUALLY
EMITTED */
/* MemBarAcquire inserted here <-- CAN I REMOVE THIS??? */
... I2; /* other non-volatile refs */
I1 = ...;
/* MemBarRelease inserted before volatile store */
V2 = ...; /* other volatile refs */
... = V3;
I could always sink other non-volatile refs below a MemBarAcquire,
but not above it. Thus I could always sink the ref's to I1 & I2
down below the volatile load of V1 and optimize them with the reads
and writes down there. Since V1 is dead, there's no way to tell
if I do something out of order by hoisting I1 above the read of V1,
right?
Thanks,
Cliff
-- Dr. Cliff Click Chief Architect, HotSpot Server Sun Microsystems, Inc. Cliff.Click@Sun.COM Senior Staff Engineer 4150 Network Circle (408) 276-7046 MS USCA14-102 Santa Clara, CA 95054------------------------------- JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:00:40 EDT