<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gcc.git/gcc/tree-vectorizer.h, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/'/>
<entry>
<title>Do not call vect_determine_partial_vectors_and_peeling from transform</title>
<updated>2025-11-16T08:52:17+00:00</updated>
<author>
<name>Richard Biener</name>
<email>rguenther@suse.de</email>
</author>
<published>2025-11-14T13:10:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=c6008611e9678991c763944ae8539aa90cad419d'/>
<id>c6008611e9678991c763944ae8539aa90cad419d</id>
<content type='text'>
It gets more difficult to maintain this doesn't do any changes late
(see followups), so kill it.  We do have to retain re-setting of
LOOP_VINFO_PEELING_FOR_NITER though, since
vect_need_peeling_or_partial_vectors_p is incorrect for epilogues
when done during analysis.  We should fix this of course.

	* tree-vectorizer.h (vect_determine_partial_vectors_and_peeling):
	Remove.
	(vect_need_peeling_or_partial_vectors_p): Declare.
	* tree-vect-loop.cc (vect_determine_partial_vectors_and_peeling):
	Make static.
	(vect_need_peeling_or_partial_vectors_p): Export.
	* tree-vect-loop-manip.cc (vect_do_peeling): Do not call
	vect_determine_partial_vectors_and_peeling but instead
	re-compute LOOP_VINFO_PEELING_FOR_NITER using
	vect_need_peeling_or_partial_vectors_p.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It gets more difficult to maintain this doesn't do any changes late
(see followups), so kill it.  We do have to retain re-setting of
LOOP_VINFO_PEELING_FOR_NITER though, since
vect_need_peeling_or_partial_vectors_p is incorrect for epilogues
when done during analysis.  We should fix this of course.

	* tree-vectorizer.h (vect_determine_partial_vectors_and_peeling):
	Remove.
	(vect_need_peeling_or_partial_vectors_p): Declare.
	* tree-vect-loop.cc (vect_determine_partial_vectors_and_peeling):
	Make static.
	(vect_need_peeling_or_partial_vectors_p): Export.
	* tree-vect-loop-manip.cc (vect_do_peeling): Do not call
	vect_determine_partial_vectors_and_peeling but instead
	re-compute LOOP_VINFO_PEELING_FOR_NITER using
	vect_need_peeling_or_partial_vectors_p.
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove LOOP_VINFO_EPIL_USING_PARTIAL_VECTORS_P</title>
<updated>2025-11-16T08:52:17+00:00</updated>
<author>
<name>Richard Biener</name>
<email>rguenther@suse.de</email>
</author>
<published>2025-11-14T12:54:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=a9139a67d16a0a909a6352feba670d9f6eda4517'/>
<id>a9139a67d16a0a909a6352feba670d9f6eda4517</id>
<content type='text'>
This is a write-only parameter, it cannot be relied upon either.
So remove it.

	* tree-vectorizer.h (_loop_vec_info::epil_using_partial_vectors_p):
	Remove.
	(LOOP_VINFO_EPIL_USING_PARTIAL_VECTORS_P): Likewise.
	* tree-vect-loop.cc (_loop_vec_info::_loop_vec_info):
	Do not initialize epil_using_partial_vectors_p.
	(vect_determine_partial_vectors_and_peeling): Do not set it.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This is a write-only parameter, it cannot be relied upon either.
So remove it.

	* tree-vectorizer.h (_loop_vec_info::epil_using_partial_vectors_p):
	Remove.
	(LOOP_VINFO_EPIL_USING_PARTIAL_VECTORS_P): Likewise.
	* tree-vect-loop.cc (_loop_vec_info::_loop_vec_info):
	Do not initialize epil_using_partial_vectors_p.
	(vect_determine_partial_vectors_and_peeling): Do not set it.
</pre>
</div>
</content>
</entry>
<entry>
<title>vect: Reduce group size of consecutive strided accesses.</title>
<updated>2025-11-10T12:50:26+00:00</updated>
<author>
<name>Robin Dapp</name>
<email>rdapp@ventanamicro.com</email>
</author>
<published>2025-10-09T15:25:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=0f8bcacf6c4603cb7614aa23ef4a9568e46bddfa'/>
<id>0f8bcacf6c4603cb7614aa23ef4a9568e46bddfa</id>
<content type='text'>
Consecutive load permutations like {0, 1, 2, 3} or {4, 5, 6, 7} in a
group of 8 only read a part of the group, leaving a gap.

