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

--- Comment #1 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Pan Li <pa...@gcc.gnu.org>:

https://gcc.gnu.org/g:073849da3dfd5cabbfd4492a40a17b207b4a7630

commit r14-4291-g073849da3dfd5cabbfd4492a40a17b207b4a7630
Author: Juzhe-Zhong <juzhe.zh...@rivai.ai>
Date:   Wed Sep 27 06:47:12 2023 +0800

    DSE: Fix ICE when the mode with access_size don't exist on the
target[PR111590]

    hen doing fortran test with 'V' extension enabled on RISC-V port.
    I saw multiple ICE: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111590

    The root cause is on DSE:

    internal compiler error: in smallest_mode_for_size, at stor-layout.cc:356
    0x1918f70 smallest_mode_for_size(poly_int<2u, unsigned long>, mode_class)
            ../../../../gcc/gcc/stor-layout.cc:356
    0x11f75bb smallest_int_mode_for_size(poly_int<2u, unsigned long>)
            ../../../../gcc/gcc/machmode.h:916
    0x3304141 find_shift_sequence
            ../../../../gcc/gcc/dse.cc:1738
    0x3304f1a get_stored_val
            ../../../../gcc/gcc/dse.cc:1906
    0x3305377 replace_read
            ../../../../gcc/gcc/dse.cc:2010
    0x3306226 check_mem_read_rtx
            ../../../../gcc/gcc/dse.cc:2310
    0x330667b check_mem_read_use
            ../../../../gcc/gcc/dse.cc:2415

    After investigations, DSE is trying to do optimization like this following
codes:

    (insn 86 85 87 9 (set (reg:V4DI 168)
            (mem/u/c:V4DI (reg/f:DI 171) [0  S32 A128])) "bug.f90":6:18 discrim
6 1167 {*movv4di}
         (expr_list:REG_EQUAL (const_vector:V4DI [
                    (const_int 4 [0x4])
                    (const_int 1 [0x1]) repeated x2
                    (const_int 3 [0x3])
                ])
            (nil)))

    (set (mem) (reg:V4DI 168))

    Then it ICE on: auto new_mode = smallest_int_mode_for_size (access_size *
BITS_PER_UNIT);

    The access_size may be 24 or 32. We don't have such integer modes with
these size so it ICE.

    TODO: The better way maybe make DSE use native_encode_rtx/native_decode_rtx
          but I don't know how to do that.  So let's quickly fix this issue, we
          can improve the fix later.

            PR target/111590

    gcc/ChangeLog:

            * dse.cc (find_shift_sequence): Check the mode with access_size
exist on the target.

Reply via email to