[llvm-commits] [PATCH][Fastmath, Instcombine] Enhancement of Fdiv
dag at cray.com
dag at cray.com
Fri Jan 11 14:47:36 PST 2013
Shuxin Yang <shuxin.llvm at gmail.com> writes:
> 1) reciprocal.patch:
> implement reciprocal rule:
> 1.1 X/C => X *(1/C) if 1/C is neither special value nor
> denormal.
>
> This rule could incur noticeable rounding errors (sometimes up
> to 0.001% -- one testing case
> in pollybench suite see a diff between 1.003 and 1.004, and the
> "huge" difference is caused
> by a single transformation X/1000 => X * 0.001).
Is this rule controlled by strict fp or other options? Users should be
able to disable it for precision.
> 2. fdiv.patch implement a slew of fdiv related rules:
>
> 2.1). (X/C1) / C2 => X * (1/(C2*C1))
Why not do (X/C1) / C2 => X / (C1 * C2) (under switch control) and let
1.1 clean it up if allowed by the previously-explained user switch?
> 2.2). X*C1 / C2 => X * (C1/C2)
This will need a strict or similar switch control for fp arithmetic.
> 2.3). (X/Y)/Z = > X/(Y*Z) (at least one of Y and Z is symbolic
> value)
> 2.4). Z/(X/Y) = > (Z*Y)/X
> 2.5). C1/(X*C2) => (C1/C2) / X
> 2.6). C1/(X/C2) => (C1*C2) / X
> 2.7) C1/(C2/X) => (C1/C2) * X
And all of these too.
Every single one of these transformations can change fp arithmetic
answers and thus we must have a way to disable them on the command line.
-David
More information about the llvm-commits
mailing list