@@ -1607,13 +1607,26 @@ protected boolean useExplicitReachabilityFence(GraphBuilderContext b) {
16071607 return Options .ForceExplicitReachabilityFence .getValue (b .getOptions ());
16081608 }
16091609 });
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+ });
16101622 r .register (new InlineOnlyInvocationPlugin ("refersTo0" , Receiver .class , Object .class ) {
16111623 @ Override
16121624 public boolean apply (GraphBuilderContext b , ResolvedJavaMethod targetMethod , Receiver receiver , ValueNode o ) {
16131625 ValueNode offset = b .add (ConstantNode .forLong (HotSpotReplacementsUtil .referentOffset (b .getMetaAccess ())));
16141626 AddressNode address = b .add (new OffsetAddressNode (receiver .get (true ), offset ));
16151627 FieldLocationIdentity locationIdentity = new FieldLocationIdentity (HotSpotReplacementsUtil .referentField (b .getMetaAccess ()));
16161628 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 ));
16171630 LogicNode objectEquals = b .add (ObjectEqualsNode .create (b .getConstantReflection (), b .getMetaAccess (), b .getOptions (), read , o , NodeView .DEFAULT ));
16181631 b .addPush (JavaKind .Boolean , ConditionalNode .create (objectEquals , b .add (forBoolean (true )), b .add (forBoolean (false )), NodeView .DEFAULT ));
16191632 return true ;
0 commit comments