[PATCH] D18701: [ARM] Adding IEEE-754 SIMD detection to loop vectorizer

Renato Golin via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 14 07:21:02 PDT 2016


rengolin added inline comments.

================
Comment at: lib/Transforms/Vectorize/LoopVectorize.cpp:4727
@@ +4726,3 @@
+      } else if (it->getType()->isFloatingPointTy() &&
+                (CI || it->isBinaryOp() || it->isCast() || it->isShift()) &&
+                !it->hasUnsafeAlgebra()) {
----------------
hfinkel wrote:
> rengolin wrote:
> > hfinkel wrote:
> > > I don't understand why you have the `(CI || it->isBinaryOp() || it->isCast() || it->isShift())` - why does it matter what kind of operation it is? And do we have any floating-point shifts? If you specifically want to include casts, do you also specifically need to pick up loads and stores?
> > We don't want to get loads and stores because they're normally safe anyway. That's why I'm using the "else if".
> > 
> > But also I don't want to get MOVs and shuffles either, since there's no chance they'll change the semantics or precision unless it's specifically requested (widening/shortening, type change, etc). So I just selected everything else. :)
> > 
> > Function calls and binary operations are obvious. Casts may change the type, so they may end up as the case above. I don't know of any FP shifts, so that was probably over the top.
> > 
> > I think it should be safe to do:
> > 
> >     } else if (it->getType()->isFloatingPointTy() &&
> >                  (CI || it->isBinaryOp()) &&
> >                  !it->hasUnsafeAlgebra()) {
> > 
> That makes sense to me. We should add an associated note to the declaration of isFPVectorizationPotentiallyUnsafe indicating this. Something like this perhaps:
> 
>   // This applies to floating-point math operations and calls, not memory operations, shuffles, or casts.
> 
Will do, thanks!


http://reviews.llvm.org/D18701





More information about the llvm-commits mailing list