diff --git a/test/hotspot/jtreg/compiler/lib/ir_framework/TestFramework.java b/test/hotspot/jtreg/compiler/lib/ir_framework/TestFramework.java index 889bd39413bf7..be716b629cb83 100644 --- a/test/hotspot/jtreg/compiler/lib/ir_framework/TestFramework.java +++ b/test/hotspot/jtreg/compiler/lib/ir_framework/TestFramework.java @@ -593,27 +593,39 @@ private void installWhiteBox() { * Disable IR verification completely in certain cases. */ private void disableIRVerificationIfNotFeasible() { + if (!irVerificationPossible) { + return; + } + + boolean debugTest, irTest, nonWhiteListedTest; + + debugTest = Platform.isDebugBuild() && !Platform.isInt() && !Platform.isComp(); + irTest = hasIRAnnotations(); + // No IR verification is done if additional non-whitelisted JTreg VM or Javaoptions flag is specified. + List nonWhiteListedFlags = anyNonWhitelistedJTregVMAndJavaOptsFlags(); + nonWhiteListedTest = nonWhiteListedFlags.isEmpty(); + + irVerificationPossible = debugTest && irTest && nonWhiteListedTest; if (irVerificationPossible) { - irVerificationPossible = Platform.isDebugBuild() && !Platform.isInt() && !Platform.isComp(); - if (!irVerificationPossible) { - System.out.println("IR verification disabled due to not running a debug build (required for PrintIdeal" + - "and PrintOptoAssembly), running with -Xint, or -Xcomp (use warm-up of 0 instead)"); - return; - } + return; + } - irVerificationPossible = hasIRAnnotations(); - if (!irVerificationPossible) { - System.out.println("IR verification disabled due to test " + testClass + " not specifying any @IR annotations"); - return; - } + System.out.println("IR verification disabled due to:"); + if (!debugTest) { + System.out.println("\tnot running a debug build (required for PrintIdeal and PrintOptoAssembly), " + + "running with -Xint, or -Xcomp (use warm-up of 0 instead)"); + } - // No IR verification is done if additional non-whitelisted JTreg VM or Javaoptions flag is specified. - irVerificationPossible = onlyWhitelistedJTregVMAndJavaOptsFlags(); - if (!irVerificationPossible) { - System.out.println("IR verification disabled due to using non-whitelisted JTreg VM or Javaoptions flag(s)." - + System.lineSeparator()); - } + if (!irTest) { + System.out.println("\ttest " + testClass + " not specifying any @IR annotations"); } + + if (!nonWhiteListedTest) { + System.out.println("\tusing non-whitelisted JTreg VM or Javaoptions flag(s),"); + nonWhiteListedFlags.forEach((f) -> System.out.println("\t\t" + f)); + } + + System.out.println(""); } /** @@ -741,18 +753,19 @@ private boolean hasIRAnnotations() { return Arrays.stream(testClass.getDeclaredMethods()).anyMatch(m -> m.getAnnotationsByType(IR.class).length > 0); } - private boolean onlyWhitelistedJTregVMAndJavaOptsFlags() { + private List anyNonWhitelistedJTregVMAndJavaOptsFlags() { List flags = Arrays.stream(Utils.getTestJavaOpts()) .map(s -> s.replaceFirst("-XX:[+|-]?|-(?=[^D|^e])", "")) .collect(Collectors.toList()); + List nonWhiteListedFlags = new ArrayList(); for (String flag : flags) { // Property flags (prefix -D), -ea and -esa are whitelisted. if (!flag.startsWith("-D") && !flag.startsWith("-e") && JTREG_WHITELIST_FLAGS.stream().noneMatch(flag::contains)) { // Found VM flag that is not whitelisted - return false; + nonWhiteListedFlags.add(flag); } } - return true; + return nonWhiteListedFlags; } private void runTestVM(List additionalFlags) {