[PATCH] D50480: [LV] Vectorizing loops of arbitrary trip count without remainder under opt for size
Hideki Saito via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 8 17:15:45 PDT 2018
hsaito added inline comments.
================
Comment at: lib/Transforms/Vectorize/LoopVectorize.cpp:2663
+ // overflows: the vector induction variable will eventually wrap to zero given
+ // that it starts at zero and its Step is a power of two; the loop will then
+ // exit, with the last early-exit vector comparison also producing all-true.
----------------
I think there is a danger in assuming UF being a power of two. Granted that there may be other parts of LV already assuming it, I still wouldn't like to see any more of those being added. If new code is assuming power of two UF, it's best if we ensure that is really the case (e.g., when foldTailByMansking() is true, assert that UF is power of two). Better yet, check VF*UF is power of two here since that's the assumption this code has.
================
Comment at: lib/Transforms/Vectorize/LoopVectorize.cpp:2673
// unroll factor (number of SIMD instructions).
- Constant *Step = ConstantInt::get(TC->getType(), VF * UF);
Value *R = Builder.CreateURem(TC, Step, "n.mod.vf");
----------------
This Urem creation should be skipped if we aren't generating remainder.
================
Comment at: lib/Transforms/Vectorize/LoopVectorize.cpp:4977
+ return MaxVF;
+
+ return None;
----------------
I think we need to add
if (TC==0) { emit one kind of remark }
else { emit another kind of remark }
here ---- in order to match previous capability.
Repository:
rL LLVM
https://reviews.llvm.org/D50480
More information about the llvm-commits
mailing list