For strided accesses we can elide the permutation and, instead of
accessing the whole group, use the number of SLP lanes.  This
effectively increases the vector size as we don't load gaps.  On top we
do not need to emit the permutes at all.

gcc/ChangeLog:

	* tree-vect-slp.cc (vect_load_perm_consecutive_p): New function.
	(vect_lower_load_permutations): Use.
	(vect_optimize_slp_pass::remove_redundant_permutations): Use.
	* tree-vect-stmts.cc (has_consecutive_load_permutation): New
	function that uses vect_load_perm_consecutive_p.
	(get_load_store_type): Use.
	(vectorizable_load): Reduce group size.
	* tree-vectorizer.h (struct vect_load_store_data): Add
	subchain_p.
	(vect_load_perm_consecutive_p): Declare.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/autovec/pr118019-2.c:
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Consecutive load permutations like {0, 1, 2, 3} or {4, 5, 6, 7} in a
group of 8 only read a part of the group, leaving a gap.

For strided accesses we can elide the permutation and, instead of
accessing the whole group, use the number of SLP lanes.  This
effectively increases the vector size as we don't load gaps.  On top we
do not need to emit the permutes at all.

gcc/ChangeLog:

	* tree-vect-slp.cc (vect_load_perm_consecutive_p): New function.
	(vect_lower_load_permutations): Use.
	(vect_optimize_slp_pass::remove_redundant_permutations): Use.
	* tree-vect-stmts.cc (has_consecutive_load_permutation): New
	function that uses vect_load_perm_consecutive_p.
	(get_load_store_type): Use.
	(vectorizable_load): Reduce group size.
	* tree-vectorizer.h (struct vect_load_store_data): Add
	subchain_p.
	(vect_load_perm_consecutive_p): Declare.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/autovec/pr118019-2.c:
</pre>
</div>
</content>
</entry>
<entry>
<title>vect: Relax gather/scatter scale handling.</title>
<updated>2025-11-07T20:09:45+00:00</updated>
<author>
<name>Robin Dapp</name>
<email>rdapp@ventanamicro.com</email>
</author>
<published>2025-10-29T15:02:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=573ea59a48d95fc4e9f520865eae71c5d9de614f'/>
<id>573ea59a48d95fc4e9f520865eae71c5d9de614f</id>
<content type='text'>
Similar to the signed/unsigned patch before this one relaxes the
gather/scatter restrictions on scale factors.  The basic idea is that a
natively unsupported scale factor can still be reached by emitting a
multiplication before the actual gather operation.  As before, we need
to make sure that there is no overflow when multiplying.

gcc/ChangeLog:

	* tree-vect-data-refs.cc (struct gather_scatter_config):
	Add scale.
	(vect_gather_scatter_get_configs): Try various scales.
	(vect_gather_scatter_fn_p): Add scale handling.
	(vect_check_gather_scatter): Add scale parameter.
	* tree-vect-stmts.cc (check_load_store_for_partial_vectors):
	Ditto.
	(vect_truncate_gather_scatter_offset): Ditto.
	(vect_use_grouped_gather): Ditto.
	(get_load_store_type): Ditto.
	(vectorizable_store): Scale offset if necessary.
	(vectorizable_load): Ditto.
	* tree-vectorizer.h (struct vect_load_store_data): Add
	supported_scale.
	(vect_gather_scatter_fn_p): Add argument.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Similar to the signed/unsigned patch before this one relaxes the
gather/scatter restrictions on scale factors.  The basic idea is that a
natively unsupported scale factor can still be reached by emitting a
multiplication before the actual gather operation.  As before, we need
to make sure that there is no overflow when multiplying.

gcc/ChangeLog:

	* tree-vect-data-refs.cc (struct gather_scatter_config):
	Add scale.
	(vect_gather_scatter_get_configs): Try various scales.
	(vect_gather_scatter_fn_p): Add scale handling.
	(vect_check_gather_scatter): Add scale parameter.
	* tree-vect-stmts.cc (check_load_store_for_partial_vectors):
	Ditto.
	(vect_truncate_gather_scatter_offset): Ditto.
	(vect_use_grouped_gather): Ditto.
	(get_load_store_type): Ditto.
	(vectorizable_store): Scale offset if necessary.
	(vectorizable_load): Ditto.
	* tree-vectorizer.h (struct vect_load_store_data): Add
	supported_scale.
	(vect_gather_scatter_fn_p): Add argument.
