@@ -68,6 +68,15 @@ public class TestFloat16ScalarOperations {
6868 private static final Float16 RANDOM4 = Float16 .valueOf (genF .next ());
6969 private static final Float16 RANDOM5 = Float16 .valueOf (genF .next ());
7070
71+ // We have to ensure that the constants are not special values that lead the operations to
72+ // constant fold. For example "x + 0" could constant fold to "x", so we need to avoid that
73+ // the add constant is zero.
74+ private static Generator <Float > genSmallRangeF = G .uniformFloats (0.1f , 0.9f );
75+ private static final Float16 RANDOM_CON_ADD = Float16 .valueOf (genSmallRangeF .next ());
76+ private static final Float16 RANDOM_CON_SUB = Float16 .valueOf (genSmallRangeF .next ());
77+ private static final Float16 RANDOM_CON_MUL = Float16 .valueOf (genSmallRangeF .next ());
78+ private static final Float16 RANDOM_CON_DIV = Float16 .valueOf (genSmallRangeF .next ());
79+
7180 private static Float16 RANDOM1_VAR = RANDOM1 ;
7281 private static Float16 RANDOM2_VAR = RANDOM2 ;
7382 private static Float16 RANDOM3_VAR = RANDOM3 ;
@@ -435,10 +444,10 @@ public void checkExactFP16ConstantPatterns(short actual) {
435444 @ Warmup (10000 )
436445 public short testRandomFP16ConstantPatternSet1 () {
437446 short res = 0 ;
438- res += Float .floatToFloat16 (RANDOM1_VAR .floatValue () + RANDOM2 .floatValue ());
439- res += Float .floatToFloat16 (RANDOM2_VAR .floatValue () - RANDOM3 .floatValue ());
440- res += Float .floatToFloat16 (RANDOM3_VAR .floatValue () * RANDOM4 .floatValue ());
441- res += Float .floatToFloat16 (RANDOM4_VAR .floatValue () / RANDOM5 .floatValue ());
447+ res += Float .floatToFloat16 (RANDOM1_VAR .floatValue () + RANDOM_CON_ADD .floatValue ());
448+ res += Float .floatToFloat16 (RANDOM2_VAR .floatValue () - RANDOM_CON_SUB .floatValue ());
449+ res += Float .floatToFloat16 (RANDOM3_VAR .floatValue () * RANDOM_CON_MUL .floatValue ());
450+ res += Float .floatToFloat16 (RANDOM4_VAR .floatValue () / RANDOM_CON_DIV .floatValue ());
442451 return res ;
443452 }
444453
@@ -456,10 +465,10 @@ public void checkRandomFP16ConstantPatternSet1(short actual) {
456465 @ Warmup (10000 )
457466 public short testRandomFP16ConstantPatternSet2 () {
458467 short res = 0 ;
459- res += Float .floatToFloat16 (RANDOM2 .floatValue () + RANDOM1_VAR .floatValue ());
460- res += Float .floatToFloat16 (RANDOM3 .floatValue () - RANDOM2_VAR .floatValue ());
461- res += Float .floatToFloat16 (RANDOM4 .floatValue () * RANDOM3_VAR .floatValue ());
462- res += Float .floatToFloat16 (RANDOM5 .floatValue () / RANDOM4_VAR .floatValue ());
468+ res += Float .floatToFloat16 (RANDOM_CON_ADD .floatValue () + RANDOM1_VAR .floatValue ());
469+ res += Float .floatToFloat16 (RANDOM_CON_SUB .floatValue () - RANDOM2_VAR .floatValue ());
470+ res += Float .floatToFloat16 (RANDOM_CON_MUL .floatValue () * RANDOM3_VAR .floatValue ());
471+ res += Float .floatToFloat16 (RANDOM_CON_DIV .floatValue () / RANDOM4_VAR .floatValue ());
463472 return res ;
464473 }
465474
0 commit comments