<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p></p>
<p></p>
<p>I am writing a jtreg testcase that reproduces the issue in</p>
<p><a href="https://bugs.openjdk.org/browse/JDK-8329797" class="OWAAutoLink" id="LPlnk764079">https://bugs.openjdk.org/browse/JDK-8329797</a><br>
</p>
<p></p>
<p style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
</p>
<p style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
```</p>
<p style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
</p>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
diff --git a/test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java b/test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
index 80dda306d3b..97b92c63744 100644</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
--- a/test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+++ b/test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
@@ -34,7 +34,7 @@</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
  * @summary Test that if expressions are properly folded into min/max nodes</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
  * @requires os.arch != "riscv64"</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
  * @library /test/lib /</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
- * @run main compiler.c2.irTests.TestIfMinMax</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+ * @run main/othervm -XX:+UseShenandoahGC compiler.c2.irTests.TestIfMinMax</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
  */</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
 public class TestIfMinMax {</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
     private static final Random RANDOM = Utils.getRandomInstance();</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
@@ -139,6 +139,31 @@ public long testMaxL2E(long a, long b) {</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
         return a <= b ? b : a;</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
     }</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+    public class Dummy {</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+        long l;</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+        public Dummy(long l) { this.l = l; }</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+    }</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+    @Setup</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+    Object[] setupDummyArray() {</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+        Dummy[] arr = new Dummy[512];</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+        for (int i = 0; i < 512; i++) {</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+            arr[i] = new Dummy(RANDOM.nextLong());</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+        }</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+        return new Object[] { arr };</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+    }</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+    @Test</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+    @Arguments(setup = "setupDummyArray")</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+    @IR(failOn = { IRNode.MAX_L })</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+    public long testMaxLAndBarrierInLoop(Dummy[] arr) {</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+        long result = 0;</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+        for (int i = 0; i < arr.length; ++i) {</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+            result += Math.max(arr[i].l, 1);</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+        }</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+        return result;</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+    }</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
+</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
     @Setup</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
     static Object[] setupIntArrays() {</div>
<div style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
         int[] a = new int[512];</div>
<span style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">```</span>
<p style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
</p>
<p style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
</p>
<div>If I run the test usually with `make CONF=linux-x86_64-server-fastdebug run-test</div>
<div>TEST=test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java`, the program</div>
<div>does not crash and the reproducer does not work. However, if I specify to use</div>
<div>`-XX:+UseShenandoahGC` from the command line, the crash is successfully</div>
<div>reproduced `make CONF=linux-x86_64-server-fastdebug run-test</div>
<div>TEST=test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java</div>
<div>JTREG="JAVA_OPTIONS=-XX:+UseShenandoahGC`. So I guess there is inconsistency</div>
<div>between the command line JVM arguments and those passed through `@run`.</div>
<p></p>
<p style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-size: 12pt;"></span></p>
<p style="font-family: Calibri, Helvetica, sans-serif, Helvetica, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
</p>
<p></p>
<p><span style="font-size: 12pt;">Without the command line action, the logs show</span></p>
<p><span style="font-size: 12pt;"><br>
</span></p>
<p><span style="font-size: 12pt;">```</span></p>
<p><span style="font-size: 12pt;"></span></p>
<div>/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/images/jdk/bin/java \\<br>
        -Dtest.vm.opts='-XX:MaxRAMPercentage=1.25 -Dtest.boot.jdk=/home/joshcao/.sdkman/candidates/java/current -Djava.io.tmpdir=/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/test-support/jtreg_test_hotspot_jtreg_compiler_c2_irTests_TestIfMinMax_java/tmp'
 \\<br>
        -Dtest.tool.vm.opts='-J-XX:MaxRAMPercentage=1.25 -J-Dtest.boot.jdk=/home/joshcao/.sdkman/candidates/java/current -J-Djava.io.tmpdir=/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/test-support/jtreg_test_hotspot_jtreg_compiler_c2_irTests_TestIfMinMax_java/tmp'
 \\<br>
        -Dtest.compiler.opts= \\<br>
        -Dtest.java.opts= \\<br>
        -Dtest.jdk=/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/images/jdk \\<br>
        -Dcompile.jdk=/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/images/jdk \\<br>
        -Dtest.timeout.factor=4.0 \\<br>
        -Dtest.nativepath=/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/images/test/hotspot/jtreg/native \\<br>
        -Dtest.root=/local/home/joshcao/jdk/jdk/test/hotspot/jtreg \\<br>
        -Dtest.name=compiler/c2/irTests/TestIfMinMax.java \\<br>
        -Dtest.file=/local/home/joshcao/jdk/jdk/test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java \\<br>
        -Dtest.src=/local/home/joshcao/jdk/jdk/test/hotspot/jtreg/compiler/c2/irTests \\<br>
        -Dtest.src.path=/local/home/joshcao/jdk/jdk/test/hotspot/jtreg/compiler/c2/irTests:/local/home/joshcao/jdk/jdk/test/lib:/local/home/joshcao/jdk/jdk/test/hotspot/jtreg \\<br>
        -Dtest.classes=/local/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/test-support/jtreg_test_hotspot_jtreg_compiler_c2_irTests_TestIfMinMax_java/classes/0/compiler/c2/irTests/TestIfMinMax.d \\<br>
        -Dtest.class.path=/local/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/test-support/jtreg_test_hotspot_jtreg_compiler_c2_irTests_TestIfMinMax_java/classes/0/compiler/c2/irTests/TestIfMinMax.d:/local/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/test-support/jtreg_test_hotspot_jtreg_compiler_c2_irTests_TestIfMinMax_java/classes/0/test/lib:/local/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/test-support/jtreg_test_hotspot_jtreg_compiler_c2_irTests_TestIfMinMax_java/classes/0
 \\<br>
        -Dtest.class.path.prefix=/local/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/test-support/jtreg_test_hotspot_jtreg_compiler_c2_irTests_TestIfMinMax_java/classes/0/compiler/c2/irTests/TestIfMinMax.d:/local/home/joshcao/jdk/jdk/test/hotspot/jtreg/compiler/c2/irTests:/local/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/test-support/jtreg_test_hotspot_jtreg_compiler_c2_irTests_TestIfMinMax_java/classes/0/test/lib:/local/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/test-support/jtreg_test_hotspot_jtreg_compiler_c2_irTests_TestIfMinMax_java/classes/0
 \\<br>
        -XX:MaxRAMPercentage=1.25 \\<br>
        -Dtest.boot.jdk=/home/joshcao/.sdkman/candidates/java/current \\<br>
        -Djava.io.tmpdir=/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/test-support/jtreg_test_hotspot_jtreg_compiler_c2_irTests_TestIfMinMax_java/tmp \\<br>
        -Djava.library.path=/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/images/test/hotspot/jtreg/native \\<br>
        -XX:+UseShenandoahGC \\<br>
        com.sun.javatest.regtest.agent.MainWrapper /local/home/joshcao/jdk/jdk/build/linux-x86_64-server-fastdebug/test-support/jtreg_test_hotspot_jtreg_compiler_c2_irTests_TestIfMinMax_java/compiler/c2/irTests/TestIfMinMax.d/main.0.jta<br>
result: Passed. Execution successful</div>
```
<p></p>
<p><span style="font-size: 12pt;"><br>
</span></p>
<p><span style="font-size: 12pt;"></p>
<div>When specifying `-XX:+UseShendoahGC`, I see</div>
<div>`-Dtest.java.opts=-XX:+UseShenandoahGC`. I would have expected that the</div>
<div>`-XX:+UseShenandoahGC` would propagate to the test VM. Any recommendations on</div>
<div>how to add Shenandoah flags to the jtreg test?</div>
<div><br>
</div>
<br>
<span></span></span>
<p></p>
<p><span><span></span></span></p>
</div>
</body>
</html>