</pre>
</div>
</content>
</entry>
<entry>
<title>vect: Relax gather/scatter detection by swapping offset sign.</title>
<updated>2025-11-07T20:09:45+00:00</updated>
<author>
<name>Robin Dapp</name>
<email>rdapp@ventanamicro.com</email>
</author>
<published>2025-09-09T09:41:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=e51fffdcbb53f10acffd197379585a586720a9b3'/>
<id>e51fffdcbb53f10acffd197379585a586720a9b3</id>
<content type='text'>
This patch adjusts vect_gather_scatter_fn_p to always check an offset
type with swapped signedness (vs. the original offset argument).
If the target supports the gather/scatter with the new offset type as
well as the conversion of the offset we now emit an explicit offset
conversion before the actual gather/scatter.

The relaxation is only done for the IFN path of gather/scatter and the
general idea roughly looks like:

  - vect_gather_scatter_fn_p builds a list of all offset vector types
  that the target supports for the current vectype.  Then it goes
  through that list, trying direct support first and sign-swapped
  offset types next, taking precision requirements into account.
  If successful it sets supported_offset_vectype to the type that actually
  worked while offset_vectype_out is the type that was requested.
  - vect_check_gather_scatter works as before but uses the relaxed
  vect_gather_scatter_fn_p.
  - get_load_store_type sets ls_data-&gt;supported_offset_vectype if the
  requested type wasn't supported but another one was.
  - check_load_store_for_partial_vectors uses the
  supported_offset_vectype in order to validate what get_load_store_type
  determined.
  - vectorizable_load/store emit a conversion if
  ls_data-&gt;supported_offset_vectype is nonzero and cost it.

The offset type is either of pointer size (if we started with a signed
offset) or twice the size of the original offset (when that one was
unsigned).

gcc/ChangeLog:

	* tree-vect-data-refs.cc (struct gather_scatter_config): New
	struct to hold gather/scatter configurations.
	(vect_gather_scatter_which_ifn): New function to determine which
	IFN to use.
	(vect_gather_scatter_get_configs): New function to enumerate all
	target-supported configs.
	(vect_gather_scatter_fn_p): Rework to use
	vect_gather_scatter_get_configs and try sign-swapped offset.
	(vect_check_gather_scatter): Use new supported offset vectype
	argument.
	* tree-vect-stmts.cc (check_load_store_for_partial_vectors):
	Ditto.
	(vect_truncate_gather_scatter_offset): Ditto.
	(vect_use_grouped_gather): Ditto.
	(get_load_store_type): Ditto.
	(vectorizable_store): Convert to sign-swapped offset type if
	needed.
	(vectorizable_load): Ditto.
	* tree-vectorizer.h (struct vect_load_store_data): Add
	supported_offset_vectype.
	(vect_gather_scatter_fn_p): Add argument.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch adjusts vect_gather_scatter_fn_p to always check an offset
type with swapped signedness (vs. the original offset argument).
If the target supports the gather/scatter with the new offset type as
well as the conversion of the offset we now emit an explicit offset
conversion before the actual gather/scatter.

The relaxation is only done for the IFN path of gather/scatter and the
general idea roughly looks like:

  - vect_gather_scatter_fn_p builds a list of all offset vector types
  that the target supports for the current vectype.  Then it goes
  through that list, trying direct support first and sign-swapped
  offset types next, taking precision requirements into account.
  If successful it sets supported_offset_vectype to the type that actually
  worked while offset_vectype_out is the type that was requested.
  - vect_check_gather_scatter works as before but uses the relaxed
  vect_gather_scatter_fn_p.
  - get_load_store_type sets ls_data-&gt;supported_offset_vectype if the
  requested type wasn't supported but another one was.
  - check_load_store_for_partial_vectors uses the
  supported_offset_vectype in order to validate what get_load_store_type
  determined.
  - vectorizable_load/store emit a conversion if
  ls_data-&gt;supported_offset_vectype is nonzero and cost it.

