[HLSL][SPIRV] Fix calling convention for call in entry function. (#110542)
Fix the calling convention used for the call in the entry point wrapper. No calling convention is currently set. It can easily use the calling convention of the function that is being called. Without this, there is a mismatch in the calling convention between the call site and the callee. This is undefined behaviour.
This commit is contained in:
@@ -415,7 +415,7 @@ void CGHLSLRuntime::emitEntryFunction(const FunctionDecl *FD,
|
||||
}
|
||||
|
||||
CallInst *CI = B.CreateCall(FunctionCallee(Fn), Args);
|
||||
(void)CI;
|
||||
CI->setCallingConv(Fn->getCallingConv());
|
||||
// FIXME: Handle codegen for return type semantics.
|
||||
// See: https://github.com/llvm/llvm-project/issues/57875
|
||||
B.CreateRetVoid();
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
// CHECK: define void @foo()
|
||||
// CHECK-DXIL: %[[#ID:]] = call i32 @llvm.[[TARGET]].thread.id(i32 0)
|
||||
// CHECK-SPIRV: %[[#ID:]] = call i32 @llvm.[[TARGET]].thread.id(i32 0)
|
||||
// CHECK: call void @{{.*}}foo{{.*}}(i32 %[[#ID]])
|
||||
// CHECK-DXIL: call void @{{.*}}foo{{.*}}(i32 %[[#ID]])
|
||||
// CHECK-SPIRV: call spir_func void @{{.*}}foo{{.*}}(i32 %[[#ID]])
|
||||
[shader("compute")]
|
||||
[numthreads(8,8,1)]
|
||||
void foo(uint Idx : SV_DispatchThreadID) {}
|
||||
@@ -17,6 +18,7 @@ void foo(uint Idx : SV_DispatchThreadID) {}
|
||||
// CHECK: %[[#ID_Y:]] = call i32 @llvm.[[TARGET]].thread.id(i32 1)
|
||||
// CHECK: %[[#ID_XY:]] = insertelement <2 x i32> %[[#ID_X_]], i32 %[[#ID_Y]], i64 1
|
||||
// CHECK-DXIL: call void @{{.*}}bar{{.*}}(<2 x i32> %[[#ID_XY]])
|
||||
// CHECK-SPIRV: call spir_func void @{{.*}}bar{{.*}}(<2 x i32> %[[#ID_XY]])
|
||||
[shader("compute")]
|
||||
[numthreads(8,8,1)]
|
||||
void bar(uint2 Idx : SV_DispatchThreadID) {}
|
||||
|
||||
Reference in New Issue
Block a user