[cfe-dev] Inline Assembly Comments

Nirav Davé via cfe-dev cfe-dev at lists.llvm.org
Thu Jul 13 08:46:50 PDT 2017


It looks like godbolt's comment filtering is removing the line if it gets
placed on a separate line. The comments do appear for 4.0 and later.

-Nirav

On Thu, Jul 13, 2017 at 10:59 AM, Manuel Rigger <rigger.manuel at gmail.com>
wrote:

> 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/13969f29/attachment.html>


More information about the cfe-dev mailing list