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

    <tr>
        <th>Summary</th>
        <td>
            "inst not in same function as #dbg_assign" after hotcoldsplit
        </td>
    </tr>

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

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

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

<pre>
    While investigating a clang crash https://github.com/apple/llvm-project/issues/8741, I was able to find a reduced IR that fails to verify after `hotcoldsplit`. 

```
opt -passes=hotcoldsplit -S < input.ll
```

# input.ll
```ll
; RUN: opt -passes=hotcoldsplit -S < %s -o /dev/null 2>&1 | FileCheck %s

target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define void @_foo() !dbg !4 {
entry:
  br i1 false, label %if.then7, label %common.ret

common.ret:                                       ; preds = %entry
  call void @llvm.dbg.assign(metadata i64 0, metadata !7, metadata !DIExpression(DW_OP_LLVM_fragment, 0, 64), metadata !12, metadata ptr null, metadata !DIExpression()), !dbg !13
  ret void

if.then7: ; preds = %entry
  %call21 = load i1, ptr null, align 4294967296
  store i64 0, ptr null, align 8, !DIAssignID !12
  unreachable
}

declare void @llvm.dbg.assign(metadata, metadata, metadata, metadata, metadata, metadata)

!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!3}

!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, splitDebugInlining: false, nameTableKind: None)
!1 = !DIFile(filename: "file.cpp", directory: "foo")
!2 = !{}
!3 = !{i32 2, !"Debug Info Version", i32 3}
!4 = distinct !DISubprogram(name: "foo", linkageName: "_foo", scope: !5, file: !1, line: 425, type: !6, scopeLine: 425, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !2)
!5 = !DINamespace(name: "llvm", scope: null)
!6 = distinct !DISubroutineType(types: !2)
!7 = !DILocalVariable(name: "Path", scope: !4, file: !1, line: 436, type: !8)
!8 = !DIDerivedType(tag: DW_TAG_typedef, name: "string", scope: !9, file: !1, line: 79, baseType: !10)
!9 = !DINamespace(name: "std", scope: null)
!10 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "basic_string<char, std::char_traits<char>, std::allocator<char> >", scope: !11, file: !1, line: 85, size: 256, flags: DIFlagTypePassByReference | DIFlagNonTrivial, elements: !2, templateParams: !2, identifier: "_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE")
!11 = !DINamespace(name: "__cxx11", scope: !9, exportSymbols: true)
!12 = distinct !DIAssignID()
!13 = !DILocation(line: 0, scope: !4)
```

The crash goes away if I add `-hotcoldsplit-threshold=200`, which tells me that splitting `_foo()` is causing the verifier to fail.

Is this a bug in `hotcoldsplit`? I'm skeptical because `@llvm.dbg.assign()` and `!DIAssignID !12` are in two different blocks, so I'm wondering if this is valid IR. If this is not valid, then some prior pass must have broken it while I was using `llvm-reduce` to find a minimal reproducer.

