Skip to content

Commit 6de0eb9

Browse files
committed
[HLSL] generate hlsl.wavesize attribute
Generate function attribute hlsl.wavesize from [WaveSize]. For #70118
1 parent b89bb77 commit 6de0eb9

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

clang/lib/CodeGen/CGHLSLRuntime.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,13 @@ void clang::CodeGen::CGHLSLRuntime::setHLSLEntryAttributes(
338338
NumThreadsAttr->getZ());
339339
Fn->addFnAttr(NumThreadsKindStr, NumThreadsStr);
340340
}
341+
if (HLSLWaveSizeAttr *WaveSizeAttr = FD->getAttr<HLSLWaveSizeAttr>()) {
342+
const StringRef WaveSizeKindStr = "hlsl.wavesize";
343+
std::string WaveSizeStr =
344+
formatv("{0},{1},{2}", WaveSizeAttr->getMin(), WaveSizeAttr->getMax(),
345+
WaveSizeAttr->getPreferred());
346+
Fn->addFnAttr(WaveSizeKindStr, WaveSizeStr);
347+
}
341348
Fn->addFnAttr(llvm::Attribute::NoInline);
342349
}
343350

clang/test/CodeGenHLSL/wavesize.hlsl

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \
2+
// RUN: dxil-pc-shadermodel6.6-compute %s -DSM66 -hlsl-entry foo \
3+
// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s
4+
5+
// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \
6+
// RUN: dxil-pc-shadermodel6.8-compute %s -hlsl-entry foo \
7+
// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s --check-prefix=CHECK-SM68
8+
9+
10+
// Make sure wavesize attribute get correct value for sm66 and sm68.
11+
// CHECK:define void @foo()
12+
// CHECK:"hlsl.wavesize"="8,0,0"
13+
14+
// CHECK-SM68:define void @foo()
15+
// CHECK-SM68:"hlsl.wavesize"="8,128,64"
16+
17+
[numthreads(16,8,1)]
18+
#ifdef SM66
19+
[WaveSize(8)]
20+
#else
21+
[WaveSize(8, 128, 64)]
22+
#endif
23+
void foo() {
24+
25+
}

0 commit comments

Comments
 (0)