RFR(S): 8144212: JDK 9 b93 breaks Apache Lucene due to compact strings
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.
More information about the hotspot-compiler-dev