[llvm-branch-commits] [llvm] [LV] -scalable-vectorization=preferred should not override UserVF=1 (PR #226948)

Gaƫtan Bossu via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Sep 29 04:04:06 PDT 2026


================
@@ -132,8 +132,11 @@ LoopVectorizeHints::LoopVectorizeHints(const Loop *L,
 
   // If the flag is set to force any use of scalable vectors, override the loop
   // hints.
-  if (ForceScalableVectorization.getValue() !=
-      LoopVectorizeHints::SK_Unspecified)
+  // However: A preference must not turn a UserVF of 1, used by e.g.
+  // vectorize(disable) pragmas, into a vscale x 1 VF.
+  if (ForceScalableVectorization.getValue() != SK_Unspecified &&
+      (Width.Value != 1 ||
----------------
gbossu wrote:

Ultimately, my preference would be something like below, where `-scalable-vectorization` has lower precedence than pragmas for `SK_PreferScalable` values, but higher precedence for `SK_FixedWidthOnly` and `SK_AlwaysScalable`. I.e.
```
  // Scalable vectorization is decided based on the following criteria
  // (increasing level of priority):
  //  1. Target TTI default
  //  2. -scalable-vectorization preferred value (SK_PreferScalable)
  //  3. !loop.vectorize.scalable enable/disable metadata
  //  4. -force-vector-width 's scalable attribute
  //  5. -scalable-vectorization forced value (SK_FixedWidthOnly or SK_AlwaysScalable) unless Width=1
```

And I also think the width choice should be changed to:
```
  //  1. !llvm.loop.vectorize.width metadata
  //  2. -force-vector-width cl::opt
```

This way, `-force-xxxx` options consistently have higher precedence than pragmas.

However, I feel it's a case where it's difficult to make everyone happy, so I'm happy to hear as many opinions as possible.

https://github.com/llvm/llvm-project/pull/226948


More information about the llvm-branch-commits mailing list