[PATCH] D92132: [LV] Support widened induction variables in epilogue vectorization.
    Bardia Mahjour via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Thu Oct  7 15:04:55 PDT 2021
    
    
  
bmahjour added a comment.
Instead of changing the generic interface for skeleton creation, how about adding a field to hold the resume value inside `EpilogueVectorizerEpilogueLoop`? Then inside `executePlan()` we would do something like this to update the induction widening recipes:
  EpilogueVectorizerEpilogueLoop *EILV = dyn_cast<EpilogueVectorizerEpilogueLoop>(ILV);
  if (EILV) {
    Value *IndStart = EILV->getResumeValue();
    assert(IndStart && "Expected valid resume value");
    ...
  }
Also don't we need to store some sort of a map to be able to handle loops with multiple widened induction vars (with potentially different resume values)? I'm thinking of a case like this:
  void foo(int * restrict A, int N) {
    int i, j, k;
    for (i = 0, j = 1, k = 2; i < N; i++, j++, k++)
      A[i] = j + k;
  }
================
Comment at: llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:8217
+        VPValue *StartVPV = new VPValue(IndStart);
+        Plan->addExternalDef(StartVPV);
+        Ind->setStart(StartVPV);
----------------
Don't we need to make sure that it is an "external definition" before treating it as such?
Repository:
  rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D92132/new/
https://reviews.llvm.org/D92132
    
    
More information about the llvm-commits
mailing list