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

            Bug ID: 117506
           Summary: [15 Regression] ICE: in decompose, at wide-int.h:1049
                    with -O3 -funroll-loops
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: patrick at rivosinc dot com
  Target Milestone: ---

Testcase:
char a;
int b;
unsigned c;
short d;
void e() {
  for (short f = 0; f < c; f += 3) {
    a ^= d;
    b = b < 0 ? b : 0;
  }
}


Command/backtrace:
> /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/bin/riscv64-unknown-linux-gnu-gcc
>  -O3 -funroll-loops -march=rv64imdzve64x func.c -c -S -o /dev/null
during RTL pass: loop2_unroll
func.c: In function 'e':
func.c:10:1: internal compiler error: in decompose, at wide-int.h:1049
   10 | }
      | ^
0x2f0de35 internal_error(char const*, ...)
        ../../../gcc/gcc/diagnostic-global-context.cc:518
0xc69f90 fancy_abort(char const*, int, char const*)
        ../../../gcc/gcc/diagnostic.cc:1696
0xafab88 wi::int_traits<generic_wide_int<wide_int_ref_storage<false, false> >
>::decompose(long*, unsigned int, generic_wide_int<wide_int_ref_storage<false,
false> > const&)
        ../../../gcc/gcc/wide-int.h:1049
0x1390b29 wi::int_traits<generic_wide_int<wide_int_ref_storage<false, false> >
>::decompose(long*, unsigned int, generic_wide_int<wide_int_ref_storage<false,
false> > const&)
        ../../../gcc/gcc/wide-int.h:1272
0x1390b29 wide_int_ref_storage<false,
false>::wide_int_ref_storage<generic_wide_int<wide_int_ref_storage<false,
false> > >(generic_wide_int<wide_int_ref_storage<false, false> > const&,
unsigned int)
        ../../../gcc/gcc/wide-int.h:1099
0x1390b29 generic_wide_int<wide_int_ref_storage<false, false>
>::generic_wide_int<generic_wide_int<wide_int_ref_storage<false, false> >
>(generic_wide_int<wide_int_ref_storage<false, false> > const&, unsigned int)
        ../../../gcc/gcc/wide-int.h:855
0x1390b29 wi::binary_traits<generic_wide_int<wide_int_ref_storage<false, false>
>, generic_wide_int<wide_int_ref_storage<false, false> >,
wi::int_traits<generic_wide_int<wide_int_ref_storage<false, false> >
>::precision_type, wi::int_traits<generic_wide_int<wide_int_ref_storage<false,
false> > >::precision_type>::result_type
wi::add<generic_wide_int<wide_int_ref_storage<false, false> >,
generic_wide_int<wide_int_ref_storage<false, false> >
>(generic_wide_int<wide_int_ref_storage<false, false> > const&,
generic_wide_int<wide_int_ref_storage<false, false> > const&)
        ../../../gcc/gcc/wide-int.h:2871
0x1390b29 wi::binary_traits<generic_wide_int<wide_int_ref_storage<false, false>
>, generic_wide_int<wide_int_ref_storage<false, false> >,
wi::int_traits<generic_wide_int<wide_int_ref_storage<false, false> >
>::precision_type, wi::int_traits<generic_wide_int<wide_int_ref_storage<false,
false> > >::precision_type>::operator_result
operator+<generic_wide_int<wide_int_ref_storage<false, false> >,
generic_wide_int<wide_int_ref_storage<false, false> >
>(generic_wide_int<wide_int_ref_storage<false, false> > const&,
generic_wide_int<wide_int_ref_storage<false, false> > const&)
        ../../../gcc/gcc/wide-int.h:3857
0x1390b29 poly_int<2u, poly_result<generic_wide_int<wide_int_ref_storage<false,
false> >, generic_wide_int<wide_int_ref_storage<false, false> >,
poly_coeff_pair_traits<generic_wide_int<wide_int_ref_storage<false, false> >,
generic_wide_int<wide_int_ref_storage<false, false> > >::result_kind>::type>
operator+<2u, generic_wide_int<wide_int_ref_storage<false, false> >,
generic_wide_int<wide_int_ref_storage<false, false> > >(poly_int<2u,
generic_wide_int<wide_int_ref_storage<false, false> > > const&, poly_int<2u,
generic_wide_int<wide_int_ref_storage<false, false> > > const&)
        ../../../gcc/gcc/poly-int.h:776
0x138b258 simplify_const_binary_operation(rtx_code, machine_mode, rtx_def*,
rtx_def*)
        ../../../gcc/gcc/simplify-rtx.cc:5629
0x137d57c simplify_context::simplify_binary_operation(rtx_code, machine_mode,
rtx_def*, rtx_def*)
        ../../../gcc/gcc/simplify-rtx.cc:2701
0x137d63d simplify_context::simplify_gen_binary(rtx_code, machine_mode,
rtx_def*, rtx_def*)
        ../../../gcc/gcc/simplify-rtx.cc:182
0x1199345 simplify_gen_binary(rtx_code, machine_mode, rtx_def*, rtx_def*)
        ../../../gcc/gcc/rtl.h:3539
0x1199345 get_biv_step_1
        ../../../gcc/gcc/loop-iv.cc:788
0x119a033 get_biv_step
        ../../../gcc/gcc/loop-iv.cc:828
0x119a033 iv_analyze_biv
        ../../../gcc/gcc/loop-iv.cc:921
0x119a5ea iv_analyze_op
        ../../../gcc/gcc/loop-iv.cc:1157
0x119a943 iv_analyze_expr(rtx_insn*, scalar_int_mode, rtx_def*, rtx_iv*)
        ../../../gcc/gcc/loop-iv.cc:1020
0x119a7a1 iv_analyze_expr(rtx_insn*, scalar_int_mode, rtx_def*, rtx_iv*)
        ../../../gcc/gcc/loop-iv.cc:1020
0x119ac31 iv_analyze_def
        ../../../gcc/gcc/loop-iv.cc:1115
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.


Assertion triggered:
https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/wide-int.h;h=03edc75bdd1cfc055c2bbc73aa736a30ccdd78f6;hb=HEAD#l1049

Tested with:
riscv64-unknown-linux-gnu-gcc (g4473cf8409f) 15.0.0 20241107 (experimental)

Found via fuzzer.

Reply via email to