[llvm] [LangRef] Cap maximum value of vscale at 2^31-1. (PR #144607)

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 17 14:28:27 PDT 2025


https://github.com/fhahn created https://github.com/llvm/llvm-project/pull/144607

Cap the maximum value of vscale at 2^31-1. This should exceed what is available on actual hardware by far but should be enough to ensure that computing the runtime VF `vscale x V` generated by LoopVectorize won't wrap when using i64 index types, as `V` cannot exceed 2^32. LoopVectorize already assumes it won't wrap, this change tries to back up the assumption in LangRef.

>From 0664cbb2c79222794765db6f0fb80c26605e0c86 Mon Sep 17 00:00:00 2001
From: Florian Hahn <flo at fhahn.com>
Date: Tue, 17 Jun 2025 22:16:11 +0100
Subject: [PATCH] [LangRef] Cap maximum value of vscale at 2^31-1.

Cap the maximum value of vscale at 2^31-1. This should exceed what is
available on actual hardware by far but should be enough to ensure that
computing the runtime VF `vscale x V` generated by LoopVectorize won't wrap when
using i64 index types, as `V` cannot exceed 2^32. LoopVectorize already
assumes it won't wrap, this change tries to back up the assumption in
LangRef.
---
 llvm/docs/LangRef.rst | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst
index cc72a37f68599..b876d0bdbc29e 100644
--- a/llvm/docs/LangRef.rst
+++ b/llvm/docs/LangRef.rst
@@ -4446,6 +4446,7 @@ of elements; vscale is a positive integer that is unknown at compile time
 and the same hardware-dependent constant for all scalable vectors at run
 time. The size of a specific scalable vector type is thus constant within
 IR, even if the exact size in bytes cannot be determined until run time.
+vscale can be at most 2^31-1.
 
 :Examples:
 
@@ -30399,7 +30400,7 @@ Semantics:
 """"""""""
 
 ``vscale`` is a positive value that is constant throughout program
-execution, but is unknown at compile time.
+execution, but is unknown at compile time. The returned value can be at most 2^31-1.
 If the result value does not fit in the result type, then the result is
 a :ref:`poison value <poisonvalues>`.
 



More information about the llvm-commits mailing list