https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117506
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |law at gcc dot gnu.org
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So, we have a loop with
(insn 3 72 4 5 (set (reg:DI 159 [ ivtmp_86 ])
(const_int 0 [0])) "pr117506.c":7:7 277 {*movdi_64bit}
(nil))
before the loop and
(insn 84 80 86 6 (set (reg:DI 159 [ ivtmp_86 ])
(sign_extend:DI (plus:SI (subreg/s/u:SI (reg:DI 159 [ ivtmp_86 ]) 0)
(reg:SI 216)))) "pr117506.c":6:23 discrim 1 8 {addsi3_extended}
(expr_list:REG_DEAD (reg:SI 216)
(expr_list:REG_EQUAL (sign_extend:DI (plus:SI (subreg/s/u:SI (reg:DI
159 [ ivtmp_86 ]) 0)
(const_poly_int:SI [8, 8])))
(nil))))
inside of the loop.
The BIV analysis uses DImode as outermode, that is fine, but then
r14-1622-g99bfdb072e67fa3fe294d86b4b2a9f686f8d9705 added some loop-iv.cc RISCV
specific hacks.
Now, because (const_poly_int:SI [8, 8]) is a CONSTANT_P but doesn't have
VOIDmode, that obviously causes ICE on the simplify_gen_binary.
Guess one possibility would be to
--- gcc/loop-iv.cc.jj 2025-01-02 11:23:04.479684906 +0100
+++ gcc/loop-iv.cc 2025-01-29 11:55:57.723511186 +0100
@@ -711,7 +711,7 @@ get_biv_step_1 (df_ref def, scalar_int_m
if (CONSTANT_P (op0))
std::swap (op0, op1);
- if (!simple_reg_p (op0) || !CONSTANT_P (op1))
+ if (!simple_reg_p (op0) || !CONST_INT_P (op1))
return false;
prev_code = code;
Another would be to make sure op1 is SIGN/ZERO_EXTENDED before we actually use
it later in the simplify_gen_binary:
--- gcc/loop-iv.cc.jj 2025-01-02 11:23:04.479684906 +0100
+++ gcc/loop-iv.cc 2025-01-29 12:01:08.899294623 +0100
@@ -714,6 +714,7 @@ get_biv_step_1 (df_ref def, scalar_int_m
if (!simple_reg_p (op0) || !CONSTANT_P (op1))
return false;
+ op1 = simplify_gen_unary (code, outer_mode, op1, GET_MODE (rhs));
prev_code = code;
code = PLUS;
}
Both fix the ICE on this testcase but otherwise completely untested.
But, I have no way to test this on RISC-V, so deferring to Jeff as the commit
author.