[PATCH] D28928: [ValueTracking] Implement SignBitMustBeZero correctly for sqrt.

Justin Lebar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 25 16:18:22 PST 2017


jlebar added inline comments.


================
Comment at: llvm/test/Transforms/InstSimplify/floating-point-arithmetic.ll:237
+  %sqrt = call nnan nsz float @llvm.sqrt.f32(float %a)
+  %fabs = call float @llvm.fabs.f32(float %sqrt)
+  ret float %fabs
----------------
efriedma wrote:
> jlebar wrote:
> > efriedma wrote:
> > > I'm not convinced this transform is legal without an nsz flag on the fabs...
> > > 
> > > Patch is fine otherwise.
> > I thought we talked about this above and established that, because fabs is a floating-point op and here its input comes from an nsz op, we can assume that the sign of the zero is "insignificant".  My understanding was that only if we have a non-fp op involved do things become complicated.
> > 
> > Maybe this would be easier on IRC?  Please ping me and Hal.
> Here's what I understand how you're looking at this from this thread:
> 
> 1. nsz fabs() can return -0.0.
> 2. bitcasting a float to an int "freezes" the sign bit (it can be either set or unset, but it's consistent).
> 3. Floating-point operations whose operand is, directly or indirectly, an nsz instruction, have indeterminate signed zeros.
> 
> I think 3 might be a bit too aggressive; it seems like a good idea to enforce the invariant that in non-fast-math code, fabs(x) never has the sign bit set.  With this patch, that breaks if you use a library compiled with fast-math to produce x.  
> 
> That said, mixing fast-math and non-fast-math code is likely to be pretty infrequent, so maybe we shouldn't worry about it.  Feel free to commit as-is.
Okay, will do, thanks.

FWIW I totally see your point, and personally I don't feel particularly strongly about this.  But I also don't think we have a particularly clear idea about how we want this to work at the moment.  So...yeah.

Thanks again.


https://reviews.llvm.org/D28928





More information about the llvm-commits mailing list