[llvm] [LoopInterchange] Improve profitability check for vectorization (PR #133672)
Ryotaro Kasuga via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 6 04:32:03 PDT 2025
================
@@ -1222,21 +1267,33 @@ LoopInterchangeProfitability::isProfitablePerInstrOrderCost() {
static bool canVectorize(const CharMatrix &DepMatrix, unsigned LoopId) {
for (unsigned I = 0; I != DepMatrix.size(); I++) {
char Dir = DepMatrix[I][LoopId];
- if (Dir != 'I' && Dir != '=')
- return false;
+ char DepType = DepMatrix[I].back();
+ assert((DepType == '<' || DepType == '*') &&
+ "Unexpected element in dependency vector");
+
+ // There are no loop-carried dependencies.
+ if (Dir == '=' || Dir == 'I')
+ continue;
+
+ // If both Dir and DepType are '<', it means that the all dependencies are
+ // lexically forward. Such dependencies don't prevent vectorization.
+ if (Dir == '<' && DepType == '<')
+ continue;
----------------
kasuga-fj wrote:
A similar fact holds when `Dir` is `>` and all dependencies are lexically backward? (even if this is true, I don't intend to address it in this PR).
https://github.com/llvm/llvm-project/pull/133672
More information about the llvm-commits
mailing list