[9] RFR(S): 8144212: JDK 9 b93 breaks Apache Lucene due to compact strings

Vladimir Kozlov vladimir.kozlov at oracle.com
Wed Jan 6 23:58:34 UTC 2016

Andrew is right.
GraphKit::inflate_string() should have SCMemProjNode as 
compress_string() does to prevent loads move up.
StrInflatedCopyNode is not memory node.


On 1/6/16 5:34 AM, Andrew Haley wrote:
> On 01/06/2016 01:06 PM, Tobias Hartmann wrote:
>> The problem here is that C2 reorders memory instructions and moves
>> an array load before an array store. The MemBarCPUOrder is now used
>> (compiler internally) to prevent this. We do the same for normal
>> array copys in PhaseMacroExpand::expand_arraycopy_node(). No actual
>> code is emitted. See also the comment in memnode.hpp:
>>   // Ordering within the same CPU.  Used to order unsafe memory references
>>   // inside the compiler when we lack alias info.  Not needed "outside" the
>>   // compiler because the CPU does all the ordering for us.
>> "CPU does all the ordering for us" means that even with a relaxed
>> memory ordering, loads are never moved before dependent stores.
>> Or did I misunderstand your question?
> No, I don't think so.  I was just checking: I am very aware that
> HotSpot has presented those of use with relaxed memory order machines
> with some interesting gotchas over the years, that's all.  I'm a bit
> surprised that C2 needs this barrier, given that there is a
> read-after-write dependency, but never mind.
> Thanks,
> Andrew.

More information about the hotspot-compiler-dev mailing list