optabs: Fix widening optabs for vec-mode -> scalar-mode [PR116926]

Message ID 20250204074119.446402-1-quic_apinski@quicinc.com
State New
Headers
Series optabs: Fix widening optabs for vec-mode -> scalar-mode [PR116926] |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-arm fail Patch failed to apply
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 fail Patch failed to apply

Commit Message

Andrew Pinski Feb. 4, 2025, 7:41 a.m. UTC
  r15-4317-ga6f4404689f12 tried to add support for widending optabs
for vec-mode -> scalar-mode but it misunderstood how FOR_EACH_MODE worked,
the limit in this case is not inclusive. Which means setting limit to from,
would cause the loop not be executed at all. This fixes by setting the
limit to be the next mode after from mode.

Note the original version that added the widening optabs for vec-mode -> scalar-mode
(https://gcc.gnu.org/pipermail/gcc-patches/2024-October/665021.html) didn't have this
bug, only the second version with suggested change
(https://gcc.gnu.org/pipermail/gcc-patches/2024-October/665068.html) dud. The suggested
change missed this issue with FOR_EACH_MODE.

Bootstrapped and tested on x86_64-linux-gnu.

	PR middle-end/116926

gcc/ChangeLog:

	* optabs-query.cc (find_widening_optab_handler_and_mode): Fix
	limit for `vec-mode -> scalar-mode` case.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
---
 gcc/optabs-query.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Richard Biener Feb. 4, 2025, 8:04 a.m. UTC | #1
On Tue, Feb 4, 2025 at 8:42 AM Andrew Pinski <quic_apinski@quicinc.com> wrote:
>
> r15-4317-ga6f4404689f12 tried to add support for widending optabs
> for vec-mode -> scalar-mode but it misunderstood how FOR_EACH_MODE worked,
> the limit in this case is not inclusive. Which means setting limit to from,
> would cause the loop not be executed at all. This fixes by setting the
> limit to be the next mode after from mode.
>
> Note the original version that added the widening optabs for vec-mode -> scalar-mode
> (https://gcc.gnu.org/pipermail/gcc-patches/2024-October/665021.html) didn't have this
> bug, only the second version with suggested change
> (https://gcc.gnu.org/pipermail/gcc-patches/2024-October/665068.html) dud. The suggested
> change missed this issue with FOR_EACH_MODE.
>
> Bootstrapped and tested on x86_64-linux-gnu.

OK.

>         PR middle-end/116926
>
> gcc/ChangeLog:
>
>         * optabs-query.cc (find_widening_optab_handler_and_mode): Fix
>         limit for `vec-mode -> scalar-mode` case.
>
> Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
> ---
>  gcc/optabs-query.cc | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gcc/optabs-query.cc b/gcc/optabs-query.cc
> index 65eeb5d8e51..f5ca98da818 100644
> --- a/gcc/optabs-query.cc
> +++ b/gcc/optabs-query.cc
> @@ -492,7 +492,7 @@ find_widening_optab_handler_and_mode (optab op, machine_mode to_mode,
>      {
>        gcc_checking_assert (VECTOR_MODE_P (from_mode)
>                            && GET_MODE_INNER (from_mode) < to_mode);
> -      limit_mode = from_mode;
> +      limit_mode = GET_MODE_NEXT_MODE (from_mode).require ();
>      }
>    else
>      gcc_checking_assert (GET_MODE_CLASS (from_mode) == GET_MODE_CLASS (to_mode)
> --
> 2.43.0
>
  

Patch

diff --git a/gcc/optabs-query.cc b/gcc/optabs-query.cc
index 65eeb5d8e51..f5ca98da818 100644
--- a/gcc/optabs-query.cc
+++ b/gcc/optabs-query.cc
@@ -492,7 +492,7 @@  find_widening_optab_handler_and_mode (optab op, machine_mode to_mode,
     {
       gcc_checking_assert (VECTOR_MODE_P (from_mode)
 			   && GET_MODE_INNER (from_mode) < to_mode);
-      limit_mode = from_mode;
+      limit_mode = GET_MODE_NEXT_MODE (from_mode).require ();
     }
   else
     gcc_checking_assert (GET_MODE_CLASS (from_mode) == GET_MODE_CLASS (to_mode)