[cfe-dev] compiling CUDA w/ -fdebug-default-version=5 generates invalid PTX
Alexey.Bataev via cfe-dev
cfe-dev at lists.llvm.org
Thu Dec 3 12:35:17 PST 2020
-------------
Best regards,
Alexey Bataev
12/3/2020 3:28 PM, Artem Belevich пишет:
>
>
> On Thu, Dec 3, 2020 at 11:57 AM Alexey.Bataev <a.bataev at outlook.com
> <mailto:a.bataev at outlook.com>> wrote:
>
> Hi Artem, here is what I found about this.
>
> These labels are emitted only if DWARF 4 or 5 is used.They are
> required for emission of the DW_AT_call_site attribute. The info
> about callsites also emitted for lineinfo emission with debug info
> for profiling like in your example (-O1 -gmlt).
>
> Thank you for looking into this.
>
>
> Call/CallUni instruction is treated as a separate instruction by
> the debug info generator and it treats it as a separate call and
> emits labels for it.
>
> Would it help if we were to fold the whole call.uni into a single line?
If it would be a single instruction - yes, it should fix it.
> It appears that swarf injects the label after the call instruction
> line gets printed.
Actually, it may insert the label before (for tail calls) and after a call.
> What is the label supposed to point at? At the call instruction
> itself? Or at the return point?
The labels just point on the start and the end of function call, i.e. it
must be inserted before call (for tail calls) and right after call.
>
> You can try to mark the CallUni instructions as hasDelaySlot = 1
> or stop treating it as a call instruction in NVPTXInstrInfo.td.
> Can't say which one is better/correct. Looks like the
> representation for call/call.uni is not quite compatible with the
> debug info
>
> David suggested not allowing -fdebug-default-version=5 to override the
> DWARF version provided by NVPTX back-end. That would make sense,
> considering that we can't handle the newer DWARF versions anyways.
Yes, that's a good idea. If we need to change it we still can use LLVM
option to override the DWARF version.
>
> Let me see if I can fix the lineinfo generation first.
>
> --Artem
>
> -------------
> Best regards,
> Alexey Bataev
>
> 12/2/2020 6:00 PM, Artem Belevich пишет:
>> Hi, Alexey!
>>
>> I've ran into an odd case with debug info generation in NVPTX.
>>
>> Reproduction:
>> ------------------------
>> __device__ __attribute__((noinline)) void bar() { printf("Hi!"); }
>> __global__ void foo() { bar(); }
>> int main(){}
>> ------------------------
>>
>> $ clang++ -v --cuda-gpu-arch=sm_70 --cuda-device-only
>> -fdebug-default-version=5 a.cu <http://a.cu> -gmlt -O1 -c
>>
>> Compilation fails due to a syntax error reported by ptxas.
>> The reason for the error is that clang generates a label in the
>> middle of a `call.uni` instuction. E.g:
>>
>> { // callseq 1, 0
>> .reg .b32 temp_param_reg;
>> call.uni
>> Ltmp14:
>> _Z3barv,
>> (
>> );
>> } // callseq 1
>>
>> The odd part is that we're only generating line info and there is
>> no DWARF in the generated PTX.
>> It appears that this behavior is triggered by `-dwarf-version=5`
>> passed to cc1.
>> Looks like another case where PTX syntax breaks DWARF generator
>> assumptions.
>>
>> It's possible to work around it with an additional `-Xarch_device
>> -fdebug-default-version=2`,
>> but I'd appreciate it if you could take a look and see if that
>> could be fixed.
>>
>> --
>> --Artem Belevich
>
>
>
> --
> --Artem Belevich
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20201203/1ff4090e/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20201203/1ff4090e/attachment-0001.sig>
More information about the cfe-dev
mailing list