[PATCH] D101836: [LoopVectorize] Enable strict reductions when allowReordering() returns false

David Sherwood via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed May 5 00:49:02 PDT 2021


david-arm added inline comments.


================
Comment at: llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:9660
+
+  return (all_of(LVL.getReductionVars(), [&](auto &Reduction) -> bool {
+    RecurrenceDescriptor RdxDesc = Reduction.second;
----------------
sdesmalen wrote:
> Why do all of the reductions have to be ordered for the LV to be able to vectorize FP math?
> (e.g. if there is an integer reduction and an ordered FP reduction, it would now choose not to vectorize based on this condition)
I guess it might be worth adding a test for this too then, i.e. having a loop with both an integer and FP reduction and ensure we vectorise with ordered reductions.


================
Comment at: llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:9783-9784
 
-  if (!Requirements.canVectorizeFPMath(Hints)) {
+  if (!Requirements.canVectorizeFPMath(Hints) &&
+      !canVectorizeOrderedFPMath(LVL, Hints)) {
     ORE->emit([&]() {
----------------
sdesmalen wrote:
> This condition is a bit odd. Should `canVectorizeOrderedFPMath` just contain the call to `Requirements.canVectorizeFPMath` instead? i.e. in order to vectorize ordered FP math, it must at least be able to vectorize FP math.
I think the existing canVectorizeFPMath function is badly named because it actually checks for reordering:

```  bool canVectorizeFPMath(const LoopVectorizeHints &Hints) const {
    return !ExactFPMathInst || Hints.allowReordering();
  }```

so the logic in Kerry's patch is something like this:

1. Is this an exact FP math instruction? If not -> vectorise, else
2. Do hints permit reordering? If so -> vectorise, else
3. Can we vectorise with ordered reductions? If not -> emit remark.

It probably is possible to combine these into a single LoopVectorizationLegality::canVectorizeFPMath function that does all the above, since that class does have access to the Requirements I think.



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101836/new/

https://reviews.llvm.org/D101836



More information about the llvm-commits mailing list