RFR: 8215473: [lworld] Support for substitutability checks in C2

Tobias Hartmann tobias.hartmann at oracle.com
Fri Jan 25 15:23:43 UTC 2019


Hi Roland,

looks good.

Best regards,
Tobias

On 25.01.19 14:23, Roland Westrelin wrote:
> 
> Thanks for running more tests.
> 
>> I've run the valhalla tiers and found some failures with TestNewAcmp.java:
> 
> Right, I overlooked the tests at that are executed at the end. Patch
> below fixes it.
> 
> Roland.
> 
> diff --git a/test/hotspot/jtreg/compiler/valhalla/valuetypes/TestNewAcmp.java b/test/hotspot/jtreg/compiler/valhalla/valuetypes/TestNewAcmp.java
> --- a/test/hotspot/jtreg/compiler/valhalla/valuetypes/TestNewAcmp.java
> +++ b/test/hotspot/jtreg/compiler/valhalla/valuetypes/TestNewAcmp.java
> @@ -1538,7 +1538,12 @@
>              }
>          }
>  
> -        for (int i = 0; i < 10_000; ++i) {
> +        Method cmpAlwaysUnEqual3_m = getClass().getMethod("cmpAlwaysUnEqual3", Object.class);
> +        Method cmpAlwaysUnEqual4_m = getClass().getMethod("cmpAlwaysUnEqual4", Object.class);
> +        Method cmpSometimesEqual1_m = getClass().getMethod("cmpSometimesEqual1", Object.class);
> +        Method cmpSometimesEqual2_m = getClass().getMethod("cmpSometimesEqual2", Object.class);
> +        
> +        for (int i = 0; i < 20_000; ++i) {
>              Asserts.assertTrue(cmpAlwaysEqual1(args[1], args[1]));
>              Asserts.assertFalse(cmpAlwaysEqual2(args[1], args[1]));
>              Asserts.assertTrue(cmpAlwaysEqual3(args[1]));
> @@ -1546,12 +1551,36 @@
>  
>              Asserts.assertFalse(cmpAlwaysUnEqual1(args[1], args[2]));
>              Asserts.assertTrue(cmpAlwaysUnEqual2(args[1], args[2]));
> -            Asserts.assertFalse(cmpAlwaysUnEqual3(args[3]));
> -            Asserts.assertTrue(cmpAlwaysUnEqual4(args[3]));
> +            boolean compiled = WHITE_BOX.isMethodCompiled(cmpAlwaysUnEqual3_m, false);
> +            boolean res = cmpAlwaysUnEqual3(args[3]);
> +            if (ACmpOnValues != 3) {
> +                Asserts.assertFalse(res);
> +            } else if (compiled) {
> +                Asserts.assertTrue(res);
> +            }
> +            compiled = WHITE_BOX.isMethodCompiled(cmpAlwaysUnEqual4_m, false);
> +            res = cmpAlwaysUnEqual4(args[3]);
> +            if (ACmpOnValues != 3) {
> +                Asserts.assertTrue(res);
> +            } else if (compiled) {
> +                Asserts.assertFalse(res);
> +            }
>  
>              int idx = i % args.length;
> -            Asserts.assertEQ(cmpSometimesEqual1(args[idx]), args[idx] == null || !args[idx].getClass().isValue());
> -            Asserts.assertNE(cmpSometimesEqual2(args[idx]), args[idx] == null || !args[idx].getClass().isValue());
> +            compiled = WHITE_BOX.isMethodCompiled(cmpSometimesEqual1_m, false);
> +            res = cmpSometimesEqual1(args[idx]);
> +            if (ACmpOnValues != 3) {
> +                Asserts.assertEQ(res, args[idx] == null || !args[idx].getClass().isValue());
> +            } else if (compiled) {
> +                Asserts.assertTrue(res);
> +            }
> +            compiled = WHITE_BOX.isMethodCompiled(cmpSometimesEqual2_m, false);
> +            res = cmpSometimesEqual2(args[idx]);
> +            if (ACmpOnValues != 3) {
> +                Asserts.assertNE(res, args[idx] == null || !args[idx].getClass().isValue());
> +            } else if (compiled) {
> +                Asserts.assertFalse(res);
> +            }
>          }
>      }
>  
> 


More information about the valhalla-dev mailing list