< prev index next >

test/hotspot/jtreg/compiler/lib/ir_framework/test/TestVM.java

Print this page
@@ -99,10 +99,11 @@
      private static final boolean SHUFFLE_TESTS = Boolean.parseBoolean(System.getProperty("ShuffleTests", "true"));
      // Use separate flag as VERIFY_IR could have been set by user but due to other flags it was disabled by flag VM.
      private static final boolean PRINT_VALID_IR_RULES = Boolean.getBoolean("ShouldDoIRVerification");
      protected static final long PER_METHOD_TRAP_LIMIT = (Long)WHITE_BOX.getVMFlag("PerMethodTrapLimit");
      protected static final boolean PROFILE_INTERPRETER = (Boolean)WHITE_BOX.getVMFlag("ProfileInterpreter");
+     protected static final boolean DEOPT_BARRIERS_ALOT = (Boolean)WHITE_BOX.getVMFlag("DeoptimizeNMethodBarriersALot");
      private static final boolean FLIP_C1_C2 = Boolean.getBoolean("FlipC1C2");
      private static final boolean IGNORE_COMPILER_CONTROLS = Boolean.getBoolean("IgnoreCompilerControls");
  
      private final HashMap<Method, DeclaredTest> declaredTests = new HashMap<>();
      private final List<AbstractTest> allTests = new ArrayList<>();

@@ -251,12 +252,15 @@
          checkForcedCompilationsCompleted();
          runTests();
      }
  
      private void setupTests() {
-         for (Class<?> clazz : testClass.getDeclaredClasses()) {
-             checkAnnotationsInClass(clazz, "inner");
+         // TODO remove this once JDK-8273591 is fixed
+         if (!IGNORE_COMPILER_CONTROLS) {
+             for (Class<?> clazz : testClass.getDeclaredClasses()) {
+                 checkAnnotationsInClass(clazz, "inner");
+             }
          }
          if (DUMP_REPLAY) {
              addReplay();
          }
  

@@ -932,28 +936,27 @@
      public static boolean isCompiledAtLevel(Method m, CompLevel compLevel) {
          return compiledAtLevel(m, compLevel) == TriState.Yes;
      }
  
      public static void assertDeoptimizedByC1(Method m) {
-         if (notUnstableDeoptAssertion(m, CompLevel.C1_SIMPLE)) {
-             TestRun.check(compiledByC1(m) != TriState.Yes || PER_METHOD_TRAP_LIMIT == 0 || !PROFILE_INTERPRETER,
-                           m + " should have been deoptimized by C1");
+         if (isStableDeopt(m, CompLevel.C1_SIMPLE)) {
+             TestRun.check(compiledByC1(m) != TriState.Yes, m + " should have been deoptimized by C1");
          }
      }
  
      public static void assertDeoptimizedByC2(Method m) {
-         if (notUnstableDeoptAssertion(m, CompLevel.C2)) {
-             TestRun.check(compiledByC2(m) != TriState.Yes || PER_METHOD_TRAP_LIMIT == 0 || !PROFILE_INTERPRETER,
-                           m + " should have been deoptimized by C2");
+         if (isStableDeopt(m, CompLevel.C2)) {
+             TestRun.check(compiledByC2(m) != TriState.Yes, m + " should have been deoptimized by C2");
          }
      }
  
      /**
       * Some VM flags could make the deopt assertions unstable.
       */
-     private static boolean notUnstableDeoptAssertion(Method m, CompLevel level) {
+     public static boolean isStableDeopt(Method m, CompLevel level) {
          return (USE_COMPILER && !XCOMP && !IGNORE_COMPILER_CONTROLS && !TEST_C1 &&
+                 PER_METHOD_TRAP_LIMIT != 0 && PROFILE_INTERPRETER && !DEOPT_BARRIERS_ALOT &&
                  (!EXCLUDE_RANDOM || WHITE_BOX.isMethodCompilable(m, level.getValue(), false)));
      }
  
      public static void assertCompiledByC1(Method m) {
          TestRun.check(compiledByC1(m) != TriState.No, m + " should have been C1 compiled");

@@ -1005,11 +1008,11 @@
                      return TriState.Yes;
                  }
                  default -> throw new TestRunException("compiledAtLevel() should not be called with " + level);
              }
          }
-         if (!USE_COMPILER || XCOMP || TEST_C1 || IGNORE_COMPILER_CONTROLS || FLIP_C1_C2 ||
+         if (!USE_COMPILER || XCOMP || TEST_C1 || IGNORE_COMPILER_CONTROLS || FLIP_C1_C2 || DEOPT_BARRIERS_ALOT ||
              (EXCLUDE_RANDOM && !WHITE_BOX.isMethodCompilable(m, level.getValue(), false))) {
              return TriState.Maybe;
          }
          return TriState.No;
      }
< prev index next >