Issue |
142836
|
Summary |
[DirectX] GEPs to multi-dimensional TGSM arrays are incorrectly flattened
|
Labels |
new issue
|
Assignees |
|
Reporter |
Icohedron
|
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.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs