AMDGPU: Error on calls from graphics shaders
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Thu, 28 Jun 2018 10:18:36 +0000 (10:18 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Thu, 28 Jun 2018 10:18:36 +0000 (10:18 +0000)
In principle nothing should stop these from working, but
work is necessary to create an ABI for dealing with the stack
related registers.

llvm-svn: 335829

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

index 2936e17..9481e2c 100644 (file)
@@ -2310,6 +2310,13 @@ SDValue SITargetLowering::LowerCall(CallLoweringInfo &CLI,
                               "unsupported required tail call to function ");
   }
 
+  if (AMDGPU::isShader(MF.getFunction().getCallingConv())) {
+    // Note the issue is with the CC of the calling function, not of the call
+    // itself.
+    return lowerUnhandledCall(CLI, InVals,
+                          "unsupported call from graphics shader of function ");
+  }
+
   // The first 4 bytes are reserved for the callee's emergency stack slot.
   const unsigned CalleeUsableStackOffset = 4;
 
index 68872c5..434ba03 100644 (file)
@@ -67,3 +67,10 @@ define void @test_indirect_call(void()* %fptr) {
   call void %fptr()
   ret void
 }
+
+; GCN: :0:0: in function test_call_from_shader i32 (): unsupported call from graphics shader of function defined_function
+; R600: in function test_call{{.*}}: unsupported call to function defined_function
+define amdgpu_ps i32 @test_call_from_shader() {
+  %call = call i32 @defined_function(i32 0)
+  ret i32 %call
+}