<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/142836>142836</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[DirectX] GEPs to multi-dimensional TGSM arrays are incorrectly flattened
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Icohedron
</td>
</tr>
</table>
<pre>
The DXIL Flatten Arrays pass is incorrectly transforming `getelementptr` instructions operating on mutli-dimensional global groupshared memory arrays.
https://godbolt.org/z/evPPPWEfT
IR dump before flatten arrays (`-mllvm -stop-before=dxil-flatten-arrays`):
```llvm
@g = local_unnamed_addr addrspace(3) global [2 x [2 x float]] zeroinitializer, align 4, !dbg !0
...
%2 = tail call i32 @llvm.dx.thread.id(i32 0)
%3 = getelementptr inbounds nuw [2 x [2 x float]], ptr addrspace(3) @g, i32 0, i32 %2, i32 1, !dbg !91
%4 = load float, ptr addrspace(3) %3, align 4, !dbg !91, !tbaa !92
```
IR dump after flatten arrays:
```llvm
@g.1dim = local_unnamed_addr addrspace(3) global [4 x float] zeroinitializer, align 4
...
%2 = tail call i32 @llvm.dx.thread.id(i32 0)
%3 = getelementptr inbounds [4 x float], ptr addrspace(3) @g.1dim, i32 1
%4 = load float, ptr addrspace(3) %3, align 4, !dbg !91
```
As can be seen, the GEP after flatten arrays is incorrect and out-of-bounds.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8VFGPozYQ_jXmZQQyhpDwwEOu2axWaqWoXan3dhrwBFwZG9lmb3d_fWVCdJe95h6qqhJiBjzj-b75RoPeq94QNWzziW0OCc5hsK556uxA0lmTtFa-Nc8DweHz069w1BgCGdg7h28eJvQelAdlOuscdUG_QXBo_Nm6UZkeWMV7CqRpJBOm4FjFQRkf3NwFZY0HO5HDEEOtgXEOWqVSjWS8sgY19Nq20Tg7T35ARxJGGq17A1wQZIzvGd8PIUyeFXsmjkwceytbq0NmXc_E8Z2JI72cTqc_H87Pl_Cn30HO4wQtna0jOK-kLlcCEztW8XTU-mWE1Ac7pZdAVhzkq9LpGp9e4lnFmahjcb6P_vLE3Phd8h5YcQBtO9RfZmNwJPkFpXQQX37CjpjYFUzUV65s80nA69WctcXANge2OcA7OauMCgq1eifHxC-AWvUGyugykcu2j4Yzvs-y2BoAJjZiQRBQaehQa1CFAFYuEDP5moXBEcpMSSZ28Whhs6YWS-qNgqBMa2cjPZj5632wEVGM_oFlbEk8XEtdnIjy6ue3ZOr8CqZcO4lyLXS3hNgUd5tTX-8PLeLyQ3wv3O2A4DmQ-zAf95XOcqnGfyF3-V3rfiby_6LqBzw_1XEh_E23_1qnH2TZe-jQQEvgiUyMDwPB48PpH4W6WUyARoKdQ2rP6YVplsimkHVRY0JNvi1rXhW7qk6GJs87arGtc7HlkmRVllshsOJ1LeS22NaJagQXG17xMq95KeqsJHkWRY6lzEussWIlpxGVzhY5rOsT5f1MTV6KXVElGlvSflm5Qhj6CsspEyJuYNfEpLSdex_1VD74b9cEFfSyqw8qsvocJ-bx4eQhWBhnHW635_PjH79dm4GObtb02iuSyex082GBqjDMbdbZkYnjMuAXk07O_kVdYOK4IPZMHFdKL434OwAA__90-u6V">