On Thu, Dec 4, 2025, 7:35 AM Jakub Jelinek <[email protected]> wrote:

> Hi!
>
> The newly added gcc.dg/pr122991.c test fails also on aarch64.
> The problem is the same as on x86 which has been fixed in r16-5882,
> while the last operand is guaranteed to be a CONST_INT of the right
> mode initially, maybe_legitimize_operands can change that if some earlier
> operand has the same value and e.g. register_operand predicate has been
> used, that operand is forced into a pseudo and maybe_legitimize_operands
> then checks if that satisfies the predicate of the other operand.
> As on x86 and aarch64 it didn't have any predicate, it happily used
> a pseudo in those cases instead of the expected CONST_INT.
>
> The following patch fixes that.
>
> Bootstrapped/regtested on aarch64-linux, ok for trunk?
>

Ok


> 2025-12-03  Jakub Jelinek  <[email protected]>
>
>         PR target/122991
>         * config/aarch64/aarch64.md (crc_rev<ALLI:mode><ALLX:mode>4,
>         crc<ALLI:mode><ALLX:mode>4): Use const_int_operand predicate for
>         the last operand.
>
> --- gcc/config/aarch64/aarch64.md.jj    2025-11-27 21:34:24.278458825 +0100
> +++ gcc/config/aarch64/aarch64.md       2025-12-03 23:16:59.177095868 +0100
> @@ -4917,7 +4917,7 @@ (define_expand "crc_rev<ALLI:mode><ALLX:
>     ;; data
>     (match_operand:ALLI 2 "register_operand" "r")
>     ;; polynomial without leading 1
> -   (match_operand:ALLX 3)]
> +   (match_operand:ALLX 3 "const_int_operand")]
>    ""
>    {
>      /* If the polynomial is the same as the polynomial of crc32c*
> instruction,
> @@ -4956,7 +4956,7 @@ (define_expand "crc<ALLI:mode><ALLX:mode
>     ;; data
>     (match_operand:ALLI 2 "register_operand" "r")
>     ;; polynomial without leading 1
> -   (match_operand:ALLX 3)]
> +   (match_operand:ALLX 3 "const_int_operand")]
>    "TARGET_AES && <ALLI:sizen> <= <ALLX:sizen>"
>    {
>      aarch64_expand_crc_using_pmull (<ALLX:MODE>mode, <ALLI:MODE>mode,
>
>         Jakub
>
>

Reply via email to