CC @SLTozer becase you seem to have recent commits with `DIAssignID`. 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUWFtv4zoO_jXqC5EglnOxH_KQSZqDYLs9xWnPDLAvgWwzNreyZEhyL_PrF5KdxOmk07ODgWuJpEh-vFiMsJZKhbhks29strkRrau0WaKUZKvyJtPF-_JHRRKB1AtaR6VwpEoQkEuhSsiNsBVUzjWWxSvGt4xvS3JVm41zXTO-FU0jkfGtlC_1qDH6v5g7xrdkbYuW8W2ymEaMr2EHr8KCyCSC03AgVYAAg0WbYwG7v8BVwsFBkLSe_oKGDu8gDg4NsPmk0i7XsrCNJMfmkzGwyYZNVv1zPun_h6VuHIwaYS1aFm-GkjB6BBavgVTTurGUV8X7J48_YzttxN_gr7_vWbyCr1UyPrMw0sD4tsAXxreqlRI4i28Zn0fAFmvYksR1hflzYB4a44Qp0UEhnJDiXbcOWLwBxjmOahavcNTwxYTFq5iHh19Gl0v_Np-Gx4iOL4fEC0U8GanEv8yPMvPp6DHiCeP8Qr8z1Eg86n5L5vv5dNSqZ6Vf1UiSat9GpWpPUt2zwAMphBdNBbDpZH_QmvmjU2A8KrLS_5kCW3zr2FE58-4zLawAMgMUwUFIiz6LpMhQenzoMHYVqsXFZq7rWquxQTe0YLAbr-Cf_fOxbQwWtvd21tnVG5ULKU8e-cQfF1k57kqN8aRGJ3ysgOZTmHgLTzuMR4uPG5vd7Vtj0FrSXnrzY__nw_7u7vu_9wcjyhqV8xLhnPmU8fSjfMQvdhpnwCfXF2rCQeGscxyi-OihQRccHOJ4gjxefYGPD4WQkkeBKrUogEITGNomJJUKpjydpvMFT-dHYeu0wTN0v4okvdGb3Sogvtv0KPQHtMqgyCvfanrzF5vLjMylMPgPAjiE8P9_Ty_7SXTSk7c9apFPex5Nzgb2XLUuWonjgxSlveSNPzjjxQNHQdaRyl2HzFrXDUn8W5FjPPGdvBUl-shtfuzvVvd_7Nf7Rra2e0RTb_mBZODwYPo12T8bRzX9xMJvO9OGEjStclTjdzQhk-JVFyesKaTWv0gF9m0r5QaztgxE1da2Pztka-iNgbxTkhSp0lNPZa5EjU8-gMfT7rXCM6I8io6obHa-bTKeeOu9WKeF--U4bxrfjfgaCjKYOx1aSyD7LsSHJ_IhzoN4xIN9ijnwPvsY58F-2KmDhiManTbPFw8PmV4J0WObNUaXRtSMJ0PLe9PWIEk9ixLvz7T9mWhz3RzDNbsWPkkqrKc8kN37iX1-kr-75An5FpJkt5WifDDaaS9XhO9Tt7mSci2ktBu0uaEMiy6c27Po44NfbHzfJ0da9cLd9jml-Bpan56dTSGHDDpBCot7XeAgXc5Bmp3D7lGxjcjxEj1fPh8R6trH-ZT59WgY3TpS-OSB4on3-6oNi7MNdzoX8rswFHrNhR0PwlVXInW10E6RiucfIpUMFSdnxRs09ILF0VRR9pX9tPpjHwKGh2MZ9fZYZ3yR_WpR-juLFoGaCduh0nNMhlalX4bEuuKriHzaw7Qlh1fdzKWwNjj7wdNMWMr3vb_xOq-ECbqdbyQsXvmNvTOCnD2S_SVswCGk1Llw2pzpEHh-Aa9D6zP0klBUln6GFZ_Nr9SY9-1BWPvt_S88oEGV46DY7rV6MvRCInz-UKK_DVw0Uod1I4XDB2HEZYulApWjA6E5No__PD3eP7rFfp-_vUVRdIHULn90UTTAZpffPopdfnt7-6FRDnvvJxHvNXyWbfjWaOMe3-tMS3v-tAxU8CvpcPzY93eXE298WY-uu94cYzC5UoHpb-79TxX2M0-p0YJ4Fe9AB9iBKAo_iIyGl_uRqwzaSsuCxRs-CWfxNbxWlFfgUEoLNXaTTeAPkxWbDy7BbD4BspCL1nqaq7AbfQhNGJMEyfHQvJ0FV5EFAf7TQ-rKbMTiLewYX9Rgn7FxlAsJGXoN6LmvXnh6S4QKPl67W3mqv5YpcK8aCjqEZHWQSZ0_2wCy7tW-alWgzykPXLCWLLwISX7OG8PuvKm06wghkytUYHWN0BjSBvw4BXVrHVTiBSEz-hkVkPPwSuznyQ62MJS91KNunPS2nkfMmhTVQoLBxmhPNheArtf-Cvh496R_ogk4WYR33YJFrP0xQbnB3DvrJwlyFl7JVV7pICn9THpTLOMijVNxg8toEc3ixWIWpTfVsiiKNJ_lSZJmWV7wREwWOIsmB0zTeMGT9IaWfMKnk1k04dF0FqXjJFmkkzTlebTIeJrkbDrB2idDiJ025U0YsJdplETTmzAA2TDic67wFQLRl99sc2OWAZusLa2PPVlnz6c4chKXjHNS1oV4kAIraoRDq_Lw9RYWGI-LrNwf04X3c_kw8W5aI5e_-Zmg-y5_-itB8ON_AQAA___e3-vD">