[LLVMdev] Float undef value propagation
Hal Finkel
hfinkel at anl.gov
Tue Dec 10 16:40:58 PST 2013
----- Original Message -----
> From: "Philip Reames" <listmail at philipreames.com>
> To: llvmdev at cs.uiuc.edu
> Sent: Tuesday, December 10, 2013 2:55:36 PM
> Subject: Re: [LLVMdev] Float undef value propagation
>
>
>
> On 12/9/13 2:13 PM, Raoux, Thomas F wrote:
>
>
>
>
>
> Constant propagation pass generates constant expression when undef is
> used in float instructions instead of propagating the undef value.
>
>
>
> ; Function Attrs: nounwind
>
> define float @_Z1fv() #0 {
>
> entry:
>
> %add = fadd fast float undef, 2.000000e+00
>
> ret float %add
>
> }
>
>
>
> Becomes:
>
>
>
> ; Function Attrs: nounwind
>
> define float @_Z1fv() #0 {
>
> entry:
>
> ret float fadd (float undef, float 2.000000e+00)
>
> }
>
>
>
> Is it safe to transform “%add = fadd fast float undef, 2.000000e+00”
> to “undef”? Is there a reason why constant propagation pass doesn’t
> do this transformation? I'm not totally sure this is safe. Not
> saying it isn't, but the wording around undef and bit patterns in
> the language spec is concerning me. Could there be a case where some
> bit of the result is known given only one constant argument? I'm not
> familiar enough with the floating point semantics of LLVM's IR, but
> suspect there might be such a case. A few cases worth thinking
> about: undef + max_float, undef + NAN (signaling or non-signalling).
> If someone more familiar with floating point knows better, please
> feel free to chime in.
Out of curosity, do we currently perform this transformation when -enable-unsafe-fp-math is specified (-ffast-math from Clang)?
-Hal
>
> On the other hand, the following transformation is definitely safe:
>
>
> define float @_Z1fv() #0 {
>
> entry:
>
> ret 2.000000e+00 }
> (undef could be zero, thus result of the add is the second argument)
>
> If we don't apply that transform, we probably should. (Well, assuming
> there's not some normalization/rounding trap here. I don't *think*
> there is, but I'm not totally sure.)
>
> Yours,
> Philip
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
--
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
More information about the llvm-dev
mailing list