[llvm] [VPlan] Implement interleaving as VPlan-to-VPlan transform. (PR #95842)
    via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Sun Jun 23 03:15:27 PDT 2024
    
    
  
================
@@ -2076,23 +2124,34 @@ void VPReductionPHIRecipe::execute(VPTransformState &State) {
                                          RdxDesc.getFastMathFlags());
 
     if (!ScalarPHI) {
-      Iden = Builder.CreateVectorSplat(State.VF, Iden);
-      IRBuilderBase::InsertPointGuard IPBuilder(Builder);
-      Builder.SetInsertPoint(VectorPH->getTerminator());
-      Constant *Zero = Builder.getInt32(0);
-      StartV = Builder.CreateInsertElement(Iden, StartV, Zero);
+      if (CurrentPart != 0) {
+        Iden = Builder.CreateVectorSplat(State.VF, Iden);
+      } else {
+        Iden = Builder.CreateVectorSplat(State.VF, Iden);
+        IRBuilderBase::InsertPointGuard IPBuilder(Builder);
+        Builder.SetInsertPoint(VectorPH->getTerminator());
+        Constant *Zero = Builder.getInt32(0);
+        StartV = Builder.CreateInsertElement(Iden, StartV, Zero);
----------------
ayalz wrote:
Better have a dedicated recipe create this `<StartVPV->getLiveInIRValue(), getRecurrenceIdentity(), ..., getRecurrenceIdentity()>` vector at the end of VectorPH?
https://github.com/llvm/llvm-project/pull/95842
    
    
More information about the llvm-commits
mailing list