blob: 6213e1ae9ca30811e17871aa5aa00ffc6901ddba [file] [edit]
; RUN: llc %s -disable-dxil-remove-unused-resources --filetype=obj -o - | obj2yaml | FileCheck %s
; Two UAVs: `AtomicUAV` is used by a 64-bit atomicrmw, `PlainUAV` is only
; loaded/stored (no atomics). Only `AtomicUAV` should have the
; `UsedByAtomic64` PSV resource flag set.
target triple = "dxil-pc-shadermodel6.6-compute"
; CHECK: Resources:
; RWByteAddressBuffer AtomicUAV : register(u0);
; CHECK: - Type: UAVRaw
; CHECK: Space: 0
; CHECK: LowerBound: 0
; CHECK: UpperBound: 0
; CHECK: Kind: RawBuffer
; CHECK: Flags:
; CHECK: UsedByAtomic64: true
; RWBuffer<int> PlainUAV : register(u1);
; CHECK: - Type: UAVTyped
; CHECK: Space: 0
; CHECK: LowerBound: 1
; CHECK: UpperBound: 1
; CHECK: Kind: TypedBuffer
; CHECK: Flags:
; CHECK: UsedByAtomic64: false
define void @main() #0 {
%atomic = call target("dx.RawBuffer", i8, 1, 0)
@llvm.dx.resource.handlefrombinding.tdx.RawBuffer_i8_1_0t(
i32 0, i32 0, i32 1, i32 0, ptr null)
%atomicPtr = call ptr @llvm.dx.resource.getpointer(
target("dx.RawBuffer", i8, 1, 0) %atomic, i32 0)
%old = atomicrmw add ptr %atomicPtr, i64 1 monotonic
%plain = call target("dx.TypedBuffer", i32, 1, 0, 1)
@llvm.dx.resource.handlefrombinding.tdx.TypedBuffer_i32_1_0_1t(
i32 0, i32 1, i32 1, i32 0, ptr null)
%plainPtr = call ptr @llvm.dx.resource.getpointer(
target("dx.TypedBuffer", i32, 1, 0, 1) %plain, i32 0)
store i32 42, ptr %plainPtr
ret void
}
attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" }