[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