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

Gaƫtan Bossu via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 29 00:45:57 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:

Discussed offline, we think `-scalable-vectorization` should not override any user decision from pragmas. Regardless of the `-scalable-vectorization` flag:
 - `#pragma clang loop vectorize_width(1,scalable)` means `VF = vscale x 1`
 - `#pragma clang loop vectorize_width(4,fixed)` means `VF = 4`
 - `#pragma clang loop vectorize(disable)` means `VF = 1`

However, for pragmas which leave "scalability" unspecified like `#pragma clang loop vectorize_width(4)`, then `-scalable-vectorization` can decide whether or not to force/prefer/disable a scalable VF.

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


More information about the llvm-commits mailing list