This repository has been archived by the owner. It is now read-only.
Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
8252219: C2: Randomize IGVN worklist for stress testing
Add 'StressIGVN' option to let C2 randomize IGVN worklist order. When enabled, the worklist is shuffled before each main run of the IGVN loop. Also add 'StressSeed=N' option to specify the seed. If the seed is not specified, a random one is generated. In either case, the seed is logged if 'LogCompilation' is enabled. The new options are declared as production+diagnostic for consistency with the existing 'StressLCM' and 'StressGCM' options. Reviewed-by: kvn, chagedorn, thartmann
- Loading branch information
Showing
with
229 additions
and 5 deletions.
- +8 −0 src/hotspot/share/opto/c2_globals.hpp
- +22 −2 src/hotspot/share/opto/compile.cpp
- +3 −1 src/hotspot/share/opto/compile.hpp
- +11 −0 src/hotspot/share/opto/phaseX.cpp
- +3 −0 src/hotspot/share/opto/phaseX.hpp
- +2 −2 src/hotspot/share/runtime/os.cpp
- +1 −0 src/hotspot/share/runtime/os.hpp
- +44 −0 test/hotspot/jtreg/compiler/arguments/TestStressIGVNOptions.java
- +64 −0 test/hotspot/jtreg/compiler/debug/TestGenerateStressSeed.java
- +71 −0 test/hotspot/jtreg/compiler/debug/TestStressIGVN.java
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@@ -0,0 +1,44 @@ | ||
/* | ||
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. | ||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
* | ||
* This code is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License version 2 only, as | ||
* published by the Free Software Foundation. | ||
* | ||
* This code is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* version 2 for more details (a copy is included in the LICENSE file that | ||
* accompanied this code). | ||
* | ||
* You should have received a copy of the GNU General Public License version | ||
* 2 along with this work; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
* | ||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
* or visit www.oracle.com if you need additional information or have any | ||
* questions. | ||
*/ | ||
|
||
/* | ||
* @test | ||
* @bug 8252219 | ||
* @requires vm.compiler2.enabled | ||
* @summary Tests that different combinations of the options -XX:+StressIGVN and | ||
* -XX:StressSeed=N are accepted. | ||
* @run main/othervm -XX:+StressIGVN | ||
* compiler.arguments.TestStressIGVNOptions | ||
* @run main/othervm -XX:+StressIGVN -XX:StressSeed=42 | ||
* compiler.arguments.TestStressIGVNOptions | ||
*/ | ||
|
||
package compiler.arguments; | ||
|
||
public class TestStressIGVNOptions { | ||
|
||
static public void main(String[] args) { | ||
System.out.println("Passed"); | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@@ -0,0 +1,64 @@ | ||
/* | ||
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. | ||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
* | ||
* This code is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License version 2 only, as | ||
* published by the Free Software Foundation. | ||
* | ||
* This code is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* version 2 for more details (a copy is included in the LICENSE file that | ||
* accompanied this code). | ||
* | ||
* You should have received a copy of the GNU General Public License version | ||
* 2 along with this work; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
* | ||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
* or visit www.oracle.com if you need additional information or have any | ||
* questions. | ||
*/ | ||
|
||
package compiler.debug; | ||
|
||
import java.nio.file.Paths; | ||
import jdk.test.lib.process.OutputAnalyzer; | ||
import jdk.test.lib.process.ProcessTools; | ||
import jdk.test.lib.Asserts; | ||
|
||
/* | ||
* @test | ||
* @bug 8252219 | ||
* @requires vm.compiler2.enabled | ||
* @summary Tests that using -XX:+StressIGVN without -XX:StressSeed=N generates | ||
* and logs a random seed. | ||
* @library /test/lib / | ||
* @run driver compiler.debug.TestGenerateStressSeed | ||
*/ | ||
|
||
public class TestGenerateStressSeed { | ||
|
||
static void sum(int n) { | ||
int acc = 0; | ||
for (int i = 0; i < n; i++) acc += i; | ||
System.out.println(acc); | ||
} | ||
|
||
public static void main(String[] args) throws Exception { | ||
if (args.length == 0) { | ||
String className = TestGenerateStressSeed.class.getName(); | ||
String log = "test.log"; | ||
String[] procArgs = { | ||
"-Xcomp", "-XX:-TieredCompilation", | ||
"-XX:CompileOnly=" + className + "::sum", "-XX:+StressIGVN", | ||
"-XX:+LogCompilation", "-XX:LogFile=" + log, className, "10"}; | ||
ProcessTools.createJavaProcessBuilder(procArgs).start().waitFor(); | ||
new OutputAnalyzer(Paths.get(log)) | ||
.shouldContain("stress_test seed"); | ||
} else if (args.length > 0) { | ||
sum(Integer.parseInt(args[0])); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@@ -0,0 +1,71 @@ | ||
/* | ||
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. | ||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
* | ||
* This code is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License version 2 only, as | ||
* published by the Free Software Foundation. | ||
* | ||
* This code is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* version 2 for more details (a copy is included in the LICENSE file that | ||
* accompanied this code). | ||
* | ||
* You should have received a copy of the GNU General Public License version | ||
* 2 along with this work; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
* | ||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
* or visit www.oracle.com if you need additional information or have any | ||
* questions. | ||
*/ | ||
|
||
package compiler.debug; | ||
|
||
import jdk.test.lib.process.OutputAnalyzer; | ||
import jdk.test.lib.process.ProcessTools; | ||
import jdk.test.lib.Asserts; | ||
|
||
/* | ||
* @test | ||
* @bug 8252219 | ||
* @requires vm.compiler2.enabled | ||
* @summary Tests that compilations with the same seed yield the same IGVN | ||
* trace, and compilations with different seeds yield different IGVN | ||
* traces. | ||
* @library /test/lib / | ||
* @run driver compiler.debug.TestStressIGVN | ||
*/ | ||
|
||
public class TestStressIGVN { | ||
|
||
static String igvnTrace(int stressSeed) throws Exception { | ||
String className = TestStressIGVN.class.getName(); | ||
String[] procArgs = { | ||
"-Xcomp", "-XX:-TieredCompilation", | ||
"-XX:CompileOnly=" + className + "::sum", "-XX:+TraceIterativeGVN", | ||
"-XX:+StressIGVN", "-XX:StressSeed=" + stressSeed, | ||
className, "10"}; | ||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(procArgs); | ||
OutputAnalyzer out = new OutputAnalyzer(pb.start()); | ||
return out.getStdout(); | ||
} | ||
|
||
static void sum(int n) { | ||
int acc = 0; | ||
for (int i = 0; i < n; i++) acc += i; | ||
System.out.println(acc); | ||
} | ||
|
||
public static void main(String[] args) throws Exception { | ||
if (args.length == 0) { | ||
Asserts.assertEQ(igvnTrace(10), igvnTrace(10), | ||
"got different IGVN traces for the same seed"); | ||
Asserts.assertNE(igvnTrace(10), igvnTrace(20), | ||
"got the same IGVN trace for different seeds"); | ||
} else if (args.length > 0) { | ||
sum(Integer.parseInt(args[0])); | ||
} | ||
} | ||
} |