@@ -1607,13 +1607,26 @@ protected boolean useExplicitReachabilityFence(GraphBuilderContext b) {
1607
1607
return Options .ForceExplicitReachabilityFence .getValue (b .getOptions ());
1608
1608
}
1609
1609
});
1610
+ r .register (new InlineOnlyInvocationPlugin ("get0" , Receiver .class ) {
1611
+ @ Override
1612
+ public boolean apply (GraphBuilderContext b , ResolvedJavaMethod targetMethod , Receiver receiver ) {
1613
+ ValueNode offset = b .add (ConstantNode .forLong (HotSpotReplacementsUtil .referentOffset (b .getMetaAccess ())));
1614
+ AddressNode address = b .add (new OffsetAddressNode (receiver .get (true ), offset ));
1615
+ FieldLocationIdentity locationIdentity = new FieldLocationIdentity (HotSpotReplacementsUtil .referentField (b .getMetaAccess ()));
1616
+ JavaReadNode read = b .add (new JavaReadNode (StampFactory .object (), JavaKind .Object , address , locationIdentity , BarrierType .REFERENCE_GET , MemoryOrderMode .PLAIN , true ));
1617
+ b .add (new MembarNode (MembarNode .FenceKind .NONE , locationIdentity ));
1618
+ b .addPush (JavaKind .Object , read );
1619
+ return true ;
1620
+ }
1621
+ });
1610
1622
r .register (new InlineOnlyInvocationPlugin ("refersTo0" , Receiver .class , Object .class ) {
1611
1623
@ Override
1612
1624
public boolean apply (GraphBuilderContext b , ResolvedJavaMethod targetMethod , Receiver receiver , ValueNode o ) {
1613
1625
ValueNode offset = b .add (ConstantNode .forLong (HotSpotReplacementsUtil .referentOffset (b .getMetaAccess ())));
1614
1626
AddressNode address = b .add (new OffsetAddressNode (receiver .get (true ), offset ));
1615
1627
FieldLocationIdentity locationIdentity = new FieldLocationIdentity (HotSpotReplacementsUtil .referentField (b .getMetaAccess ()));
1616
1628
JavaReadNode read = b .add (new JavaReadNode (StampFactory .object (), JavaKind .Object , address , locationIdentity , BarrierType .WEAK_REFERS_TO , MemoryOrderMode .PLAIN , true ));
1629
+ b .add (new MembarNode (MembarNode .FenceKind .NONE , locationIdentity ));
1617
1630
LogicNode objectEquals = b .add (ObjectEqualsNode .create (b .getConstantReflection (), b .getMetaAccess (), b .getOptions (), read , o , NodeView .DEFAULT ));
1618
1631
b .addPush (JavaKind .Boolean , ConditionalNode .create (objectEquals , b .add (forBoolean (true )), b .add (forBoolean (false )), NodeView .DEFAULT ));
1619
1632
return true ;
0 commit comments