Skip to content

Commit

Permalink
[HLSL] generate hlsl.wavesize attribute (#107176)
Browse files Browse the repository at this point in the history
Generate function attribute hlsl.wavesize from [WaveSize].

For #70118
  • Loading branch information
python3kgae authored Sep 18, 2024
1 parent 7046a9f commit 0f77bdd
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 0 deletions.
7 changes: 7 additions & 0 deletions clang/lib/CodeGen/CGHLSLRuntime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,13 @@ void clang::CodeGen::CGHLSLRuntime::setHLSLEntryAttributes(
NumThreadsAttr->getZ());
Fn->addFnAttr(NumThreadsKindStr, NumThreadsStr);
}
if (HLSLWaveSizeAttr *WaveSizeAttr = FD->getAttr<HLSLWaveSizeAttr>()) {
const StringRef WaveSizeKindStr = "hlsl.wavesize";
std::string WaveSizeStr =
formatv("{0},{1},{2}", WaveSizeAttr->getMin(), WaveSizeAttr->getMax(),
WaveSizeAttr->getPreferred());
Fn->addFnAttr(WaveSizeKindStr, WaveSizeStr);
}
Fn->addFnAttr(llvm::Attribute::NoInline);
}

Expand Down
34 changes: 34 additions & 0 deletions clang/test/CodeGenHLSL/wavesize.hlsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \
// RUN: dxil-pc-shadermodel6.6-compute %s -DSM66 -hlsl-entry foo \
// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s

// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \
// RUN: dxil-pc-shadermodel6.8-compute %s -DNO_PREFERR -hlsl-entry foo \
// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s --check-prefix=NO_PREFERR

// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \
// RUN: dxil-pc-shadermodel6.8-compute %s -hlsl-entry foo \
// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s --check-prefix=CHECK-SM68


// Make sure wavesize attribute get correct value for sm66 and sm68.
// CHECK:define void @foo()
// CHECK:"hlsl.wavesize"="8,0,0"

// NO_PREFERR:define void @foo()
// NO_PREFERR:"hlsl.wavesize"="8,128,0"

// CHECK-SM68:define void @foo()
// CHECK-SM68:"hlsl.wavesize"="8,128,64"

[numthreads(16,8,1)]
#ifdef SM66
[WaveSize(8)]
#elif NO_PREFERR
[WaveSize(8, 128)]
#else
[WaveSize(8, 128, 64)]
#endif
void foo() {

}

0 comments on commit 0f77bdd

Please sign in to comment.