On 07/09/2026 10:00, Tamar Christina wrote:
-----Original Message-----
From: Alfie Richards <[email protected]>
Sent: 07 September 2026 09:57
To: Tamar Christina <[email protected]>; [email protected]
Cc: Alex Coplan <[email protected]>; Alice Carlotti
<[email protected]>; [email protected];
[email protected]; [email protected]; [email protected];
[email protected]
Subject: Re: [PATCH v2 13/13] vect: Enable HSSR by default.
On 07/09/2026 09:51, Tamar Christina wrote:
-----Original Message-----
From: Alfie Richards <[email protected]>
Sent: 08 August 2026 00:11
To: [email protected]
Cc: Alex Coplan <[email protected]>; Alice Carlotti
<[email protected]>; [email protected];
[email protected]; Tamar Christina <[email protected]>;
[email protected]; [email protected]; [email protected]; Alfie
Richards <[email protected]>
Subject: [PATCH v2 13/13] vect: Enable HSSR by default.
gcc/ChangeLog:
* params.opt: Change param_vect_hssr_usage to initialize to 2.
---
gcc/params.opt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/gcc/params.opt b/gcc/params.opt
index 3e8f83e3fb2..dc7def2275b 100644
--- a/gcc/params.opt
+++ b/gcc/params.opt
@@ -1292,8 +1292,8 @@ Common Joined UInteger
Var(param_vect_partial_vector_usage) Init(2) IntegerRange
Controls how loop vectorizer uses partial vectors. 0 means never, 1 means
only for loops whose need to iterate can be removed, 2 means for all loops.
The default value is 2.
-param=vect-hssr-usage=
-Common Joined UInteger Var(param_vect_hssr_usage) Init(0)
IntegerRange(0, 3) Param Optimization NoOffload
-Controls how loop vectorizer uses hardware safe speculative loads. 0
means
never, 1 means only when profitable, 2 means whenever profitable
possibly as
a versioned option, 3 means whenever possible. The default value is 0.
+Common Joined UInteger Var(param_vect_hssr_usage) Init(2)
IntegerRange(0, 3) Param Optimization NoOffload
+Controls how loop vectorizer uses hardware safe speculative loads. 0
means
never, 1 means only when profitable, 2 means whenever profitable
possibly as
a versioned option, 3 means whenever possible. The default value is 2.
I'll comment on this one first even though you introduced it in the bigger
patch, but
do we need 3? What's the difference between 3 and -mmax-vectorization or
-fno-vect-cost-model?
Well 3 says to use HSSR unconditionally if its possible, including
preferring loops that support HSSR (even if there is a different mode
that doesnt need it, and would be faster), and never to version for it.
It was useful in testing specifically because you can make sure the HSSR
loop is always emitted and taken.
I think that makes it (very marginally) different from
-mmax-vectorization and -fno-vect-cost-model?
Though I could likely make -fno-vect-cost-model do the same thing
(prefer HSSR over everything else, and no versioning)? If you prefer?
But that's the confusing bit. Doesn't 1 say to always use unconditionally
if the loop itself is profitable? So if we say all loops are always profitable
doesn't that mean that all loops will use HSSR?
Hmm thats true, the code paths for 1 and 3 are very different (for HSSR
1 it's more of a fall back if vectorization will fail because it cant
safely do the speculative reads), but in reality that should achieve the
same result (if my codes correct)...
Okay yes agreed this is unnecessary. Will stick with 0, 1, 2 and use
-fno-vect-cost-model for testing.
Thanks,
Alfie
Otherwise it's a bit unclear what profitable refers to here :)
Thanks,
Tamar
KR,
Alfie
Thanks,
Tamar
-param=vect-inner-loop-cost-factor=
Common Joined UInteger Var(param_vect_inner_loop_cost_factor)
Init(50)
IntegerRange(1, 10000) Param Optimization NoOffload
--
2.43.0