[cfe-users] fetch variable names through debugInfo attached to load instructors

Bella V via cfe-users cfe-users at lists.llvm.org
Tue May 25 13:13:11 PDT 2021


Thanks! It works.

One sub-question: How do we analyze the member dereferenced struct
variables as dbg.declares only has the declaration info as inside the
function the struct variable types could have members dereferenced as well.

Example:

https://godbolt.org/z/zaeYn9do7

dbg.declares have use_var info, i would like to fetch address.id as well.



On Thu, May 20, 2021 at 12:25 PM David Blaikie <dblaikie at gmail.com> wrote:

> You'd have to analyze the dbg.declares and track that they refer to the
> same thing as the geps/loads you're interested in - from the dbg.declares
> (& dbg.values) you can follow those to find the variables they refer to.
>
> On Thu, May 20, 2021 at 12:18 PM Bella V via cfe-users <
> cfe-users at lists.llvm.org> wrote:
>
>> Hello All,
>>
>> I read the documentation and I was able to fetch the variable names and
>> source locations attached to metadata for call instructions
>> (@llvm.dbg.declare) using dyn_cast<DbgVariableIntrinsic>. I wanted to check
>> if we could fetch the variable names in the load/gep instructors using
>> debugInfo. I want to collect the use variable object details within the
>> function.
>>
>>
>>
>> I could only fetch the source locations (not the variable names) using
>> !dbg attached to the load instructions. Any pointers if that is allowed.
>>
>>
>> *C code:*
>>
>> int foo (bar_t *b, int len)
>>
>> {
>>
>>     if (b == (bar_t *)NULL) {
>>
>>         return 0;
>>
>>     }
>>
>>     return -1;
>>
>> }
>>
>>
>>
>> *IR optimised code through LTO:*
>>
>> ; Function Attrs: noinline nounwind optnone uwtable
>>
>> define i32 @foo(%struct.bar_t*, i32) #0 !dbg !10 {
>>
>>   %3 = load i64, i64* getelementptr inbounds ([1 x i64], [1 x i64]
>>
>>   %4 = add i64 %3, 1
>>
>>   %5 = alloca i32, align 4
>>
>>   %6 = alloca % struct.bar_t*, align 8
>>
>>   %7 = alloca i32, align 4
>>
>>   store % struct.bar_t* %0, % struct.bar_t** %6, align 8
>>
>>   call void @llvm.dbg.declare(metadata % struct.bar_t** %6, metadata !11,
>> metadata !DIExpression()), !dbg !12
>>
>>   store i32 %1, i32* %7, align 4
>>
>>   call void @llvm.dbg.declare(metadata i32* %7, metadata !12, metadata
>> !DIExpression()), !dbg !14
>>
>>   %8 = load % struct.bar_t*, % struct.bar_t** %6, align 8, !dbg !15
>>
>>   %9 = icmp eq % struct.bar_t* %8, null, !dbg !16
>>
>>   br i1 %9, label %10, label %11, !dbg !17
>>
>>
>>
>> Many Thanks.
>> _______________________________________________
>> 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/20210525/3ae632b1/attachment.html>


More information about the cfe-users mailing list