summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2018-06-28 10:18:36 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2018-06-28 10:18:36 +0000
commit1fb90133681255d38eed5c75c0fb64c9b090a7f5 (patch)
tree02f945f43d9123ca0dc5a4a50e1f8f5b39e36a42
parent12269dda5c07c25e4ba9b214dffa2988e73598fd (diff)
downloadbcm5719-llvm-1fb90133681255d38eed5c75c0fb64c9b090a7f5.tar.gz
bcm5719-llvm-1fb90133681255d38eed5c75c0fb64c9b090a7f5.zip
AMDGPU: Error on calls from graphics shaders
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
-rw-r--r--llvm/lib/Target/AMDGPU/SIISelLowering.cpp7
-rw-r--r--llvm/test/CodeGen/AMDGPU/unsupported-calls.ll7
2 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
index 2936e1759e6..9481e2cbf4e 100644
--- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -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;
diff --git a/llvm/test/CodeGen/AMDGPU/unsupported-calls.ll b/llvm/test/CodeGen/AMDGPU/unsupported-calls.ll
index 68872c54f7f..434ba0327e7 100644
--- a/llvm/test/CodeGen/AMDGPU/unsupported-calls.ll
+++ b/llvm/test/CodeGen/AMDGPU/unsupported-calls.ll
@@ -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
+}
OpenPOWER on IntegriCloud