Skip to content

Commit 682d101

Browse files
adding test
1 parent cfb0d93 commit 682d101

File tree

3 files changed

+44
-2
lines changed

3 files changed

+44
-2
lines changed

llvm/lib/Target/DirectX/DXIL.td

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,6 @@ def BufferStore : DXILOp<69, bufferStore> {
732732

733733
def UpdateCounter : DXILOp<70, bufferUpdateCounter> {
734734
let Doc = "increments/decrements a buffer counter";
735-
let LLVMIntrinsic = int_dx_updateCounter;
736735
let arguments = [
737736
HandleTy, Int8Ty
738737
];

llvm/lib/Target/DirectX/DXILOpLowering.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,28 @@ class OpLowerer {
463463
});
464464
}
465465

466+
[[nodiscard]] bool lowerUpdateCounter(Function &F) {
467+
IRBuilder<> &IRB = OpBuilder.getIRB();
468+
469+
return replaceFunction(F, [&](CallInst *CI) -> Error {
470+
IRB.SetInsertPoint(CI);
471+
Value *Handle =
472+
createTmpHandleCast(CI->getArgOperand(0), OpBuilder.getHandleType());
473+
Value *Op1 = CI->getArgOperand(1);
474+
475+
std::array<Value *, 2> Args{Handle, Op1};
476+
477+
Expected<CallInst *> OpCall =
478+
OpBuilder.tryCreateOp(OpCode::UpdateCounter, Args, CI->getName());
479+
480+
if (Error E = OpCall.takeError())
481+
return E;
482+
483+
CI->eraseFromParent();
484+
return Error::success();
485+
});
486+
}
487+
466488
[[nodiscard]] bool lowerTypedBufferStore(Function &F) {
467489
IRBuilder<> &IRB = OpBuilder.getIRB();
468490
Type *Int8Ty = IRB.getInt8Ty();
@@ -600,6 +622,9 @@ class OpLowerer {
600622
case Intrinsic::dx_typedBufferStore:
601623
HasErrors |= lowerTypedBufferStore(F);
602624
break;
625+
case Intrinsic::dx_updateCounter:
626+
HasErrors |= lowerUpdateCounter(F);
627+
break;
603628
// TODO: this can be removed when
604629
// https://github.com/llvm/llvm-project/issues/113192 is fixed
605630
case Intrinsic::dx_splitdouble:

llvm/test/CodeGen/DirectX/updateCounter.ll

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,29 @@
33

44
target triple = "dxil-pc-shadermodel6.6-compute"
55

6-
define void @loadv4f32() {
6+
define void @update_counter_decrement_vector() {
77
%buffer = call target("dx.TypedBuffer", <4 x float>, 0, 0, 0)
88
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4f32_0_0_0(
99
i32 0, i32 0, i32 1, i32 0, i1 false)
1010

1111
call void @llvm.dx.updateCounter(target("dx.TypedBuffer", <4 x float>, 0, 0, 0) %buffer, i8 -1)
1212
ret void
1313
}
14+
15+
define void @update_counter_increment_vector() {
16+
%buffer = call target("dx.TypedBuffer", <4 x float>, 0, 0, 0)
17+
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4f32_0_0_0(
18+
i32 0, i32 0, i32 1, i32 0, i1 false)
19+
20+
call void @llvm.dx.updateCounter(target("dx.TypedBuffer", <4 x float>, 0, 0, 0) %buffer, i8 1)
21+
ret void
22+
}
23+
24+
define void @update_counter_decrement_scalar() {
25+
%buffer = call target("dx.RawBuffer", i8, 0, 0)
26+
@llvm.dx.handle.fromBinding.tdx.RawBuffer_i8_0_0t(
27+
i32 1, i32 8, i32 1, i32 0, i1 false)
28+
29+
call void @llvm.dx.updateCounter(target("dx.RawBuffer", i8, 0, 0) %buffer, i8 -1)
30+
ret void
31+
}

0 commit comments

Comments
 (0)