[cfe-users] Get Source Location details from IR code (Function Pass)

David Blaikie via cfe-users cfe-users at lists.llvm.org
Wed Jan 27 10:00:52 PST 2021


from the llvm::Function you can get a DISubprogram (Function's
getSubprogram), from there you could get the DISubprogram's type (getType)
and then poke around at the elements of the type, I guess.

On Tue, Jan 26, 2021 at 10:39 PM Bella V <bellavistaghome at gmail.com> wrote:

> Thank you for the clarification. How do we access DICompositeType: line
> numbers from Function &F or Module &M.
>
> On Tue, Jan 26, 2021 at 9:43 PM David Blaikie <dblaikie at gmail.com> wrote:
>
>> the location of composite types isn't stored in a DILocation - it's
>> stored in the 'file'/'line' attributes of the DICompositeType (similarly,
>> the members have a 'file' and 'line' attribute).
>>
>> See for instance line 39 of the LLVM IR in https://godbolt.org/z/o3oce5 :
>>
>> !12 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo",
>> file: !8, line: 1, size: 32, flags: DIFlagTypePassByValue, elements: !13,
>> identifier: "_ZTS3Foo")
>>
>> Note the 'file:' and 'line: fields there. (the file field refers to !8
>> which is !8 = !DIFile(filename: "./example.cpp", directory: "/home/ce"))
>>
>> On Tue, Jan 26, 2021 at 5:15 PM Bella V <bellavistaghome at gmail.com>
>> wrote:
>>
>>> Thanks for the answer.
>>> struct Foo
>>> {int x;};
>>>
>>> Void bar() {
>>> struct Foo f;
>>> f.x = 1;
>>> }
>>>
>>> I'm trying to access the DILocation for DICompositeType (Foo), that is
>>> the Source Location for struct Foo and struct members. Any pointers.
>>>
>>> Regards.
>>>
>>> On Sun, Jan 17, 2021 at 11:20 AM David Blaikie <dblaikie at gmail.com>
>>> wrote:
>>>
>>>> Not sure I understand the question - llvm.dbg.declare can be
>>>> queried/examined/etc through the usual LLVM IR APIs, yes - it's an
>>>> intrinsic call, with operands, etc. It's a DbgVariableIntrinsic (
>>>> https://llvm.org/doxygen/classllvm_1_1DbgVariableIntrinsic.html ) you
>>>> can interrogate for information.
>>>>
>>>> On Fri, Jan 15, 2021 at 7:17 PM Bella V <bellavistaghome at gmail.com>
>>>> wrote:
>>>> >
>>>> > Thank you. Also Is there a pragmatically way to access the metadata
>>>> info for local variables within the llvm.dbg.declare.
>>>> > ( llvm::Value does not have local variables).
>>>> >
>>>> > On Tue, Jan 12, 2021 at 1:55 PM David Blaikie <dblaikie at gmail.com>
>>>> wrote:
>>>> >>
>>>> >> You'd have to get IR from somewhere that has attached debug info -
>>>> such as clang -g
>>>> >>
>>>> >> On Tue, Jan 12, 2021 at 1:22 PM Bella V <bellavistaghome at gmail.com>
>>>> wrote:
>>>> >>>
>>>> >>> Do we have to initially attach some metadata to the Value? Because
>>>> in function pass, when I do F.getAllMetadata(MDs), i do not see any
>>>> metadata appending to MDS.
>>>> >>> F.hasMetadata() also returns false. What would be the way to get
>>>> debugLoc in these scenario?
>>>> >>>
>>>> >>> Thanks and Regards.
>>>> >>>
>>>> >>> On Mon, Jan 11, 2021 at 6:31 PM David Blaikie <dblaikie at gmail.com>
>>>> wrote:
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>> On Mon, Jan 11, 2021 at 4:33 PM Ayush Mittal via cfe-users <
>>>> cfe-users at lists.llvm.org> wrote:
>>>> >>>>>
>>>> >>>>> Hello Cfe Users,
>>>> >>>>>
>>>> >>>>> Could you please point to an effective way to get Source Location
>>>> details from an IR code.
>>>> >>>>> From the documentation, I think this could be a way:
>>>> >>>>> Function Pass-> LLVM Value-> MDN->DILocation-> Source Location.
>>>> >>>>
>>>> >>>>
>>>> >>>> Yep, that's about it (I mean, you can do it in a pass, or not -
>>>> but  yes, find an llvm::Value and get the debugLoc from that)
>>>> >>>>
>>>> >>>>>
>>>> >>>>> Please include any example if the above approach is correct too.
>>>> >>>>>
>>>> >>>>> Thanks and Regards.
>>>> >>>>> _______________________________________________
>>>> >>>>> cfe-users mailing list
>>>> >>>>> cfe-users at lists.llvm.org
>>>> >>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users
>>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20210127/168a1a07/attachment.html>


More information about the cfe-users mailing list