8367028: compiler/c2/irTests/TestFloat16ScalarOperations.java failing intermittently because of constant folding

Reviewed-by: chagedorn, syan, rcastanedalo
This commit is contained in:
Emanuel Peter 2025-12-09 12:45:36 +00:00
parent 830c4d3b19
commit a4eb57c5ec

View File

@ -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<Float> 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;
}