"juzhe.zh...@rivai.ai" <juzhe.zh...@rivai.ai> writes: > I think it's reasonable refactor reduction instruction pattern work around > this issue. > > Going to send a patch to apply this solution. > > So drop this patch. Sorry for bothering Richard S.
It wasn't a bother. On the patch: as things stand, we try to make the use_info's mode be at least as big as all the uses in the instruction. So if we did want to handle unordered modes for hard registers, I think we would need to fall back on the register's natural mode instead. I did something similar in LRA recently for PR112278 (6e2e0ce6795). So if in future you would like to change RTL-SSA, a fix along those lines would be fine with me. Thanks, Richard > > > > juzhe.zh...@rivai.ai > > From: Robin Dapp > Date: 2023-12-11 17:01 > To: Juzhe-Zhong; gcc-patches > CC: rdapp.gcc; richard.sandiford > Subject: Re: [PATCH] RTL-SSA: Fix ICE on record_use of RTL_SSA for RISC-V > VSETVL PASS >> In record_use: >> >> if (HARD_REGISTER_NUM_P (regno) >> && partial_subreg_p (use->mode (), mode)) >> >> Assertion failed on partial_subreg_p which is: >> >> inline bool >> partial_subreg_p (machine_mode outermode, machine_mode innermode) >> { >> /* Modes involved in a subreg must be ordered. In particular, we must >> always know at compile time whether the subreg is paradoxical. */ >> poly_int64 outer_prec = GET_MODE_PRECISION (outermode); >> poly_int64 inner_prec = GET_MODE_PRECISION (innermode); >> gcc_checking_assert (ordered_p (outer_prec, inner_prec)); >> -----> cause ICE. >> return maybe_lt (outer_prec, inner_prec); >> } >> >> RISC-V VSETVL PASS is an advanced lazy vsetvl insertion PASS after RA >> (register allocation). >> >> The rootcause is that we have a pattern (reduction instruction) that >> includes both VLA (length-agnostic) and VLS (fixed-length) modes. > > Maybe as additional context: The second input (which has a VLA mode here) > is not used entirely but just its first element. This serves as initial > value for the reduction. > > I'm not sure we'd want to model it as subreg here (endianness etc?). > Could we have a VLS-mode equivalent for the VLA mode that only holds > one element? > > Regards > Robin > >