RFR: 8078743: AARCH64: Extend use of stlr to cater for volatile object stores

Vladimir Kozlov vladimir.kozlov at oracle.com
Thu Jul 30 19:19:19 UTC 2015

First, thank you for extensive comments - they help.

Second, does it really help? I don't see any numbers.

Next pattern (returning NULL or false) is repeater several times. May be make separate function for it.

+    if (opcode != Op_MemBarRelease) {
+      if (opcode != Op_MemBarCPUOrder)
+        return NULL;
+      MemBarNode *parent = parent_membar(leading);
+      if (!parent || !parent->Opcode() == Op_MemBarRelease)
+        return NULL;
+    }

Can you replace retry_feed: with while(cond) ?

Next could be one line Node *x = training
+    Node *x;
+    // the Mem feed to the membar should be a merge
+    x = trailing->in(TypeFunc::Memory);


On 7/29/15 3:55 AM, Andrew Dinn wrote:
> The following webrev is a follow-on to the fix posted for JDK-8078263.
> The earlier fix optimized *non-object* volatile puts/gets to use
> stlr/ldar and elide the associated leading/trailing dmb instructions.
> This one extends the previous optimization to cover volatile object puts.
>    http://cr.openjdk.java.net/~adinn/8078743/webrev.03/
> The fix involves identifying certain Ideal Graph configurations in which
> generation of leading and trailing dmb can be avoided in favour of
> generating an stlr instruction. As a consequence the fix is sensitive to
> the current GC configs and also to whether the value being written is
> null, potentially null or known notnull. I have tested it using 5 GC
> configs:
>    G1GC
>    CMS+UseCondCardMark
>    CMS-UseCondCardMark
>    Parallel+UseCondCardMark
>    Parallel-UseCondCardMark
> The last two configs are much of a muchness as regards what the patch
> code does since with Parallel (or Serial) GC the patch code does not
> need to look at the code which does the card mark -- but I tested
> against both just to be sure.
> Testing involved
>    i) eyeballing the code generated for normal and unsafe volatile puts
> with null, possibly null and notnull values
>    ii) exercising a large program (build and run sample project in
> netbeans) and eyeballing the code generated for methods of ConcurrentHashMap
>    iii) running the full jcstress suite
> Comments and reviews very welcome
> n.b. I have a 3rd patch queued which performs a similar optimization for
> CAS operations (drop the dmbs in favour of an ldaxr/stlxr pair).
> regards,
> Andrew Dinn
> -----------
> Senior Principal Software Engineer
> Red Hat UK Ltd
> Registered in UK and Wales under Company Registration No. 3798903
> Directors: Michael Cunningham (USA), Matt Parson (USA), Charlie Peters
> (USA), Michael O'Neill (Ireland)

More information about the hotspot-compiler-dev mailing list