diff options
-rw-r--r-- | llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 8 | ||||
-rw-r--r-- | llvm/test/CodeGen/AMDGPU/no-hsa-graphics-shaders.ll | 18 |
2 files changed, 26 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp index 3cddafc465d..0c5c10486ae 100644 --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -20,6 +20,7 @@ #include "SIISelLowering.h" #include "AMDGPU.h" +#include "AMDGPUDiagnosticInfoUnsupported.h" #include "AMDGPUIntrinsicInfo.h" #include "AMDGPUSubtarget.h" #include "SIInstrInfo.h" @@ -510,6 +511,13 @@ SDValue SITargetLowering::LowerFormalArguments( FunctionType *FType = MF.getFunction()->getFunctionType(); SIMachineFunctionInfo *Info = MF.getInfo<SIMachineFunctionInfo>(); + if (Subtarget->isAmdHsaOS() && Info->getShaderType() != ShaderType::COMPUTE) { + const Function *Fn = MF.getFunction(); + DiagnosticInfoUnsupported NoGraphicsHSA(*Fn, "non-compute shaders with HSA"); + DAG.getContext()->diagnose(NoGraphicsHSA); + return SDValue(); + } + // FIXME: We currently assume all calling conventions are kernels. SmallVector<ISD::InputArg, 16> Splits; diff --git a/llvm/test/CodeGen/AMDGPU/no-hsa-graphics-shaders.ll b/llvm/test/CodeGen/AMDGPU/no-hsa-graphics-shaders.ll new file mode 100644 index 00000000000..73a146710a9 --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/no-hsa-graphics-shaders.ll @@ -0,0 +1,18 @@ +; RUN: not llc -march=amdgcn -mtriple=amdgcn-unknown-amdhsa < %s 2>&1 | FileCheck %s + +; CHECK: error: unsupported non-compute shaders with HSA in pixel_shader +define void @pixel_shader() #0 { + ret void +} + +define void @vertex_shader() #1 { + ret void +} + +define void @geometry_shader() #2 { + ret void +} + +attributes #0 = { nounwind "ShaderType"="0" } +attributes #1 = { nounwind "ShaderType"="1" } +attributes #2 = { nounwind "ShaderType"="2" } |