[PATCH] D115757: [SLP]Generalize cost model.

Simon Pilgrim via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 28 06:13:41 PDT 2022


RKSimon added inline comments.


================
Comment at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:6313
+          ScalarCost = VL.size() *
+                       ScalarEltCost(std::distance(VL.begin(), find(VL, VL0)));
+        } else {
----------------
Is this purely compile time saving?


================
Comment at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:6341
+        Value *Op = PHI->getIncomingValue(I);
+        Operands[I] = Op;
       }
----------------
Can't we directly initialize Operands from PHI-> incoming_values()? Or even create a ArrayRef<> from it?


================
Comment at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:6389
+            return TTI->getVectorInstrCost(Instruction::ExtractElement,
+                                           SrcVecTy, *getExtractIndex(I));
+          },
----------------
We're going to lose the recent scalarization cost improvement here :-( 


================
Comment at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:6621
+            unsigned OpIdx =
+                isa<BinaryOperator, GetElementPtrInst>(VL0) ? 1 : 0;
+            TTI::OperandValueInfo Op1Info = getOperandInfo(VL, 0);
----------------
Would isa<UnaryOperator> ? 0 : 1 be better?


================
Comment at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:6675
+            if (getOperandInfo(VL, 0).isConstant())
+              OpVK = TTI::OK_NonUniformConstantValue;
+            return TTI->getMemoryOpCost(Instruction::Store, VecTy,
----------------
Why do you avoid allowing uniform as well? Can't you just use getOperandInfo(VL, 0)..getNoProps() below ?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D115757



More information about the llvm-commits mailing list