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

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Robin Dapp <rd...@gcc.gnu.org>:

https://gcc.gnu.org/g:e5e1999aa664333f766f3e6cc6996f769d50ae7a

commit r14-6556-ge5e1999aa664333f766f3e6cc6996f769d50ae7a
Author: Robin Dapp <rd...@ventanamicro.com>
Date:   Wed Dec 13 16:42:28 2023 +0100

    expmed: Compare unit_precision for better mode.

    In extract_bit_field_1 we try to get a better vector mode before
    extracting from it.  Better refers to the case when the requested target
    mode does not equal the inner mode of the vector to extract from and we
    have an equivalent tieable vector mode with a fitting inner mode.

    On riscv this triggered an ICE (PR112999) because we would take the
    detour of extracting from a mask-mode vector via a vector integer mode.
    One element of that mode could be subreg-punned with TImode which, in
    turn, would need to be operated on in DImode chunks.

    This patch adds

        && known_eq (bitsize, GET_MODE_UNIT_PRECISION (new_mode))
        && multiple_p (bitnum, GET_MODE_UNIT_PRECISION (new_mode))

    to the list of criteria for a better mode.

    gcc/ChangeLog:

            PR target/112999

            * expmed.cc (extract_bit_field_1):  Ensure better mode
            has fitting unit_precision.

    gcc/testsuite/ChangeLog:

            * gcc.target/riscv/rvv/autovec/pr112999.c: New test.

Reply via email to