https://gcc.gnu.org/g:1c3d7800a1f27f8f30c9dc2995004814fd459363

commit r15-8874-g1c3d7800a1f27f8f30c9dc2995004814fd459363
Author: Andrew Pinski <quic_apin...@quicinc.com>
Date:   Sun Mar 23 10:38:39 2025 -0700

    vect: Add assert to expand_vector_conversion [PR118616]
    
    In some cases (after inliing due to LTO and -O3), GCC cannot
    figure out that the length of the converts vect is not empty
    when supportable_indirect_convert_operation returns true. So
    we get an extra warning because we loop through all but the last
    entry and GCC decided that `converts.length () - 1` is -1. This
    adds an assert to avoid the warning and maybe even produce slightly
    better code for this function. A gcc_checking_assert would be better
    here but we don't convert that into an assume attribute or
    `if(!a) __builtin_unreachable();`, I filed PR 119439  for that.
    
    Bootstrapped and tested on x86_64-linux-gnu.
    
            PR tree-optimization/118616
    gcc/ChangeLog:
    
            * tree-vect-generic.cc (expand_vector_conversion): Add
            an assert that converts vect is non empty if
            supportable_indirect_convert_operation returns true.
    
    Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>

Diff:
---
 gcc/tree-vect-generic.cc | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gcc/tree-vect-generic.cc b/gcc/tree-vect-generic.cc
index 173ebd9a7ba6..80c2d31776bb 100644
--- a/gcc/tree-vect-generic.cc
+++ b/gcc/tree-vect-generic.cc
@@ -1759,6 +1759,7 @@ expand_vector_conversion (gimple_stmt_iterator *gsi)
                                              converts))
     {
       new_rhs = arg;
+      gcc_assert (!converts.is_empty ());
       for (unsigned int i = 0; i < converts.length () - 1; i++)
        {
          new_lhs = make_ssa_name (converts[i].first);

Reply via email to