<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">