[llvm] d98e44b - [AMDGPU][DAGISel] Be more flexible about what calls are allowed

Diana Picus via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 27 00:49:44 PDT 2023


Author: Diana Picus
Date: 2023-06-27T09:49:38+02:00
New Revision: d98e44b34364f3e039c766adec470c5be517f1b4

URL: https://github.com/llvm/llvm-project/commit/d98e44b34364f3e039c766adec470c5be517f1b4
DIFF: https://github.com/llvm/llvm-project/commit/d98e44b34364f3e039c766adec470c5be517f1b4.diff

LOG: [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

Added: 
    llvm/test/CodeGen/AMDGPU/call-c-function.ll

Modified: 
    llvm/lib/Target/AMDGPU/SIISelLowering.cpp
    llvm/test/CodeGen/AMDGPU/unsupported-calls.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
index c6a1523ea3eff..05ec9be96c162 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 0000000000000..ba52577902f29
--- /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 3a752f4a8d721..81b53252f45e8 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)


        


More information about the llvm-commits mailing list