The offset type is either of pointer size (if we started with a signed
offset) or twice the size of the original offset (when that one was
unsigned).

gcc/ChangeLog:

	* tree-vect-data-refs.cc (struct gather_scatter_config): New
	struct to hold gather/scatter configurations.
	(vect_gather_scatter_which_ifn): New function to determine which
	IFN to use.
	(vect_gather_scatter_get_configs): New function to enumerate all
	target-supported configs.
	(vect_gather_scatter_fn_p): Rework to use
	vect_gather_scatter_get_configs and try sign-swapped offset.
	(vect_check_gather_scatter): Use new supported offset vectype
	argument.
	* tree-vect-stmts.cc (check_load_store_for_partial_vectors):
	Ditto.
	(vect_truncate_gather_scatter_offset): Ditto.
	(vect_use_grouped_gather): Ditto.
	(get_load_store_type): Ditto.
	(vectorizable_store): Convert to sign-swapped offset type if
	needed.
	(vectorizable_load): Ditto.
	* tree-vectorizer.h (struct vect_load_store_data): Add
	supported_offset_vectype.
	(vect_gather_scatter_fn_p): Add argument.
</pre>
</div>
</content>
</entry>
<entry>
<title>[PATCH] middle-end: Fix typos in comments</title>
<updated>2025-10-26T14:38:06+00:00</updated>
<author>
<name>Osama Abdelkader</name>
<email>osama.abdelkader@gmail.com</email>
</author>
<published>2025-10-26T14:38:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=a6f7ff29c7d6e66c4dd823b7aac5af91e4b857d5'/>
<id>a6f7ff29c7d6e66c4dd823b7aac5af91e4b857d5</id>
<content type='text'>
This patch fixes spelling errors in comments:
- "accomodate" -&gt; "accommodate" in wide-int.h and value-range-storage.h
- "the the" -&gt; "the" in tree-vectorizer.h

gcc/ChangeLog:

	* wide-int.h: Fix typo "accomodate" to "accommodate" in comment.
	* value-range-storage.h: Likewise.
	* tree-vectorizer.h (dr_set_safe_speculative_read_required):
	Fix duplicate "the the" to "the" in comment.

Signed-off-by: Osama Abdelkader &lt;osama.abdelkader@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch fixes spelling errors in comments:
- "accomodate" -&gt; "accommodate" in wide-int.h and value-range-storage.h
- "the the" -&gt; "the" in tree-vectorizer.h

gcc/ChangeLog:

	* wide-int.h: Fix typo "accomodate" to "accommodate" in comment.
	* value-range-storage.h: Likewise.
	* tree-vectorizer.h (dr_set_safe_speculative_read_required):
	Fix duplicate "the the" to "the" in comment.

Signed-off-by: Osama Abdelkader &lt;osama.abdelkader@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove LOOP_VINFO_SLP_UNROLLING_FACTOR</title>
<updated>2025-10-23T10:57:21+00:00</updated>
<author>
<name>Richard Biener</name>
<email>rguenther@suse.de</email>
</author>
<published>2025-10-23T09:13:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=4eaffcd9962b3ff1685fc2fff6aea764cef70e9c'/>
<id>4eaffcd9962b3ff1685fc2fff6aea764cef70e9c</id>
<content type='text'>
The following removes LOOP_VINFO_SLP_UNROLLING_FACTOR in favor of
using LOOP_VINFO_VECT_FACTOR directly now that there's no difference
between the two possible.

	* tree-vectorizer.h (_loop_vec_info::slp_unrolling_factor): Remove.
	(LOOP_VINFO_SLP_UNROLLING_FACTOR): Likewise.
	* tree-vect-loop.cc (_loop_vec_info::_loop_vec_info): Adjust.
	(vect_analyze_loop_2): Likewise.
	* tree-vect-slp.cc (vect_make_slp_decision): Set
	LOOP_VINFO_VECT_FACTOR directly.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The following removes LOOP_VINFO_SLP_UNROLLING_FACTOR in favor of
