diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -3198,21 +3198,6 @@ "unsupported required tail call to function "); } - if (AMDGPU::isShader(CallConv)) { - // Note the issue is with the CC of the called function, not of the call - // itself. - return lowerUnhandledCall(CLI, InVals, - "unsupported call to a shader function "); - } - - if (AMDGPU::isShader(MF.getFunction().getCallingConv()) && - CallConv != CallingConv::AMDGPU_Gfx) { - // Only allow calls with specific calling conventions. - return lowerUnhandledCall(CLI, InVals, - "unsupported calling convention for call from " - "graphics shader of function "); - } - if (IsTailCall) { IsTailCall = isEligibleForTailCallOptimization( Callee, CallConv, IsVarArg, Outs, OutVals, Ins, DAG); diff --git a/llvm/test/CodeGen/AMDGPU/call-c-function.ll b/llvm/test/CodeGen/AMDGPU/call-c-function.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/call-c-function.ll @@ -0,0 +1,22 @@ +; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py +; RUN: llc -global-isel=0 -stop-after=finalize-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -verify-machineinstrs -o - %s | FileCheck -enable-var-scope %s + +; Test that we don't explode on calls from shaders to functions with the C calling convention. + +define amdgpu_ps void @amdgpu_ps_call_default_cc() { + ; CHECK-LABEL: name: amdgpu_ps_call_default_cc + ; CHECK: bb.0.main_body: + ; CHECK-NEXT: S_ENDPGM 0 +main_body: + call void null() + ret void +} + +define amdgpu_gfx void @amdgpu_gfx_call_default_cc() { + ; CHECK-LABEL: name: amdgpu_gfx_call_default_cc + ; CHECK: bb.0.main_body: + ; CHECK-NEXT: SI_RETURN +main_body: + call void null() + ret void +} diff --git a/llvm/test/CodeGen/AMDGPU/unsupported-calls.ll b/llvm/test/CodeGen/AMDGPU/unsupported-calls.ll --- a/llvm/test/CodeGen/AMDGPU/unsupported-calls.ll +++ b/llvm/test/CodeGen/AMDGPU/unsupported-calls.ll @@ -62,7 +62,6 @@ ret i32 %call } -; GCN: :0:0: in function test_c_call_from_shader i32 (): unsupported calling convention for call from graphics shader of function defined_function ; R600: in function test_c_call{{.*}}: unsupported call to function defined_function define amdgpu_ps i32 @test_c_call_from_shader() { %call = call i32 @defined_function(i32 0)