Index: llvm/trunk/lib/Target/AMDGPU/AMDGPUCallLowering.cpp =================================================================== --- llvm/trunk/lib/Target/AMDGPU/AMDGPUCallLowering.cpp +++ llvm/trunk/lib/Target/AMDGPU/AMDGPUCallLowering.cpp @@ -32,6 +32,10 @@ bool AMDGPUCallLowering::lowerReturn(MachineIRBuilder &MIRBuilder, const Value *Val, unsigned VReg) const { + // FIXME: Add support for non-void returns. + if (Val) + return false; + MIRBuilder.buildInstr(AMDGPU::S_ENDPGM); return true; } Index: llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/todo.ll =================================================================== --- llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/todo.ll +++ llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/todo.ll @@ -0,0 +1,10 @@ +; RUN: llc -mtriple=amdgcn-mesa-mesa3d -global-isel -global-isel-abort=2 %s -o - 2>&1 | FileCheck %s + +; This isn't implemented, but we need to make sure we fall back to SelectionDAG +; instead of generating wrong code. +; CHECK: warning: Instruction selection used fallback path for non_void_ret +; CHECK: non_void_ret: +; CHECK-NOT: s_endpgm +define amdgpu_vs i32 @non_void_ret() { + ret i32 0 +}