using LOOP_VINFO_VECT_FACTOR directly now that there's no difference
between the two possible.

	* tree-vectorizer.h (_loop_vec_info::slp_unrolling_factor): Remove.
	(LOOP_VINFO_SLP_UNROLLING_FACTOR): Likewise.
	* tree-vect-loop.cc (_loop_vec_info::_loop_vec_info): Adjust.
	(vect_analyze_loop_2): Likewise.
	* tree-vect-slp.cc (vect_make_slp_decision): Set
	LOOP_VINFO_VECT_FACTOR directly.
</pre>
</div>
</content>
</entry>
<entry>
<title>Implement bool reduction vectorization</title>
<updated>2025-10-20T08:35:10+00:00</updated>
<author>
<name>Richard Biener</name>
<email>rguenther@suse.de</email>
</author>
<published>2025-10-09T12:03:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=3602ebc86473a9ff9c68996470600e372a8b9379'/>
<id>3602ebc86473a9ff9c68996470600e372a8b9379</id>
<content type='text'>
Currently we mess up here in two places.  One is pattern recognition
which computes a mask-precision for a bool reduction PHI that's
inconsistent with that of the latch definition.  This is solved by
iterating the mask-precision computation.  The second is that the
reduction epilogue generation and the code querying support for it
isn't ready for mask inputs.  The following fixes this by falling
back to doing all the epilogue processing on a data type again, if
the target does not support a direct mask reduction.  For that we
utilize the newly added reduc_sbool_{and,ior,xor}_scal optabs
so we can go the direct IFN path on masks if the target supports
that.  In the future we can also implement an additional fallback
for IOR and AND reductions using a scalar cond-expr like
mask != 0 ? true : false, but the new optabs provide more information
to the target.

	PR tree-optimization/101639
	PR tree-optimization/103495
	* tree-vectorizer.h (vect_reduc_info_s): Add reduc_type_for_mask.
	(VECT_REDUC_INFO_VECTYPE_FOR_MASK): New.
	* tree-vect-patterns.cc (vect_determine_mask_precision):
	Return whether the mask precision changed.
	(vect_determine_precisions): Iterate mask precision computation
	for loop vectorization.
	* tree-vect-loop.cc (get_initial_defs_for_reduction): Properly
	convert non-mask initial values to a mask initial def for
	the reduction.
	(sbool_reduction_fn_for_fn): New function.
	(vect_create_epilog_for_reduction): For a mask input convert
	it to the vector type analysis decided to use.  Use a regular
	conversion for the final convert to the scalar code type.
	(vectorizable_reduction): Support mask reductions.  Verify
	we can compute a data vector from the mask result or a direct
	maks reduction is provided by the target.

	* gcc.dg/vect/vect-reduc-bool-1.c: New testcase.
	* gcc.dg/vect/vect-reduc-bool-2.c: Likewise.
	* gcc.dg/vect/vect-reduc-bool-3.c: Likewise.
	* gcc.dg/vect/vect-reduc-bool-4.c: Likewise.
	* gcc.dg/vect/vect-reduc-bool-5.c: Likewise.
	* gcc.dg/vect/vect-reduc-bool-6.c: Likewise.
	* gcc.dg/vect/vect-reduc-bool-7.c: Likewise.
	* gcc.dg/vect/vect-reduc-bool-8.c: Likewise.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Currently we mess up here in two places.  One is pattern recognition
