<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/147511>147511</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[DebugInfo][NewGVN] Deleting instructions without salvaging their debug values
</td>
</tr>
<tr>
<th>Labels</th>
<td>
debuginfo,
llvm:transforms
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Apochens
</td>
</tr>
</table>
<pre>
In NewGVN, `NewGVN::eliminateInstructions` deletes instructions by first marking them for deletion. In the following code, the instruction is deleted after being marked without having its debug value salvaged.
https://github.com/llvm/llvm-project/blob/6c8c836b4f5a0b519db6f97c4882c6c061edd004/llvm/lib/Transforms/Scalar/NewGVN.cpp#L4079
Here is an example: https://godbolt.org/z/K4EanM9Ka. In this example, `%add2` is deleted and its debug value becomes poison.
```llvm
; Before NewGVN
define void @binop(i32 %x, i32 %y) !dbg !5 {
%add1 = add i32 %x, %y, !dbg !12
#dbg_value(i32 %add1, !9, !DIExpression(), !12)
%add2 = add i32 %y, %x, !dbg !13
#dbg_value(i32 %add2, !11, !DIExpression(), !13)
call void @use(i32 %add1, i32 %add2), !dbg !14
ret void, !dbg !15
}
; After NewGVN
define void @binop(i32 %x, i32 %y) !dbg !5 {
%add1 = add i32 %x, %y, !dbg !12
#dbg_value(i32 %add1, !9, !DIExpression(), !12)
#dbg_value(i32 poison, !11, !DIExpression(), !13)
call void @use(i32 %add1, i32 %add1), !dbg !14
ret void, !dbg !15
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMVVGP4yYQ_jXkBTUyA8T2gx-cy6WNrr2XVn2twIwTWgIR4Oxuf32F4-ym25NOrVqpUiQcYL75Zob5RqVkjx6xI3JL5G6lpnwKsesvYTihTysdzEt38PQzPn3782cCHyjZVMsf3hPeo7Nn61XGg085TkO2wSeyqahBhxkTtQ_7VL_Q0caU6VnF36w_0nzCMx1DvF23wa_pwZddOgbnwlO5MwSDxXPZfUCjNi1ODFVjxkg1lusFGg19svkUpkxP6lp2bS639XSkV-UmpEm5qzqiWZOqJ1V_yvmSSkSwJ7A_2nya9HoIZwJ756735ZtLDL_ikAnstQuawH4zNEPDN1qMUlVastbozdjWg2gaGDZDtWFoTFWJBxxb7H6KyqcxxHMisP9xUE5FAvtbYtfD5UKAfy-qur2x-w4jlnCVp_iszheHhPf0HedgdHB5HeKRwP53AvtP4qPyP7Sf1JJTm16tb3UkIJUxUKr1mEtv_pItjUM4Y6KXYFPwS84KwvybI6t6wrd0i2OIeH8uVW9wtB7pNVhDiai09eFCoLEcKAH5XIgs3y8EWkqAGX0si6Sk3pKqp_TGklHCd1QZQx9tb3YfHuwYzEbFjBt9_GXm_-axIC0G7bLuDh-fLxFTssETaAjcDxiU7zcK8J7C4vpO5ZUC_xoFuHtgX-XA7xwG5dxrHqf0hZj-hN--4yRmkIh5xnh3KEv16t1SVr6l_dxP_2IV_wdF_CLa7UH_x-Vg_7wc9xZbmY6blrdqhR2rJWvrhol6deqEMA1XumYANRNiIxopkCmh6nEcgDcr20EFsqqrhgGXvF3LkXNALkWrdNsOSESFZ2XdurRxkY-VTWnCjolaMrZySqNL83wAmDXB-jEQKG-YAMy9z_v8oGdQBknsZsHU0zERUTmbcnpzkG1288jZFbxDwZM7IrfLg5M7upvHQdHtx_Fx1_SbeC_zw8ZHqUqrKbrub8v5HHLR4iXqawd_BAAA___0ThLJ">