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 > >
