<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/118883>118883</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            DWARF `DW_tag_variable` dropped for PHINode in DILexicalBlock
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          topolarity
      </td>
    </tr>
</table>

<pre>
    ```llvm
define i32 @square(i32, i32) local_unnamed_addr #0 !dbg !4 {
    %3 = alloca i32, align 4
    store i32 %0, i32* %3, align 4
    call void @llvm.dbg.declare(metadata i32* %3, metadata !12, metadata !DIExpression()), !dbg !9
    call void @llvm.dbg.value(metadata i32 %1, metadata !13, metadata !DIExpression()), !dbg !9
    %4 = icmp eq i32 %1, 0
    call void @llvm.dbg.value(metadata i1 %4, metadata !10, metadata !DIExpression()), !dbg !9
    br i1 %4, label %arg1, label %arg2

arg1:
    %5 = load i32, ptr %3, align 4, !dbg !9
 %6 = mul nsw i32 %5, %5
    br label %ret

arg2:
    %7 = mul nsw i32 %1, %1
    br label %ret

ret:
    %8 = phi i32 [%6, %arg1], [%7, %arg2], !dbg !9
    tail call void @llvm.dbg.value(metadata i32 %8, metadata !7, metadata !DIExpression()), !dbg !15
    ret i32 %8
}

declare void @llvm.dbg.value(metadata, metadata, metadata) #1
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1

attributes #1 = { nofree nosync nounwind readnone speculatable willreturn }

!llvm.dbg.cu = !{!2}
!llvm.module.flags = !{!0, !1}

!0 = !{i32 7, !"Dwarf Version", i32 5}
!1 = !{i32 2, !"Debug Info Version", i32 3}

!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "test", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
!3 = !DIFile(filename: "square.ll", directory: "")
!4 = distinct !DISubprogram(name: "square", linkageName: "square", scope: !3, file: !3, line: 1, type: !5, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !16)
!5 = !DISubroutineType(types: !6)
!6 = !{!8, !8, !8}
!7 = !DILocalVariable(name: "result", scope: !14, file: !3, line: 14, type: !8)
!8 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_unsigned)
!9 = !DILocation(line: 2, column: 1, scope: !4)
!10 = !DILocalVariable(name: "branch", scope: !4, file: !3, line: 14, type: !11)
!11 = !DIBasicType(name: "i1", size: 1, encoding: DW_ATE_unsigned)
!12 = !DILocalVariable(name: "x", arg: 1, scope: !4, file: !3, line: 1, type: !8)
!13 = !DILocalVariable(name: "y", arg: 2, scope: !4, file: !3, line: 1, type: !8)
!14 = distinct !DILexicalBlock(scope: !4, file: !3, line: 100, column: 5)
!15 = !DILocation(line: 100, column: 50, scope: !14)
!16 = !{}
```

Checking with:
```console
$ llc test.ll -o a.o -O0 --filetype=obj
$ ./usr/tools/llvm-dwarfdump ./a.o | grep AT_name
              DW_AT_name ("square.ll")
                DW_AT_name      ("square")
 DW_AT_name    ("x")
                  DW_AT_name    ("y")
 DW_AT_name      ("i32")
```

The debug information for "result" is missing

It seems to be related to the fact that the PHINode is the only user of the DILexicalBlock. It works if you either:

1. Use the `DILexicalBlock` in more locations:
```diff
@@ -19,5 +19,5 @@
 ret:
 %8 = phi i32 [%6, %arg1], [%7, %arg2], !dbg !9
     tail call void @llvm.dbg.value(metadata i32 %8, metadata !7, metadata !DIExpression()), !dbg !15
-    ret i32 %8
+    ret i32 %8, !dbg !15
 }
```
2. Use the `DISubprogram` as the scope of `result`:
```diff
@@ -38,7 +38,7 @@
 !4 = distinct !DISubprogram(name: "square", linkageName: "square", scope: !3, file: !3, line: 1, type: !5, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !16)
 !5 = !DISubroutineType(types: !6)
 !6 = !{!8, !8, !8}
-!7 = !DILocalVariable(name: "result", scope: !14, file: !3, line: 14, type: !8)
+!7 = !DILocalVariable(name: "result", scope: !4, file: !3, line: 14, type: !8)
 !8 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_unsigned)
 !9 = !DILocation(line: 2, column: 1, scope: !4)
 !10 = !DILocalVariable(name: "branch", scope: !4, file: !3, line: 14, type: !11)
@@ -46,5 +46,5 @@
 !12 = !DILocalVariable(name: "x", arg: 1, scope: !4, file: !3, line: 1, type: !8)
 !13 = !DILocalVariable(name: "y", arg: 2, scope: !4, file: !3, line: 1, type: !8)
 !14 = distinct !DILexicalBlock(scope: !4, file: !3, line: 100, column: 5)
-!15 = !DILocation(line: 100, column: 50, scope: !14)
+!15 = !DILocation(line: 100, column: 50, scope: !4)
 !16 = !{}
```

