On May 11, 2007, at 08:26, Rahul wrote:
But for the following example
 int a = 1;
 int b = 2;
 int c = 3;
 c = c + a * b;
the MAC pattern is not getting recognized, instead it is still using
PLUS and MULT patterns.

In general, this transformation is not valid, as it has
different rounding behavior from the expression with the
+ and * operations. While fused multiply-add is a very
powerful instruction that can be helpful for both speed
and accuracy (especially accuracy exceeding native precision),
good algorithms may become unstable if fused multiply-add
is used when a*b+c is expected or vice versa.
So, implementing a builtin (conforming to C99's fma)
would seem the best approach. The -ffast-math option, or
preferably #pragma STDC CONTRACT ON, could be used to
enable the transformation.

  -Geert

Reply via email to