https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116797

            Bug ID: 116797
           Summary: [15 Regression] ICE on libvpx-1.14.1 on -O3: during
                    GIMPLE pass: vect: ICE in operator[], at vec.h:910
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: slyfox at gcc dot gnu.org
  Target Milestone: ---

Noticed iCE on libvpx-1.14.1 on current master r15-3754-g2484ba167e1c4a gcc.

Reduced example:

$ cat vp9_ratectrl.c.c
                         enum {                                        
INTER_FRAME ,   FRAME_TYPES}
                                          ;
                                          typedef struct {                     
                          int avg_frame_qindex[FRAME_TYPES];                   
                  long buffer_level;                                      long
bits_off_target;                                      int worst_quality;       
                              long optimal_buffer_level;}
                                          RATE_CONTROL;
                                          typedef struct {                     
                RATE_CONTROL rc;}
                                          LAYER_CONTEXT;
                                          typedef struct {                     
                          LAYER_CONTEXT layer_context[];}
                                          SVC                  ;
                                  int  vp9_encodedframe_overshoot_q, 
vp9_encodedframe_overshoot_tl;
                                  SVC vp9_encodedframe_overshoot_svc;
                           void  vp9_encodedframe_overshoot()                  
            {                                                                  
                                                              for (;           
                  vp9_encodedframe_overshoot_tl ;                             
++vp9_encodedframe_overshoot_tl) {                                             
      LAYER_CONTEXT *lc =
&vp9_encodedframe_overshoot_svc.layer_context[vp9_encodedframe_overshoot_tl];  
                                RATE_CONTROL *lrc = &lc->rc;                   
               lrc->avg_frame_qindex[INTER_FRAME] =
vp9_encodedframe_overshoot_q;                                  
lrc->buffer_level = lrc->bits_off_target = lrc->optimal_buffer_level;          
                      }                                                        
                         }

Crashing:

gcc/xg++ -Bgcc -O3 -c vp9_ratectrl.c.c
during GIMPLE pass: vect
vp9_ratectrl.c.c: In function ‘void vp9_encodedframe_overshoot()’:
vp9_ratectrl.c.c:11:34: internal compiler error: in operator[], at vec.h:910
   11 |                            void  vp9_encodedframe_overshoot()          
                    {                                                          
                                                                      for (;   
                          vp9_encodedframe_overshoot_tl ;                      
       ++vp9_encodedframe_overshoot_tl) {                                      
             LAYER_CONTEXT *lc =
&vp9_encodedframe_overshoot_svc.layer_context[vp9_encodedframe_overshoot_tl];  
                                RATE_CONTROL *lrc = &lc->rc;                   
               lrc->avg_frame_qindex[INTER_FRAME] =
vp9_encodedframe_overshoot_q;                                  
lrc->buffer_level = lrc->bits_off_target = lrc->optimal_buffer_level;          
                      }                                                        
                         }
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
0x27a937f diagnostic_context::diagnostic_impl(rich_location*,
diagnostic_metadata const*, diagnostic_option_id, char const*, __va_list_tag
(*) [1], diagnostic_t)
        ???:0
0x27b85b1 internal_error(char const*, ...)
        ???:0
0x27a7506 fancy_abort(char const*, int, char const*)
        ???:0
0x15bc0f4 vect_transform_slp_perm_load_1(vec_info*, _slp_tree*, vec<unsigned
int, va_heap, vl_ptr>&, vec<tree_node*, va_heap, vl_ptr> const&,
gimple_stmt_iterator*, poly_int<1u, unsigned long>, bool, bool, unsigned int*,
unsigned int*, bool)
        ???:0
0x15bc6c6 vect_transform_slp_perm_load(vec_info*, _slp_tree*, vec<tree_node*,
va_heap, vl_ptr> const&, gimple_stmt_iterator*, poly_int<1u, unsigned long>,
bool, unsigned int*, unsigned int*, bool)
        ???:0
0x155e89a vectorizable_load(vec_info*, _stmt_vec_info*, gimple_stmt_iterator*,
gimple**, _slp_tree*, vec<stmt_info_for_cost, va_heap, vl_ptr>*)
        ???:0
0x156ef33 vect_transform_stmt(vec_info*, _stmt_vec_info*,
gimple_stmt_iterator*, _slp_tree*, _slp_instance*)
        ???:0
0x15c2cdb vect_schedule_slp_node(vec_info*, _slp_tree*, _slp_instance*)
        ???:0
0x15d9847 vect_schedule_scc(vec_info*, _slp_tree*, _slp_instance*,
hash_map<_slp_tree*, slp_scc_info,
simple_hashmap_traits<default_hash_traits<_slp_tree*>, slp_scc_info> >&, int&,
vec<_slp_tree*, va_heap, vl_ptr>&)
        ???:0
0x15d9605 vect_schedule_scc(vec_info*, _slp_tree*, _slp_instance*,
hash_map<_slp_tree*, slp_scc_info,
simple_hashmap_traits<default_hash_traits<_slp_tree*>, slp_scc_info> >&, int&,
vec<_slp_tree*, va_heap, vl_ptr>&)
        ???:0
0x15d9d03 vect_schedule_slp(vec_info*, vec<_slp_instance*, va_heap, vl_ptr>
const&)
        ???:0
0x159dc13 vect_transform_loop(_loop_vec_info*, gimple*)
        ???:0
0x15ece4d vect_transform_loops(hash_table<simduid_to_vf, false, xcallocator>*&,
loop*, gimple*, function*)
        ???:0
0x15ed474 try_vectorize_loop(hash_table<simduid_to_vf, false, xcallocator>*&,
unsigned int*, loop*, function*)
        ???:0
0x15ed73a (anonymous namespace)::pass_vectorize::execute(function*)
        ???:0
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

Compiler details:

$ gcc/xg++ -Bgcc -v
Reading specs from gcc/specs
COLLECT_GCC=gcc/xg++
COLLECT_LTO_WRAPPER=gcc/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /home/slyfox/dev/git/gcc/configure --disable-multilib
--disable-bootstrap --disable-lto --disable-libsanitizer
--disable-libstdcxx-pch --enable-languages=c,c++ --disable-libgomp
--disable-libquadmath --disable-libvtv CFLAGS='-O1 -g0' CXXFLAGS='-O1 -g0'
LDFLAGS='-O1 -g0'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 15.0.0 20240921 (experimental) (GCC)

Reply via email to