https://gcc.gnu.org/g:4c98b3825f99fcec8fd921550e2dc45f2d966cbb

commit r15-7346-g4c98b3825f99fcec8fd921550e2dc45f2d966cbb
Author: Andrew Pinski <quic_apin...@quicinc.com>
Date:   Mon Feb 3 19:58:45 2025 -0800

    optabs: Fix widening optabs for vec-mode -> scalar-mode [PR116926]
    
    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_apin...@quicinc.com>

Diff:
---
 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 65eeb5d8e519..f5ca98da818a 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)

Reply via email to