# Why is julia-debug producing redundant debug intrinsics?

**URL:** <https://discourse.julialang.org/t/why-is-julia-debug-producing-redundant-debug-intrinsics/3655>\
**Category:** Internals & Design\
**Tags:** question, debug\
**Created:** [May 11, 2017, 6:34pm UTC](https://discourse.julialang.org/t/why-is-julia-debug-producing-redundant-debug-intrinsics/3655 "2017-05-11T18:34:39Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![singam-sanjay](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/singam-sanjay/32/1721_2.png) [@singam-sanjay](https://discourse.julialang.org/u/singam-sanjay)\
**Post date:** [May 11, 2017, 6:34pm UTC](https://discourse.julialang.org/t/why-is-julia-debug-producing-redundant-debug-intrinsics/3655/1 "2017-05-11T18:34:39Z")

</div>

When the following function’s IR is generated by julia-debug,

```julia
function add_mat(a,b)
         ni,nj = size(a)
         for i=1:ni
           for j=1:nj
             a[i,j] = a[i,j] + b[i,j]
           end
         end
       end

```

Some of the `@llvm.dbg.value`s are repeated, sometimes even in the next line.

```julia
[...]
 12 call void @llvm.dbg.value(metadata i8** null, i64 0, metadata !15, metadata !23), !dbg !22
 13 call void @llvm.dbg.value(metadata i8** null, i64 0, metadata !16, metadata !23), !dbg !22
[...]
 68 call void @llvm.dbg.value(metadata i64 %"#temp#1.010", i64 0, metadata !19, metadata !23), !dbg !22
 69 call void @llvm.dbg.value(metadata i64 %"#temp#.09", i64 0, metadata !17, metadata !23), !dbg !22
 70 %24 = add i64 %"#temp#1.010", -1, !dbg !29
 71 %25 = add i64 %"#temp#.09", -1, !dbg !29
 72 %26 = mul i64 %25, %6, !dbg !29
 73 %27 = add i64 %24, %26, !dbg !29
 74 %28 = getelementptr double, double* %3, i64 %27, !dbg !29
 75 %29 = load double, double* %28, align 8, !dbg !29, !tbaa !30
 76 call void @llvm.dbg.value(metadata i64 %"#temp#1.010", i64 0, metadata !19, metadata !23), !dbg !22
 77 call void @llvm.dbg.value(metadata i64 %"#temp#.09", i64 0, metadata !17, metadata !23), !dbg !22
 78 %30 = mul i64 %25, %11, !dbg !29
 79 %31 = add i64 %24, %30, !dbg !29
 80 %32 = getelementptr double, double* %8, i64 %31, !dbg !29
 81 %33 = load double, double* %32, align 8, !dbg !29, !tbaa !30
 82 %34 = fadd double %29, %33, !dbg !29
 83 call void @llvm.dbg.value(metadata i64 %"#temp#1.010", i64 0, metadata !19, metadata !23), !dbg !22
 84 call void @llvm.dbg.value(metadata i64 %"#temp#.09", i64 0, metadata !17, metadata !23), !dbg !22
[...]

```

[add\_mat.ll](https://gist.github.com/singam-sanjay/af88c6c91dd9ef46aba593923178d907)

The intrinsics are present even around instructions that don’t use the register the intrinsic is about.

So, why is julia-debug producing redundant debug intrinsics ?

I’m having an issue with code generating NVPTX kernels in Polly whenever it has to deal with debug information. Just guessing this might be a possible reason.

---

<div class="post-metadata">

**Author:** ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)\
**Post date:** [May 11, 2017, 7:10pm UTC](https://discourse.julialang.org/t/why-is-julia-debug-producing-redundant-debug-intrinsics/3655/2 "2017-05-11T19:10:20Z")

</div>

Which ones are repeated? They appears to be all different.

---

<div class="post-metadata">

**Author:** ![singam-sanjay](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/singam-sanjay/32/1721_2.png) [@singam-sanjay](https://discourse.julialang.org/u/singam-sanjay)\
**Post date:** [May 12, 2017, 7:49am UTC](https://discourse.julialang.org/t/why-is-julia-debug-producing-redundant-debug-intrinsics/3655/3 "2017-05-12T07:49:30Z")

</div>

I’m sorry. I’ve applied the same text-formatting on repetitive metadata

> [@singam-sanjay](#):
>
> **68 call void @llvm.dbg.value(metadata i64 %“#temp#1.010”, i64 0, metadata !19, metadata !23), !dbg !22**  
> _**69 call void @llvm.dbg.value(metadata i64 %“#temp#.09”, i64 0, metadata !17, metadata !23), !dbg !22**_  
> 70 %24 = add i64 %“#temp#1.010”, -1, !dbg !29  
> 71 %25 = add i64 %“#temp#.09”, -1, !dbg !29  
> 72 %26 = mul i64 %25, %6, !dbg !29  
> 73 %27 = add i64 %24, %26, !dbg !29  
> 74 %28 = getelementptr double, double\* %3, i64 %27, !dbg !29  
> 75 %29 = load double, double\* %28, align 8, !dbg !29, !tbaa !30  
> **76 call void @llvm.dbg.value(metadata i64 %“#temp#1.010”, i64 0, metadata !19, metadata !23), !dbg !22**  
> **_77 call void @llvm.dbg.value(metadata i64 %“#temp#.09”, i64 0, metadata !17, metadata !23), !dbg !22_**  
> 78 %30 = mul i64 %25, %11, !dbg !29  
> 79 %31 = add i64 %24, %30, !dbg !29  
> 80 %32 = getelementptr double, double\* %8, i64 %31, !dbg !29  
> 81 %33 = load double, double\* %32, align 8, !dbg !29, !tbaa !30  
> 82 %34 = fadd double %29, %33, !dbg !29  
> **83 call void @llvm.dbg.value(metadata i64 %“#temp#1.010”, i64 0, metadata !19, metadata !23), !dbg !22**  
> **_84 call void @llvm.dbg.value(metadata i64 %“#temp#.09”, i64 0, metadata !17, metadata !23), !dbg !22_**  
> […]
