From 951979f4707ad4277212bdbb1ea29e38a9e44fe9 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Wed, 23 Jul 2025 11:06:14 +0200 Subject: [PATCH] asm clobber constrains: '~memory' allows reads and synchronization --- llvm/docs/LangRef.rst | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst index bac13cc0424a6..9f792fa392cca 100644 --- a/llvm/docs/LangRef.rst +++ b/llvm/docs/LangRef.rst @@ -5448,10 +5448,13 @@ Clobber constraints A clobber constraint is indicated by a "``~``" prefix. A clobber does not consume an input operand, nor generate an output. Clobbers cannot use any of the general constraint code letters -- they may use only explicit register -constraints, e.g. "``~{eax}``". The one exception is that a clobber string of -"``~{memory}``" indicates that the assembly writes to arbitrary undeclared -memory locations -- not only the memory pointed to by a declared indirect -output. +constraints, e.g. "``~{eax}``". + +The one exception is that a clobber string of "``~{memory}``" indicates that the +assembly reads and writes arbitrary undeclared memory locations -- not only the +memory pointed to by a declared indirect output. Furthermore, the assembly may +also cause synchronization with other threads, such as via release/acquire +fences and atomic memory accesses. Note that clobbering named registers that are also present in output constraints is not legal.