https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102682
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |law at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Breakpoint 1, fancy_abort ( file=0x3973340 "/home/rguenther/src/gcc3/gcc/lower-subreg.c", line=717, function=0x39737d0 <simplify_gen_subreg_concatn(machine_mode, rtx_def*, machine_mode, unsigned int)::__FUNCTION__> "simplify_gen_subreg_concatn") at /home/rguenther/src/gcc3/gcc/diagnostic.c:1982 1982 if (global_dc->printer == NULL) Missing separate debuginfos, use: zypper install libgmp10-debuginfo-6.1.2-4.6.1.x86_64 libisl15-debuginfo-0.18-1.443.x86_64 libmpc3-debuginfo-1.1.0-1.47.x86_64 libmpfr6-debuginfo-4.0.2-3.3.1.x86_64 libzstd1-debuginfo-1.4.4-1.6.1.x86_64 (gdb) up #1 0x0000000002c1c638 in simplify_gen_subreg_concatn (outermode=E_DImode, op=0x7ffff63490c0, innermode=E_OImode, byte=0) at /home/rguenther/src/gcc3/gcc/lower-subreg.c:717 717 gcc_assert (!paradoxical_subreg_p (op)); (gdb) p debug_rtx (op) (subreg:OI (concatn/v:TI [ (reg:DI 92 [ buffer ]) (reg:DI 93 [ buffer+8 ]) ]) 0) and the insn (insn 6 5 7 2 (set (subreg:OI (concatn/v:TI [ (reg:DI 92 [ buffer ]) (reg:DI 93 [ buffer+8 ]) ]) 0) (subreg:OI (reg/v:V8SI 85 [ __x ]) 0)) "t.ii":76:21 74 {*movoi_internal_avx} (nil)) looks more like a latent issue in the subreg lowering pass? But then the insn looks dubious in the first place... it originally is: ;; MEM <uint256_t> [(char * {ref-all})&buffer] = _5; (insn 6 5 0 (set (subreg:OI (reg/v:TI 84 [ buffer ]) 0) (subreg:OI (reg/v:V8SI 85 [ __x ]) 0)) "t.ii":76:21 -1 (nil)) where buffer is too small: float buffer[4]; one thing we could do is somehow "fail" when we end up generating the LHS subreg. Alternatively see to this situation when expanding the GIMPLE and mark 'buffer' as not to be expanded to a register via forced_stack_vars because we have an access that's too big.