Unsafe.storeFence produces a floating fence

Tom Rodriguez tom.rodriguez at oracle.com
Fri Nov 18 18:14:14 UTC 2016


For reference https://github.com/graalvm/graal-core/issues/222 <https://github.com/graalvm/graal-core/issues/222> is the issue filed for this.

tom

> On Nov 18, 2016, at 9:53 AM, Gilles Duboscq <gilles.m.duboscq at oracle.com> wrote:
> 
> Hi Andrew,
> 
> From what i see, GraphBuilderContext.add already takes care of adding the node to the control-flow.
> If you want to see how that happens, follow this call chain:
> GraphBuilderContext.add -> BytecodeParser.append -> BytecodeParser.updateLastInstruction
> 
> So i think the MembarNode is correctly added in the control-flow at the point where you expect it.
> I don't think that the store floats anywhere, it's fixed.
> 
> Looking at the code of actor1 i think what happens is rather the allocation of the Shell object and the initialization of x that moves down to the end of actor1 because of escape analysis.
> 
> Checking the graph in IGV might help understanding what happens.
> 
> Gilles
> 
> On 18/11/16 17:42, Andrew Haley wrote:
>> On 18/11/16 16:27, Doug Simon wrote:
>>> 
>>>> On 18 Nov 2016, at 17:20, Andrew Haley <aph at redhat.com> wrote:
>>>> 
>>>> On 18/11/16 16:17, Doug Simon wrote:
>>>>> Can you please create an issue on github for this.
>>>> 
>>>> Oh no, something else to learn!  OK.  :-)
>>> 
>>> Thanks - we like using modern tools as well as email ;-)
>> 
>> Ah, the kids these days...
>> 
>> Anyway, I'd quite like to discuss this general issue.  If you're
>> generating code, either with a Snippet or parsing bytecode, how do you
>> go about creating a node that can't be moved?  You don't necessarily
>> know where your immediate successors or predecessors are.  I guess you
>> could search the graph and find something, but in the case of a memory
>> fence all you'd like the graph builder to do is insert an immovable
>> node.
>> 
>> Andrew.
>> 



More information about the graal-dev mailing list