[cfe-dev] Inline Assembly Comments

Manuel Rigger via cfe-dev cfe-dev at lists.llvm.org
Mon Jul 17 01:39:10 PDT 2017


Ah, okay. Locally, I only tested Clang versions up to 3.9.

Should we close the bug report? Having slightly different conventions than
GCC here is probably not an issue.

- Manuel

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

> 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/20170717/121c0d73/attachment.html>


More information about the cfe-dev mailing list