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

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The following patterns has the same problem too:
(define_insn "aarch64_bfdot_lane<VBF:isquadop><VDQSF:mode>"
  [(set (match_operand:VDQSF 0 "register_operand" "=w")
        (plus:VDQSF
          (unspec:VDQSF
           [(match_operand:<VDQSF:VBFMLA_W> 2 "register_operand" "w")
            (match_operand:VBF 3 "register_operand" "w")
            (match_operand:SI 4 "const_int_operand" "n")]
            UNSPEC_BFDOT)
          (match_operand:VDQSF 1 "register_operand" "0")))]
  "TARGET_BF16_SIMD"
{
  int nunits = GET_MODE_NUNITS (<VBF:MODE>mode).to_constant ();
  int lane = INTVAL (operands[4]);
  operands[4] = gen_int_mode (ENDIAN_LANE_N (nunits / 2, lane), SImode);
  return "bfdot\t%0.<VDQSF:Vtype>, %2.<VDQSF:Vbfdottype>, %3.2h[%4]";
}
  [(set_attr "type" "neon_dot<VDQSF:q>")]

That is operand 3 should be using "x" constraint.

Reply via email to