llvm-project/clang/test/CodeGenHLSL/semantics/GroupIndex-codegen.hlsl
Chris Bieneman 22c477f934 [HLSL] Initial codegen for SV_GroupIndex
Semantic parameters aren't passed as actual parameters, instead they are
populated from intrinsics which are generally lowered to reads from
dedicated hardware registers.

This change modifies clang CodeGen to emit the intrinsic calls and
populate the parameter's LValue with the result of the intrinsic call
for SV_GroupIndex.

The result of this is to make the actual passed argument ignored, which
will make it easy to clean up later in an IR pass.

Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D131203
2022-08-25 11:17:54 -05:00

23 lines
845 B
HLSL

// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -emit-llvm -disable-llvm-passes -o - -hlsl-entry main %s
[numthreads(1,1,1)]
void main(unsigned GI : SV_GroupIndex) {
main(GI - 1);
}
// For HLSL entry functions, we are generating a C-export function that wraps
// the C++-mangled entry function. The wrapper function can be used to populate
// semantic parameters and provides the expected void(void) signature that
// drivers expect for entry points.
//CHECK: define void @main() #[[ENTRY_ATTR:#]]{
//CHECK-NEXT: entry:
//CHECK-NEXT: %0 = call i32 @llvm.dx.flattened.thread.id.in.group()
//CHECK-NEXT: call void @"?main@@YAXI@Z"(i32 %0)
//CHECK-NEXT: ret void
//CHECK-NEXT: }
// Verify that the entry had the expected dx.shader attribute
//CHECK: attributes #[[ENTRY_ATTR]] = { {{.*}}"dx.shader"="compute"{{.*}} }