| Issue |
165750
|
| Summary |
[DirectX] Unsupported intrinsic `llvm.fshl.i64` for DXIL lowering
|
| Labels |
backend:DirectX
|
| Assignees |
|
| Reporter |
Icohedron
|
https://godbolt.org/z/f6r7ThrcG
For the following shader, Clang emits the `llvm.fshl.i64` intrinsic which is not supported for DXIL lowering.
```hlsl
struct Pair {
int32_t a;
int32_t b;
};
RWStructuredBuffer<Pair> src;
RWStructuredBuffer<Pair> dest;
Pair Swap(Pair p) {
Pair result;
result.a = p.b;
result.b = p.a;
return result;
}
[numthreads(1, 1, 1)]
void CSMain(uint3 Tid : SV_GroupThreadID) {
dest[Tid.x] = Swap(src[Tid.x]);
}
```
```llvm
define void @CSMain() local_unnamed_addr #1 {
entry:
%0 = tail call target("dx.RawBuffer", %struct.Pair, 1, 0) @llvm.dx.resource.handlefromimplicitbinding.tdx.RawBuffer_s_struct.Pairs_1_0t(i32 0, i32 0, i32 1, i32 0, ptr nonnull @.str)
%1 = tail call target("dx.RawBuffer", %struct.Pair, 1, 0) @llvm.dx.resource.handlefromimplicitbinding.tdx.RawBuffer_s_struct.Pairs_1_0t(i32 2, i32 0, i32 1, i32 0, ptr nonnull @.str.2)
%2 = tail call i32 @llvm.dx.thread.id.in.group(i32 0)
%3 = tail call noundef nonnull align 1 dereferenceable(8) ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_s_struct.Pairs_1_0t(target("dx.RawBuffer", %struct.Pair, 1, 0) %0, i32 %2)
%4 = load i64, ptr %3, align 1
%5 = tail call noundef nonnull align 1 dereferenceable(8) ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_s_struct.Pairs_1_0t(target("dx.RawBuffer", %struct.Pair, 1, 0) %1, i32 %2)
%ref.tmp.i.sroa.0.0.insert.insert = tail call i64 @llvm.fshl.i64(i64 %4, i64 %4, i64 32)
store i64 %ref.tmp.i.sroa.0.0.insert.insert, ptr %5, align 1
ret void
}
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs