diff --git a/test/hotspot/jtreg/compiler/c2/irTests/TestFloat16ScalarOperations.java b/test/hotspot/jtreg/compiler/c2/irTests/TestFloat16ScalarOperations.java index c8ee5e730fa..445fef5e55a 100644 --- a/test/hotspot/jtreg/compiler/c2/irTests/TestFloat16ScalarOperations.java +++ b/test/hotspot/jtreg/compiler/c2/irTests/TestFloat16ScalarOperations.java @@ -68,6 +68,15 @@ public class TestFloat16ScalarOperations { private static final Float16 RANDOM4 = Float16.valueOf(genF.next()); private static final Float16 RANDOM5 = Float16.valueOf(genF.next()); + // We have to ensure that the constants are not special values that lead the operations to + // constant fold. For example "x + 0" could constant fold to "x", so we need to avoid that + // the add constant is zero. + private static Generator genSmallRangeF = G.uniformFloats(0.1f, 0.9f); + private static final Float16 RANDOM_CON_ADD = Float16.valueOf(genSmallRangeF.next()); + private static final Float16 RANDOM_CON_SUB = Float16.valueOf(genSmallRangeF.next()); + private static final Float16 RANDOM_CON_MUL = Float16.valueOf(genSmallRangeF.next()); + private static final Float16 RANDOM_CON_DIV = Float16.valueOf(genSmallRangeF.next()); + private static Float16 RANDOM1_VAR = RANDOM1; private static Float16 RANDOM2_VAR = RANDOM2; private static Float16 RANDOM3_VAR = RANDOM3; @@ -435,10 +444,10 @@ public class TestFloat16ScalarOperations { @Warmup(10000) public short testRandomFP16ConstantPatternSet1() { short res = 0; - res += Float.floatToFloat16(RANDOM1_VAR.floatValue() + RANDOM2.floatValue()); - res += Float.floatToFloat16(RANDOM2_VAR.floatValue() - RANDOM3.floatValue()); - res += Float.floatToFloat16(RANDOM3_VAR.floatValue() * RANDOM4.floatValue()); - res += Float.floatToFloat16(RANDOM4_VAR.floatValue() / RANDOM5.floatValue()); + res += Float.floatToFloat16(RANDOM1_VAR.floatValue() + RANDOM_CON_ADD.floatValue()); + res += Float.floatToFloat16(RANDOM2_VAR.floatValue() - RANDOM_CON_SUB.floatValue()); + res += Float.floatToFloat16(RANDOM3_VAR.floatValue() * RANDOM_CON_MUL.floatValue()); + res += Float.floatToFloat16(RANDOM4_VAR.floatValue() / RANDOM_CON_DIV.floatValue()); return res; } @@ -456,10 +465,10 @@ public class TestFloat16ScalarOperations { @Warmup(10000) public short testRandomFP16ConstantPatternSet2() { short res = 0; - res += Float.floatToFloat16(RANDOM2.floatValue() + RANDOM1_VAR.floatValue()); - res += Float.floatToFloat16(RANDOM3.floatValue() - RANDOM2_VAR.floatValue()); - res += Float.floatToFloat16(RANDOM4.floatValue() * RANDOM3_VAR.floatValue()); - res += Float.floatToFloat16(RANDOM5.floatValue() / RANDOM4_VAR.floatValue()); + res += Float.floatToFloat16(RANDOM_CON_ADD.floatValue() + RANDOM1_VAR.floatValue()); + res += Float.floatToFloat16(RANDOM_CON_SUB.floatValue() - RANDOM2_VAR.floatValue()); + res += Float.floatToFloat16(RANDOM_CON_MUL.floatValue() * RANDOM3_VAR.floatValue()); + res += Float.floatToFloat16(RANDOM_CON_DIV.floatValue() / RANDOM4_VAR.floatValue()); return res; }