From d98e44b34364f3e039c766adec470c5be517f1b4 Mon Sep 17 00:00:00 2001 From: Diana Picus Date: Tue, 20 Jun 2023 09:23:50 +0200 Subject: [PATCH] [AMDGPU][DAGISel] Be more flexible about what calls are allowed Remove DAGISel checks on calling conventions. GlobalISel doesn't have these checks either and we prefer it that way (see D152794). Add a simple test like the one introduced in D117479 for GlobalISel. Differential Revision: https://reviews.llvm.org/D153535 --- llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 15 --------------- llvm/test/CodeGen/AMDGPU/call-c-function.ll | 22 ++++++++++++++++++++++ llvm/test/CodeGen/AMDGPU/unsupported-calls.ll | 1 - 3 files changed, 22 insertions(+), 16 deletions(-) create mode 100644 llvm/test/CodeGen/AMDGPU/call-c-function.ll diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp index c6a1523..05ec9be 100644 --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -3198,21 +3198,6 @@ SDValue SITargetLowering::LowerCall(CallLoweringInfo &CLI, "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 index 0000000..ba52577 --- /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 index 3a752f4..81b5325 100644 --- a/llvm/test/CodeGen/AMDGPU/unsupported-calls.ll +++ b/llvm/test/CodeGen/AMDGPU/unsupported-calls.ll @@ -62,7 +62,6 @@ define i32 @test_tail_call_bitcast_extern_variadic(<4 x float> %arg0, <4 x float 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) -- 2.7.4