which computes a mask-precision for a bool reduction PHI that's
inconsistent with that of the latch definition.  This is solved by
iterating the mask-precision computation.  The second is that the
reduction epilogue generation and the code querying support for it
isn't ready for mask inputs.  The following fixes this by falling
back to doing all the epilogue processing on a data type again, if
the target does not support a direct mask reduction.  For that we
utilize the newly added reduc_sbool_{and,ior,xor}_scal optabs
so we can go the direct IFN path on masks if the target supports
that.  In the future we can also implement an additional fallback
for IOR and AND reductions using a scalar cond-expr like
mask != 0 ? true : false, but the new optabs provide more information
to the target.

	PR tree-optimization/101639
	PR tree-optimization/103495
	* tree-vectorizer.h (vect_reduc_info_s): Add reduc_type_for_mask.
	(VECT_REDUC_INFO_VECTYPE_FOR_MASK): New.
	* tree-vect-patterns.cc (vect_determine_mask_precision):
	Return whether the mask precision changed.
	(vect_determine_precisions): Iterate mask precision computation
	for loop vectorization.
	* tree-vect-loop.cc (get_initial_defs_for_reduction): Properly
	convert non-mask initial values to a mask initial def for
	the reduction.
	(sbool_reduction_fn_for_fn): New function.
	(vect_create_epilog_for_reduction): For a mask input convert
	it to the vector type analysis decided to use.  Use a regular
	conversion for the final convert to the scalar code type.
	(vectorizable_reduction): Support mask reductions.  Verify
	we can compute a data vector from the mask result or a direct
	maks reduction is provided by the target.

	* gcc.dg/vect/vect-reduc-bool-1.c: New testcase.
	* gcc.dg/vect/vect-reduc-bool-2.c: Likewise.
	* gcc.dg/vect/vect-reduc-bool-3.c: Likewise.
	* gcc.dg/vect/vect-reduc-bool-4.c: Likewise.
	* gcc.dg/vect/vect-reduc-bool-5.c: Likewise.
	* gcc.dg/vect/vect-reduc-bool-6.c: Likewise.
	* gcc.dg/vect/vect-reduc-bool-7.c: Likewise.
	* gcc.dg/vect/vect-reduc-bool-8.c: Likewise.
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove REDUC_GROUP_* from public interface</title>
<updated>2025-10-14T13:35:02+00:00</updated>
<author>
<name>Richard Biener</name>
<email>rguenther@suse.de</email>
</author>
<published>2025-10-14T12:13:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=9f13fd1b076d041cde15245fb14aa641dafd32f0'/>
<id>9f13fd1b076d041cde15245fb14aa641dafd32f0</id>
<content type='text'>
The following removes REDUC_GROUP_* from the public vectorizer
interface and privatizes REDUC_GROUP_FIRST_ELEMENT which is now
only temporarily set during SLP discovery.

	* tree-vectorizer.h (REDUC_GROUP_FIRST_ELEMENT,
	REDUC_GROUP_NEXT_ELEMENT, REDUC_GROUP_SIZE): Remove.
	* tree-vect-slp.cc (REDUC_GROUP_FIRST_ELEMENT): Re-instantiate
	here.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The following removes REDUC_GROUP_* from the public vectorizer
interface and privatizes REDUC_GROUP_FIRST_ELEMENT which is now
only temporarily set during SLP discovery.

	* tree-vectorizer.h (REDUC_GROUP_FIRST_ELEMENT,
	REDUC_GROUP_NEXT_ELEMENT, REDUC_GROUP_SIZE): Remove.
	* tree-vect-slp.cc (REDUC_GROUP_FIRST_ELEMENT): Re-instantiate
	here.
</pre>
</div>
</content>
</entry>
<entry>
<title>vect: Move slp_perm checking into get_load_store_type.</title>
<updated>2025-10-14T08:00:02+00:00</updated>
<author>
<name>Robin Dapp</name>
<email>rdapp@ventanamicro.com</email>
</author>
<published>2025-10-10T16:39:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/gcc.git/commit/?id=aefb2dbb64a3cdd23a50e665691e7c636cee6b56'/>
<id>aefb2dbb64a3cdd23a50e665691e7c636cee6b56</id>
<content type='text'>
This moves the setting of slp_perm, checking of basic-block SLP gaps, as
well as the final check for perm_ok to get_load_store_type.
Also, slp_perm is moved to ls_data.

gcc/ChangeLog:

	* tree-vect-stmts.cc (get_load_store_type): Add load-permutation
	checks and setting of slp_perm.
	(vectorizable_store): Remove perm_ok argument.
	(vectorizable_load): Ditto and replace slp_perm by ls.slp_perm.
	* tree-vectorizer.h (struct vect_load_store_data): Add slp_perm.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This moves the setting of slp_perm, checking of basic-block SLP gaps, as
well as the final check for perm_ok to get_load_store_type.
Also, slp_perm is moved to ls_data.

gcc/ChangeLog:

	* tree-vect-stmts.cc (get_load_store_type): Add load-permutation
	checks and setting of slp_perm.
	(vectorizable_store): Remove perm_ok argument.
	(vectorizable_load): Ditto and replace slp_perm by ls.slp_perm.
	* tree-vectorizer.h (struct vect_load_store_data): Add slp_perm.
</pre>
</div>
</content>
</entry>
</feed>
