On Tue, Feb 25, 2014 at 07:36:46PM +0900, Michel Dänzer wrote: > From: Michel Dänzer <michel.daen...@amd.com> > > Signed-off-by: Michel Dänzer <michel.daen...@amd.com>
Reviewed-by: Tom Stellard <thomas.stell...@amd.com> > --- > > v2: > * Bail in SILowerControlFlowPass::SkipIfDead() for geometry shaders, as > the backend can't ensure M0 contains the proper value for S_SENDMSG by > itself. > * Use just 'SI' as the lit test prefix. > > lib/Target/R600/SILowerControlFlow.cpp | 10 +++++++--- > test/CodeGen/R600/llvm.AMDGPU.kill.ll | 18 ++++++++++++++++++ > 2 files changed, 25 insertions(+), 3 deletions(-) > create mode 100644 test/CodeGen/R600/llvm.AMDGPU.kill.ll > > diff --git a/lib/Target/R600/SILowerControlFlow.cpp > b/lib/Target/R600/SILowerControlFlow.cpp > index f6f9016..fa5ee16 100644 > --- a/lib/Target/R600/SILowerControlFlow.cpp > +++ b/lib/Target/R600/SILowerControlFlow.cpp > @@ -145,7 +145,9 @@ void SILowerControlFlowPass::SkipIfDead(MachineInstr &MI) > { > MachineBasicBlock &MBB = *MI.getParent(); > DebugLoc DL = MI.getDebugLoc(); > > - if (!shouldSkip(&MBB, &MBB.getParent()->back())) > + if (MBB.getParent()->getInfo<SIMachineFunctionInfo>()->ShaderType != > + ShaderType::PIXEL || > + !shouldSkip(&MBB, &MBB.getParent()->back())) > return; > > MachineBasicBlock::iterator Insert = &MI; > @@ -293,9 +295,11 @@ void SILowerControlFlowPass::Kill(MachineInstr &MI) { > MachineBasicBlock &MBB = *MI.getParent(); > DebugLoc DL = MI.getDebugLoc(); > > - // Kill is only allowed in pixel shaders > + // Kill is only allowed in pixel / geometry shaders > assert(MBB.getParent()->getInfo<SIMachineFunctionInfo>()->ShaderType == > - ShaderType::PIXEL); > + ShaderType::PIXEL || > + MBB.getParent()->getInfo<SIMachineFunctionInfo>()->ShaderType == > + ShaderType::GEOMETRY); > > // Clear this pixel from the exec mask if the operand is negative > BuildMI(MBB, &MI, DL, TII->get(AMDGPU::V_CMPX_LE_F32_e32), AMDGPU::VCC) > diff --git a/test/CodeGen/R600/llvm.AMDGPU.kill.ll > b/test/CodeGen/R600/llvm.AMDGPU.kill.ll > new file mode 100644 > index 0000000..bec5cdf > --- /dev/null > +++ b/test/CodeGen/R600/llvm.AMDGPU.kill.ll > @@ -0,0 +1,18 @@ > +; RUN: llc < %s -march=r600 -mcpu=verde -verify-machineinstrs | FileCheck > --check-prefix=SI %s > + > +; SI-LABEL: @kill_gs > +; SI: V_CMPX_LE_F32 > + > +define void @kill_gs() #0 { > +main_body: > + %0 = icmp ule i32 0, 3 > + %1 = select i1 %0, float 1.000000e+00, float -1.000000e+00 > + call void @llvm.AMDGPU.kill(float %1) > + ret void > +} > + > +declare void @llvm.AMDGPU.kill(float) > + > +attributes #0 = { "ShaderType"="2" } > + > +!0 = metadata !{metadata !"const", null, i32 1} > -- > 1.9.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev