http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50788

--- Comment #6 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2011-10-23 
11:27:22 UTC ---
> It is OK for expanders to have match_dup. We just don't want to have
> post-reload passes to trip on double-output to the same register.

No disagreement.  I just wanted to state the argument for the + approach, but
the manual clearly points to the match_operand approach here instead.

> BTW: There is another spot with similar problem:
> 
> @@ -8011,7 +8011,8 @@
>    [(set (mem:V16QI (match_operand:P 0 "register_operand" "D"))
>      (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "x")
>                 (match_operand:V16QI 2 "register_operand" "x")
> -               (mem:V16QI (match_dup 0))]
> +               (mem:V16QI
> +             (match_operand:P 3 "register_operand" "0"))]
>                UNSPEC_MASKMOV))]
>    "TARGET_SSE2"
>    "%vmaskmovdqu\t{%2, %1|%1, %2}"
> 
> While compilation won't break here, IMO we should tell the reload that we have
> matching constraint.

Indeed.

Reply via email to