Identified on LLVM 18.1.7
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWN9z4jgS_mvESxeULf_APPAAYbmjLjc7dZOdeaSEJRvtyJJXkpNh__oryTZgIJlkd-bycimqsKzur1tft6SPEGN4KRmbo2SJktWINHav9NyqWgmiuT2Mdooe5igN2o8QjxUKFpQVXDLgEQYUB-aPhmiGcMYjjPAd-K8ZCJUTsW2kJBWjW0KpBoSjABAO6a50XzGg6RIFCwAAhJMIULQCIpwjdFhE8FJC3BkZq3QXFifBMdbCe1-b50QIeFScuixd6hO6KyeU5aLNt2KWUGLJJcrxPcJhiC_frDa_fKs1M4YriXCG8Mx_7s4WNnsxgUcimsvwLnZ4FfsqmzfERjiJPaE8r2pgfwyiBG9MMPRwV_kFfyO_nT6HFWTHhBsRXYaXLzAKFihY-KlocVpf4tcnFKF9u9RWX_XCdXSEk9S7Vo0AaZ56apLWNklOKR7T0Mwes8CDLKa3oMIOKnwJyj2cI2Ueqd7zFiVZukQ7IL_4ZOVHfmJ6msD9xBXJlnDxxi7MLms6_QtFDnsKNbMn4GCBpqt26d0m_H5a58GHzzN3nIQvYV3v9FeguRJbq_muscz4l74qaLoEqQrNGEhlDjIHqRr5xCUFzQiVSjIwNcsbQSzZCQZPXAjNbKMlHFeNcHhMLm9aXBy6QxCHuLPqTCpFG8EmhSClGRoGHdXhOWxwZuP47rojRBivnogu4DPTbb36IxqSY8DwwhmfObNdU8JGFuoGQnSeAfYglBvLZW7bPrlTVc0F-01yi3AmiCwbUjIULWD1ZXu_-PCP7d3Md07BhX-NcHvm1VrRJme6fYctM7aPa36tLa_4n4y6yYIIw9x73UjLK9YnGS3A88Qq7vv0X1x6-3UjhF-TmzS14NaPNlJwyWU5gHQX14OrZe_8QUnmWt2vN-pJW23WLnucuUU4ny7p9lqcCNFlTrlmuVX60M37TwcW3yDvU7OrtSo1qRDOrnA7UMHlV1KyD89Mm1zVA2IviRZc-rE_r-zhaJwcve87i9bdtaOv32YtSPlRK6ucF23pXJ-mP310g5UTCtz6trmDxvVBi--z08wSLhn9oCgz3USYHklJTgx_anZaNZZL9uByxJkL2rucPNLhTsm6Pj599x0_PUHfO5nymWjuKj1kWjPTCHuDyjB-kcv4gszsmGB2irskhufdas5i-ousDcj_bIn3IyZzRbsOXX3ZLh5-2TbSizd6RJ8NV9XSnvVpeZhciaaSx4qfLyo-4pxOkxfp2Wki8_0Net7GThieAoff5ye8oCd8LTvdCfW9VX3r8Ikun6Pp9dvoVPnz8-KF6Idh9DdS-3z0WwfMPfvGcyKWQuVfEc5eHyYIhq2UnOIkL7bgtWdwa2v1YIPt3G7d_odIe-3c7Vn-lcsSnrjdt1LqaJEraZRgHioGIXJwt8hECBgrIBMF418DGI_dIlvKVmr3e2c9QXjdGI3w2iolDMJrdyePqbtJaVPV3sBhoOkdlJrVsHjY-iq2quf055vRT4GXShe3wuzKYeACrTDMhse6dxpatTbfnsW8RG3tD8_B9Qb9YTS7pv5hz4B6ccBloXTlSw2F0oODE7gBfwPLsnXbWDCMVQasgh0DzQSxjLqR3TMoSG7B7on1o4__3LibwWG4oZLiAI1hGlThXww7eAIbC09KfzXACzioBhi3ey8h2tDhBH4zzHuiNLho_zQALqFyPy9F17fmoqEoLwo3jgMUBzAOnXBJAOFl_-QnHJknXf9TRP37qvrxLVmPl1dvb_weuN7D-KImZ5onDYC0hffHgys6SoOus9Lg5eJELv7UFad_Ohbn_2rrhtqCt8steLXeGr-f4Fr-_dB_KTL8XK0HP0rswfupvW6nxml_jPZP5zv1HTUbvK9og_-Vahv_YNm2_CF45_35XRm4oUxaXnBGQUm4v__8bwizSTiZjug8orNoRkZsHk6jKI6S6Swd7ed5UBCcZrMkjAqWJsFsmsZ4ymYxTmazKA5GfI4DHIc4SHCYpFE6YWER0zyiU0ryNME5igNWES4m_upVuhxxYxo2D8Msy6KR_2ef8f9Wx1iyJ_Czrk-S1UjPvZzcNaVxdzc31pxgLLeCzVdfFv9Z-zvxy9aScvvYN14aANWqrhn1YuuokeSFHBo1Wsz31tZexuA1wuuS232zm-Sq6gRtr2trrX5nuUV47bN0erdbxuMc_zcAAP__TpahQQ">