[cfe-dev] Inline Assembly Comments

Manuel Rigger via cfe-dev cfe-dev at lists.llvm.org
Thu Jul 13 07:59:49 PDT 2017


I filed a bug (see https://bugs.llvm.org/show_bug.cgi?id=33770).

It seems the comment is swallowed (i.e., it is also not on the next line).
I verified this locally and using Compiler Explorer (see
https://godbolt.org/). Removing the trailing semicolon lets the comment
appear when using Clang 4.0, but not on versions below it.

- Manuel

2017-07-13 16:36 GMT+02:00 Nirav Davé <niravd at google.com>:

> AFAIK we retain all assembly comments by default. I just tried this
> locally and it seems to work as expected with inline assembly comments
> should be preserved by default.
>
> I suspect the comment does exist, but is on the next line. Currently, the
> trailing semicolon at the end of your instruction is interpreted as an EOL
> so the following comment is interpreted as a full line comment (We may want
> to change that). If you remove the semicolon you should find it on the same
> line.
>
> -Nirav
>
>
> On Thu, Jul 13, 2017 at 7:51 AM, Manuel Rigger via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
>
>> Hi,
>>
>> I'm investigating how inline assembly is used in C projects. While doing
>> so, I found that a number of projects include comments as part of their
>> inline assembly snippets. The code snippet below is an example:
>>
>> #include <stdint.h>
>>
>> uint64_t atomic_swap_long(volatile uint64_t *p, uint64_t v) {
>>   __asm __volatile(
>>     "xchgq %1,%0; # atomic_swap_long"
>> : "+r" (v),   /* 0 */
>>  "+m" (*p)); /* 1 */
>>   return v;
>> }
>>
>>
>> When compiling with GCC (gcc -O1 -S) the following code is produced for
>> the inline assembly snippet on my system:
>>
>>  #APP
>> # 4 "inline-assembly-comment.c" 1
>> xchgq (%rdi),%rax; # atomic_swap_long
>> # 0 "" 2
>> #NO_APP
>>
>>
>> With Clang 3.8 and below, an empty line is inserted instead of the
>> comment:
>>
>> #APP
>> xchgq %rsi, (%rdi)
>> #NO_APP
>>
>>
>> With Clang 3.9 and 4.0, the newline disappeared but the comment is still
>> not part of the assembly code.
>>
>> The comment is retained on the LLVM IR level:
>>
>> %5 = call i64 asm sideeffect "xchgq\09$1,$0; # atomic_swap_long",
>> "=r,=*m,0,*m,~{dirflag},~{fpsr},~{flags}"(i64* %4, i64 %3, i64* %4)
>>
>>
>> Is this intended? Should I open a bug report?
>>
>> - Manuel
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170713/a380723c/attachment.html>


More information about the cfe-dev mailing list