On Tue, Feb 27, 2018 at 02:22:22PM +0000, Richard Sandiford wrote: > Jakub Jelinek <ja...@redhat.com> writes: > > Hi! > > > > The following testcase ICEs, because the aarch64_cmeqdf instruction > > starting with r256612 no longer accepts CONST0_RTX (E_DFmode) as > > valid argument, but the expander generates it anyway. > > > > The bug has been introduced during the addition of aarch64_simd_imm_zero > > and aarch64_simd_or_scalar_imm_zero predicates, before the predicate > > used to be: > > (define_predicate "aarch64_simd_reg_or_zero" > > (and (match_code "reg,subreg,const_int,const_double,const_vector") > > (ior (match_operand 0 "register_operand") > > (ior (match_test "op == const0_rtx") > > (match_test "aarch64_simd_imm_zero_p (op, mode)"))))) > > with > > bool > > aarch64_simd_imm_zero_p (rtx x, machine_mode mode) > > { > > return x == CONST0_RTX (mode); > > } > > and so matched not just const,const_vector zeros, but also > > const_int zero (that is through op == const0_rtx) and const_double > > zero too. > > Thanks for fixing this. > > > Bootstrapped/regtested on aarch64-linux (scratch Fedora gcc 8 package build > > with the patch applied), ok for trunk? > > > > 2018-02-27 Jakub Jelinek <ja...@redhat.com> > > > > PR fortran/84565 > > * config/aarch64/predicates.md (aarch64_simd_reg_or_zero): Use > > aarch64_simd_or_scalar_imm_zero rather than aarch64_simd_imm_zero. > > > > * gfortran.dg/pr84565.f90: New test. > > > > --- gcc/config/aarch64/predicates.md.jj 2018-02-06 13:13:06.305751221 > > +0100 > > +++ gcc/config/aarch64/predicates.md 2018-02-26 16:30:01.902195208 > > +0100 > > @@ -395,7 +395,7 @@ (define_predicate "aarch64_simd_reg_or_z > > (and (match_code "reg,subreg,const_int,const_double,const,const_vector") > > (ior (match_operand 0 "register_operand") > > (match_test "op == const0_rtx") > > - (match_operand 0 "aarch64_simd_imm_zero")))) > > + (match_operand 0 "aarch64_simd_or_scalar_imm_zero")))) > > I think this makes the match_test on the line above redundant. > > LGTM otherwise (but I can't approve). We should probably clean up > the predicates so that the zero checks are more consistent. genrecog > could probably help by ignoring predicate codes that obviously don't > apply (CONST_INT for vectors, CONST_VECTOR for ints, etc.). But that's > obviously all stage 1 stuff.
OK. Thanks, James