test/hotspot/jtreg/compiler/c2/aarch64/TestVolatiles.java
changeset 52925 9c18c9d839d3
parent 52409 87bc444ca642
child 55587 4644b3155fce
--- a/test/hotspot/jtreg/compiler/c2/aarch64/TestVolatiles.java	Mon Dec 10 17:34:49 2018 +0300
+++ b/test/hotspot/jtreg/compiler/c2/aarch64/TestVolatiles.java	Mon Dec 10 15:47:44 2018 +0100
@@ -39,7 +39,9 @@
  *                    CMS,
  *                    CMSCondMark,
  *                    Serial,
- *                    Parallel}
+ *                    Parallel,
+ *                    Shenandoah,
+ *                    ShenandoahTraversal}
  */
 
 
@@ -100,6 +102,19 @@
             procArgs[argcount - 3] = "-XX:+UseConcMarkSweepGC";
             procArgs[argcount - 2] = "-XX:+UseCondCardMark";
             break;
+        case "Shenandoah":
+            argcount = 10;
+            procArgs = new String[argcount];
+            procArgs[argcount - 3] = "-XX:+UnlockExperimentalVMOptions";
+            procArgs[argcount - 2] = "-XX:+UseShenandoahGC";
+            break;
+        case "ShenandoahTraversal":
+            argcount = 11;
+            procArgs = new String[argcount];
+            procArgs[argcount - 4] = "-XX:+UnlockExperimentalVMOptions";
+            procArgs[argcount - 3] = "-XX:+UseShenandoahGC";
+            procArgs[argcount - 2] = "-XX:ShenandoahGCHeuristics=traversal";
+            break;
         default:
             throw new RuntimeException("unexpected test type " + testType);
         }
@@ -355,6 +370,17 @@
                     "ret"
                 };
                 break;
+            case "Shenandoah":
+            case "ShenandoahTraversal":
+                 // Shenandoah generates normal object graphs for
+                 // volatile stores
+                matches = new String[] {
+                    "membar_release \\(elided\\)",
+                    useCompressedOops ? "stlrw?" : "stlr",
+                    "membar_volatile \\(elided\\)",
+                    "ret"
+                };
+                break;
             }
         } else {
             switch (testType) {
@@ -418,6 +444,20 @@
                     "ret"
                 };
                 break;
+
+            case "Shenandoah":
+            case "ShenandoahTraversal":
+                 // Shenandoah generates normal object graphs for
+                 // volatile stores
+                matches = new String[] {
+                    "membar_release",
+                    "dmb ish",
+                    useCompressedOops ? "strw?" : "str",
+                    "membar_volatile",
+                    "dmb ish",
+                    "ret"
+                };
+                break;
             }
         }
 
@@ -520,6 +560,17 @@
                     "ret"
                 };
                 break;
+            case "Shenandoah":
+            case "ShenandoahTraversal":
+                // For volatile CAS, Shenanodoah generates normal
+                // graphs with a shenandoah-specific cmpxchg
+                matches = new String[] {
+                    "membar_release \\(elided\\)",
+                    useCompressedOops ? "cmpxchgw?_acq_shenandoah" : "cmpxchg_acq_shenandoah",
+                    "membar_acquire \\(elided\\)",
+                    "ret"
+                };
+                break;
             }
         } else {
             switch (testType) {
@@ -583,6 +634,19 @@
                     "ret"
                 };
                 break;
+            case "Shenandoah":
+            case "ShenandoahTraversal":
+                // For volatile CAS, Shenanodoah generates normal
+                // graphs with a shenandoah-specific cmpxchg
+                matches = new String[] {
+                    "membar_release",
+                    "dmb ish",
+                    useCompressedOops ? "cmpxchgw?_shenandoah" : "cmpxchg_shenandoah",
+                    "membar_acquire",
+                    "dmb ish",
+                    "ret"
+                };
+                break;
             }
         }
 
@@ -701,6 +765,17 @@
                     "ret"
                 };
                 break;
+            case "Shenandoah":
+            case "ShenandoahTraversal":
+                // For volatile CAS, Shenanodoah generates normal
+                // graphs with a shenandoah-specific cmpxchg
+                matches = new String[] {
+                    "membar_release \\(elided\\)",
+                    useCompressedOops ? "cmpxchgw?_acq_shenandoah" : "cmpxchg_acq_shenandoah",
+                    "membar_acquire \\(elided\\)",
+                    "ret"
+                };
+                break;
             }
         } else {
             switch (testType) {
@@ -764,6 +839,19 @@
                     "ret"
                 };
                 break;
+            case "Shenandoah":
+            case "ShenandoahTraversal":
+                // For volatile CAS, Shenanodoah generates normal
+                // graphs with a shenandoah-specific cmpxchg
+                matches = new String[] {
+                    "membar_release",
+                    "dmb ish",
+                    useCompressedOops ? "cmpxchgw?_shenandoah" : "cmpxchg_shenandoah",
+                    "membar_acquire",
+                    "dmb ish",
+                    "ret"
+                };
+                break;
             }
         }
 
@@ -862,6 +950,15 @@
                     "ret"
                 };
                 break;
+            case "Shenandoah":
+            case "ShenandoahTraversal":
+                matches = new String[] {
+                    "membar_release \\(elided\\)",
+                    useCompressedOops ? "atomic_xchgw?_acq" : "atomic_xchg_acq",
+                    "membar_acquire \\(elided\\)",
+                    "ret"
+                };
+                break;
             }
         } else {
             switch (testType) {
@@ -925,6 +1022,17 @@
                     "ret"
                 };
                 break;
+            case "Shenandoah":
+            case "ShenandoahTraversal":
+                matches = new String[] {
+                    "membar_release",
+                    "dmb ish",
+                    useCompressedOops ? "atomic_xchgw? " : "atomic_xchg ",
+                    "membar_acquire",
+                    "dmb ish",
+                    "ret"
+                };
+                break;
             }
         }