[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