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

    <tr>
        <th>Summary</th>
        <td>
            [DirectX] PostOptimizationValidation asserts on overlapping bindings when the free space is out of order with the overlapping binding
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:DirectX
      </td>
    </tr>

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

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

<pre>
    Consider:
```llvm
; RUN: not opt -S -passes='dxil-post-optimization-validation' -mtriple=dxil-pc-shadermodel6.3-library %s 2>&1 | FileCheck %s

; Check overlap with a gap in the binding space.

; A overlaps with B
; RWBuffer<float> A[3] : register(u0);
; RWBuffer<float> B[] : register(u4);
; RWBuffer<float> C : register(u17);

; CHECK: error: resource C at register 17 overlaps with resource B at register 4 in space 0

@A.str = private unnamed_addr constant [2 x i8] c"A\00", align 1
@B.str = private unnamed_addr constant [2 x i8] c"B\00", align 1
@C.str = private unnamed_addr constant [2 x i8] c"C\00", align 1

define void @test_overlapping() {
entry:
  %h1 = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 3, i32 0, i1 false, ptr @A.str)
  %h2 = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding(i32 0, i32 4, i32 -1, i32 0, i1 false, ptr @B.str)
  %h3 = call target("dx.TypedBuffer", float, 1, 0, 0) @llvm.dx.resource.handlefrombinding(i32 0, i32 17, i32 1, i32 0, i1 false, ptr @C.str)
  ret void
}
```

We should see an overlapping binding error here, but we currently trigger an assert instead: https://github.com/llvm/llvm-project/blob/c66f401e1eb6157cd0114634b27004cd78cfe5aa/llvm/lib/Analysis/DXILResource.cpp#L978

This needs to correctly report that there's an overlap instead of asserting.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEVU2P2zYQ_TX0ZWCDIiXLPuhgyTFaNGiLNG1yCyhxJLGhSYGknHV_fUFJ3vXmo4vmEsCQaXnecN7j44zwXnUGsSBZSbLjSoyht66obWfQrWorr0VljVcSHeEHQg9kS-eP1pdz_M1LePPnr4QfwNgAdgiw_gPWg_AePeFHwnL5oPR6sD6s7RDUWf0jgrJmfRFayWlJWA7rc3Bq0Ej4cY5v1r4XEt3ZStTbDV9rVTvhrkBY5oER_oqwbQIkr-CkNFY9Nh-n_2JRc13zO3tBp8UAn1ToQUAnBlAGQo9QKyOV6cAPosHNE-5ww_gZVN54vivHto1KVK22IhD-Cg4kKznJjhAVcNgpH9ARthspYXvC_wtazpp_gUxfRFZfYJL8CbSQ_-lV9UsMQ-esm-O9HV2DUIEIj2hI8s_oPsaVz-LSKNskFdBlm5QeNj44IPwIg1MXERBGY8QZ5QchpYPGGh-ECUCyksEDqF0k3BDGDiSrKCWMEVaB0KozkMwpy-9NWX4zZfW9KatvpKQHia0yCBerJJCUBvThwyLjoExH2I6wPZA8ngia4K7z9YFo0T6ZammE1hCE6zBM4Uw-bN5eB5TLgc-7zofOKkjigy6Pfdw0XsGNfNjcDmzTCyM1ts6eF2sTtlOczahnC_78TQKt0B7jeohKLQcbPXWrmf2omtPbYp28VHT5edH8RxUd7-Oyeqno6r5oh2HyVDRZfrzvt7Pt3iH43o5agkcEYeDOc4_9bLrx0KObtqnHAJ8QmtE5NEFfITjVdegiOnZpF0AZH1DI2CT6EAYfvcpOhJ06Ffqx3jT2TNhp6vjz13pw9m9sAmGnWtuasFOz3bYpTTDBeptkeSNpkqRbntYspzRtZL5rWsyEuMujIu5ghL565Qk7Hd___PrNTeFmGAjjr_f5bib-tlceDKL0ECw01jlsIhmHg3UBQi_iY6Kc-zthbtzAtgtbZbrNShZc7vlerLBI8ozzPd_ydNUXyGuW7XC_zeqW7nbJPqtl2rataFIqt2m7UgWjLKM5S1mS5km6aWXb7BMqs5ZTKdOWpBTPQunNZBrrupXyfsQiyWjG05UWNWo_jVvGatF8RBN1P6rI5320YnZcuWISuR47H92nfPBP6YIKeprXN0x2hN-tD7_dDde_HmfrQtqD_apXPHzqcZ6GrUNc-rvyYMcQJbNOopvHQoz5SobV6HTxv10zaRIPfZHlUrB_AwAA__9l26OE">