mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8148159: [TESTBUG] TestCompilerDirectivesCompatibility tests fails on non-tiered server VMs
Add whitebox for checking available compilers Reviewed-by: kvn
This commit is contained in:
parent
7c3120b3da
commit
e09bb29c2d
5 changed files with 94 additions and 84 deletions
|
@ -644,12 +644,12 @@ WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobjec
|
|||
return (mh->queued_for_compilation() || nm != NULL);
|
||||
WB_END
|
||||
|
||||
WB_ENTRY(jboolean, WB_ShouldPrintAssembly(JNIEnv* env, jobject o, jobject method))
|
||||
WB_ENTRY(jboolean, WB_ShouldPrintAssembly(JNIEnv* env, jobject o, jobject method, jint comp_level))
|
||||
jmethodID jmid = reflected_method_to_jmid(thread, env, method);
|
||||
CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
|
||||
|
||||
methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
|
||||
DirectiveSet* directive = DirectivesStack::getMatchingDirective(mh, CompileBroker::compiler(CompLevel_simple));
|
||||
DirectiveSet* directive = DirectivesStack::getMatchingDirective(mh, CompileBroker::compiler(comp_level));
|
||||
bool result = directive->PrintAssemblyOption;
|
||||
DirectivesStack::release(directive);
|
||||
|
||||
|
@ -1592,7 +1592,7 @@ static JNINativeMethod methods[] = {
|
|||
CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)I",
|
||||
(void*)&WB_MatchesInline},
|
||||
{CC"shouldPrintAssembly",
|
||||
CC"(Ljava/lang/reflect/Executable;)Z",
|
||||
CC"(Ljava/lang/reflect/Executable;I)Z",
|
||||
(void*)&WB_ShouldPrintAssembly},
|
||||
|
||||
{CC"isConstantVMFlag", CC"(Ljava/lang/String;)Z", (void*)&WB_IsConstantVMFlag},
|
||||
|
|
|
@ -24,25 +24,26 @@
|
|||
/*
|
||||
* @test TestCompilerDirectivesCompatibilityBase
|
||||
* @bug 8137167
|
||||
* @library /testlibrary /test/lib
|
||||
* @library /testlibrary /test/lib /
|
||||
* @modules java.base/sun.misc
|
||||
* java.compiler
|
||||
* java.management
|
||||
* @build jdk.test.lib.*
|
||||
* @build jdk.test.lib.dcmd.*
|
||||
* @build sun.hotspot.WhiteBox
|
||||
* @run main ClassFileInstaller sun.hotspot.WhiteBox
|
||||
* jdk.test.lib.dcmd.*
|
||||
* sun.hotspot.WhiteBox
|
||||
* compiler.testlibrary.CompilerUtils
|
||||
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
|
||||
* sun.hotspot.WhiteBox$WhiteBoxPermission
|
||||
* @run testng/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI TestCompilerDirectivesCompatibilityBase
|
||||
* @run testng/othervm -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI TestCompilerDirectivesCompatibilityBase
|
||||
* @summary Test compiler control compatibility with compile command
|
||||
*/
|
||||
|
||||
import compiler.testlibrary.CompilerUtils;
|
||||
import compiler.whitebox.CompilerWhiteBoxTest;
|
||||
import jdk.test.lib.dcmd.CommandExecutor;
|
||||
import jdk.test.lib.dcmd.JMXExecutor;
|
||||
|
||||
import org.testng.annotations.Test;
|
||||
import org.testng.Assert;
|
||||
|
||||
import sun.hotspot.WhiteBox;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
|
@ -64,32 +65,38 @@ public class TestCompilerDirectivesCompatibilityBase {
|
|||
method = getMethod(TestCompilerDirectivesCompatibilityBase.class, "helper");
|
||||
nomatch = getMethod(TestCompilerDirectivesCompatibilityBase.class, "another");
|
||||
|
||||
testCompatibility(executor);
|
||||
int[] levels = CompilerUtils.getAvailableCompilationLevels();
|
||||
for (int complevel : levels) {
|
||||
// Only test the major compilers, ignore profiling levels
|
||||
if (complevel == CompilerWhiteBoxTest.COMP_LEVEL_SIMPLE || complevel == CompilerWhiteBoxTest.COMP_LEVEL_FULL_OPTIMIZATION){
|
||||
testCompatibility(executor, complevel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void testCompatibility(CommandExecutor executor) throws Exception {
|
||||
public void testCompatibility(CommandExecutor executor, int comp_level) throws Exception {
|
||||
|
||||
// Call all validation twice to catch error when overwriting a directive
|
||||
// Flag is default off
|
||||
expect(!WB.getBooleanVMFlag("PrintAssembly"));
|
||||
expect(!WB.shouldPrintAssembly(method));
|
||||
expect(!WB.shouldPrintAssembly(nomatch));
|
||||
expect(!WB.shouldPrintAssembly(method));
|
||||
expect(!WB.shouldPrintAssembly(nomatch));
|
||||
expect(!WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
|
||||
// load directives that turn it on
|
||||
executor.execute("Compiler.directives_add " + control_on);
|
||||
expect(WB.shouldPrintAssembly(method));
|
||||
expect(!WB.shouldPrintAssembly(nomatch));
|
||||
expect(WB.shouldPrintAssembly(method));
|
||||
expect(!WB.shouldPrintAssembly(nomatch));
|
||||
expect(WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
expect(WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
|
||||
// remove and see that it is true again
|
||||
executor.execute("Compiler.directives_remove");
|
||||
expect(!WB.shouldPrintAssembly(method));
|
||||
expect(!WB.shouldPrintAssembly(nomatch));
|
||||
expect(!WB.shouldPrintAssembly(method));
|
||||
expect(!WB.shouldPrintAssembly(nomatch));
|
||||
expect(!WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
}
|
||||
|
||||
public void expect(boolean test) throws Exception {
|
||||
|
|
|
@ -24,16 +24,17 @@
|
|||
/*
|
||||
* @test TestCompilerDirectivesCompatibilityCommandOff
|
||||
* @bug 8137167
|
||||
* @library /testlibrary /test/lib
|
||||
* @library /testlibrary /test/lib /
|
||||
* @modules java.base/sun.misc
|
||||
* java.compiler
|
||||
* java.management
|
||||
* @build jdk.test.lib.*
|
||||
* @build jdk.test.lib.dcmd.*
|
||||
* @build sun.hotspot.WhiteBox
|
||||
* @run main ClassFileInstaller sun.hotspot.WhiteBox
|
||||
* jdk.test.lib.dcmd.*
|
||||
* sun.hotspot.WhiteBox
|
||||
* compiler.testlibrary.CompilerUtils
|
||||
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
|
||||
* sun.hotspot.WhiteBox$WhiteBoxPermission
|
||||
* @run testng/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
|
||||
* @run testng/othervm -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions
|
||||
* -XX:-PrintAssembly -XX:CompileCommand=option,*.helper,bool,PrintAssembly,false
|
||||
* -XX:+WhiteBoxAPI TestCompilerDirectivesCompatibilityCommandOff
|
||||
* @summary Test compiler control compatibility with compile command
|
||||
|
@ -55,27 +56,27 @@ import java.util.Objects;
|
|||
|
||||
public class TestCompilerDirectivesCompatibilityCommandOff extends TestCompilerDirectivesCompatibilityBase {
|
||||
|
||||
public void testCompatibility(CommandExecutor executor) throws Exception {
|
||||
public void testCompatibility(CommandExecutor executor, int comp_level) throws Exception {
|
||||
|
||||
// Call all validation twice to catch error when overwriting a directive
|
||||
// Flag is default off
|
||||
expect(!WB.shouldPrintAssembly(method));
|
||||
expect(!WB.shouldPrintAssembly(nomatch));
|
||||
expect(!WB.shouldPrintAssembly(method));
|
||||
expect(!WB.shouldPrintAssembly(nomatch));
|
||||
expect(!WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
|
||||
// load directives that turn it on
|
||||
executor.execute("Compiler.directives_add " + control_on);
|
||||
expect(WB.shouldPrintAssembly(method));
|
||||
expect(!WB.shouldPrintAssembly(nomatch));
|
||||
expect(WB.shouldPrintAssembly(method));
|
||||
expect(!WB.shouldPrintAssembly(nomatch));
|
||||
expect(WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
expect(WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
|
||||
// remove and see that it is false again
|
||||
executor.execute("Compiler.directives_remove");
|
||||
expect(!WB.shouldPrintAssembly(method));
|
||||
expect(!WB.shouldPrintAssembly(nomatch));
|
||||
expect(!WB.shouldPrintAssembly(method));
|
||||
expect(!WB.shouldPrintAssembly(nomatch));
|
||||
expect(!WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,16 +24,17 @@
|
|||
/*
|
||||
* @test TestCompilerDirectivesCompatibilityCommandOn
|
||||
* @bug 8137167
|
||||
* @library /testlibrary /test/lib
|
||||
* @library /testlibrary /test/lib /
|
||||
* @modules java.base/sun.misc
|
||||
* java.compiler
|
||||
* java.management
|
||||
* @build jdk.test.lib.*
|
||||
* @build jdk.test.lib.dcmd.*
|
||||
* @build sun.hotspot.WhiteBox
|
||||
* @run main ClassFileInstaller sun.hotspot.WhiteBox
|
||||
* jdk.test.lib.dcmd.*
|
||||
* sun.hotspot.WhiteBox
|
||||
* compiler.testlibrary.CompilerUtils
|
||||
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
|
||||
* sun.hotspot.WhiteBox$WhiteBoxPermission
|
||||
* @run testng/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
|
||||
* @run testng/othervm -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions
|
||||
* -XX:-PrintAssembly -XX:CompileCommand=print,*.* -XX:+WhiteBoxAPI
|
||||
* TestCompilerDirectivesCompatibilityCommandOn
|
||||
* @summary Test compiler control compatibility with compile command
|
||||
|
@ -55,27 +56,27 @@ import java.util.Objects;
|
|||
|
||||
public class TestCompilerDirectivesCompatibilityCommandOn extends TestCompilerDirectivesCompatibilityBase{
|
||||
|
||||
public void testCompatibility(CommandExecutor executor) throws Exception {
|
||||
public void testCompatibility(CommandExecutor executor, int comp_level) throws Exception {
|
||||
|
||||
// Call all validation twice to catch error when overwriting a directive
|
||||
// Flag is default on
|
||||
expect(WB.shouldPrintAssembly(method));
|
||||
expect(WB.shouldPrintAssembly(nomatch));
|
||||
expect(WB.shouldPrintAssembly(method));
|
||||
expect(WB.shouldPrintAssembly(nomatch));
|
||||
expect(WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
expect(WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
|
||||
// load directives that turn it off
|
||||
executor.execute("Compiler.directives_add " + control_off);
|
||||
expect(!WB.shouldPrintAssembly(method));
|
||||
expect(WB.shouldPrintAssembly(nomatch));
|
||||
expect(!WB.shouldPrintAssembly(method));
|
||||
expect(WB.shouldPrintAssembly(nomatch));
|
||||
expect(!WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
|
||||
// remove and see that it is true again
|
||||
executor.execute("Compiler.directives_remove");
|
||||
expect(WB.shouldPrintAssembly(method));
|
||||
expect(WB.shouldPrintAssembly(nomatch));
|
||||
expect(WB.shouldPrintAssembly(method));
|
||||
expect(WB.shouldPrintAssembly(nomatch));
|
||||
expect(WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
expect(WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,16 +24,17 @@
|
|||
/*
|
||||
* @test TestCompilerDirectivesCompatibilityFlag
|
||||
* @bug 8137167
|
||||
* @library /testlibrary /test/lib
|
||||
* @library /testlibrary /test/lib /
|
||||
* @modules java.base/sun.misc
|
||||
* java.compiler
|
||||
* java.management
|
||||
* @build jdk.test.lib.*
|
||||
* @build jdk.test.lib.dcmd.*
|
||||
* @build sun.hotspot.WhiteBox
|
||||
* @run main ClassFileInstaller sun.hotspot.WhiteBox
|
||||
* jdk.test.lib.dcmd.*
|
||||
* sun.hotspot.WhiteBox
|
||||
* compiler.testlibrary.CompilerUtils
|
||||
* @run driver ClassFileInstaller sun.hotspot.WhiteBox
|
||||
* sun.hotspot.WhiteBox$WhiteBoxPermission
|
||||
* @run testng/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
|
||||
* @run testng/othervm -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions
|
||||
* -XX:+PrintAssembly -XX:+WhiteBoxAPI TestCompilerDirectivesCompatibilityFlag
|
||||
* @summary Test compiler control compatibility with compile command
|
||||
*/
|
||||
|
@ -54,28 +55,28 @@ import java.util.Objects;
|
|||
|
||||
public class TestCompilerDirectivesCompatibilityFlag extends TestCompilerDirectivesCompatibilityBase {
|
||||
|
||||
public void testCompatibility(CommandExecutor executor) throws Exception {
|
||||
public void testCompatibility(CommandExecutor executor, int comp_level) throws Exception {
|
||||
|
||||
// Call all validation twice to catch error when overwriting a directive
|
||||
// Flag is default on
|
||||
expect(WB.getBooleanVMFlag("PrintAssembly"));
|
||||
expect(WB.shouldPrintAssembly(method));
|
||||
expect(WB.shouldPrintAssembly(nomatch));
|
||||
expect(WB.shouldPrintAssembly(method));
|
||||
expect(WB.shouldPrintAssembly(nomatch));
|
||||
expect(WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
expect(WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
|
||||
// load directives that turn it off
|
||||
executor.execute("Compiler.directives_add " + control_off);
|
||||
expect(!WB.shouldPrintAssembly(method));
|
||||
expect(WB.shouldPrintAssembly(nomatch));
|
||||
expect(!WB.shouldPrintAssembly(method));
|
||||
expect(WB.shouldPrintAssembly(nomatch));
|
||||
expect(!WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
expect(!WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
|
||||
// remove and see that it is true again
|
||||
executor.execute("Compiler.directives_remove");
|
||||
expect(WB.shouldPrintAssembly(method));
|
||||
expect(WB.shouldPrintAssembly(nomatch));
|
||||
expect(WB.shouldPrintAssembly(method));
|
||||
expect(WB.shouldPrintAssembly(nomatch));
|
||||
expect(WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
expect(WB.shouldPrintAssembly(method, comp_level));
|
||||
expect(WB.shouldPrintAssembly(nomatch, comp_level));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue