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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Seems the latest change resulted in various inline asms with "=m" constraint to
fall through into return false rather than decompose_address.
The problem to me seems to be that constraint is "=m" (and generally, it is the
whole constraint string, rather than some particular constraint in it),
and lookup_constraint looks up only a particular constraint (say "m") etc.
So it only returns something other than CONSTRAINT__UNKNOWN if it is an input
operand rather than output (because that necessarily starts with = or +) and
doesn't have any other modifiers etc. in it and it has a single variant or the
first variant is the one that is considered.
There are other spots that do the same though, e.g. simplify_operand_subreg:
          || ((get_constraint_type (lookup_constraint
                                    (curr_static_id->operand[nop].constraint))
               != CT_SPECIAL_MEMORY)
While e.g. process_alt_operands walks the whole constraint string and handles
everything in there.

I'm afraid I must be missing something important.

Reply via email to