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

--- Comment #10 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Jakub Jelinek from comment #9)
> We need to adjust md.texi too.
> Also, I see there are 7 different uses of constraint "C" in i386.md with
> general_operand predicate, are you sure you don't want "BC" for those?
> Stuff like
> *movti_internal
> *movdi_internal
> *movsi_internal
> *movtf_internal
> *movxf_internal
> *movdf_internal
> *movsf_internal
> Though, all those don't use vector mode on those operands, and I bet
> standard_sse_constant_p in that case never returns 2, so maybe that is fine.

Yes this is fine. The function checks for vector mode, which is never the case
in above examples. We could introduce nonimmediate_or_sse_const_operand with
corresponding BC constraint, but not today.

> But then there is another thing, the old "C" would never match anything, not
> even the const0_rtx/CONST0_RTX, if !TARGET_SSE, while your patch matches it
> no matter whether -msse is on or not.  E.g. for the above mentioned
> *mov*_internal insns, but there it is used if the destination is y, x, v
> constraint.  But e.g. in *movxf_internal it is into o.

Indeed. Let's write "C" constraint to check
"standard_sse_constant_p (...) == 1".

Reply via email to