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.

Reply via email to