[PATCH] D107141: [Inline-asm] Add semacheck for unsupported constraint

Jennifer Yu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 2 01:28:29 PDT 2021


jyu2 added a comment.

>>> I don't find any document about GCC and ICC's behavior and the generated

code doesn't make much sense to me. Besides, if we change "=rm" to "=r"
or "=m", GCC and ICC will report error differently. Which gives me an
impression that the use of constraint is undefined behavior.

Here is gcc document: https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#OutputOperands

To me it is defined behavior.  Or I may missing some thing here.

constraint:
A string constant specifying constraints on the placement of the operand; See Constraints, for details.

Output constraints must begin with either ‘=’ (a variable overwriting an existing value) or ‘+’ (when reading and writing). When using ‘=’, do not assume the location contains the existing value on entry to the asm, except when the operand is tied to an input; see Input Operands.

After the prefix, there must be one or more additional constraints (see Constraints) that describe where the value resides. Common constraints include ‘r’ for register and ‘m’ for memory. When you list more than one possible location (for example, "=rm"), the compiler chooses the most efficient one based on the current context. If you list as many alternates as the asm statement allows, you permit the optimizers to produce the best possible code. If you must use a specific register, but your Machine Constraints do not provide sufficient control to select the specific register you want, local register variables may provide a solution (see Local Register Variables).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D107141/new/

https://reviews.llvm.org/D107141



More information about the cfe-commits mailing list