AMDGPU: Remove SIFixSGPRLiveRanges pass
authorNicolai Haehnle <nhaehnle@gmail.com>
Thu, 14 Apr 2016 17:42:29 +0000 (17:42 +0000)
committerNicolai Haehnle <nhaehnle@gmail.com>
Thu, 14 Apr 2016 17:42:29 +0000 (17:42 +0000)
commit723b73b4eb70d4015bb32ec94c6a782608c5112b
tree038e319a27be7448a4f713142f8a10204adf3128
parent19f0f5177da807ca4e65f6f81e110929201cd3de
AMDGPU: Remove SIFixSGPRLiveRanges pass

Summary:
This pass is unnecessary and overly conservative. It was motivated by
situations like

  def %vreg0:SGPR_32
  ...
if-block:
  ..
  def %vreg1:SGPR_32
  ...
else-block:
  ...
  use %vreg0:SGPR_32
  ...

and similar situations with uses after the non-uniform control flow, where
we are not allowed to assign %vreg0 and %vreg1 to the same physical register,
even though in the original, thread/workitem-based CFG, it looks like the
live ranges of these registers do not overlap.

However, by the time register allocation runs, we have moved to a wave-based
CFG that accurately represents the fact that the wave may run through both
the if- and the else-block. So the live ranges of %vreg0 and %vreg1 already
overlap even without the SIFixSGPRLiveRanges pass.

In addition to proving this change correct, I have tested it with Piglit
and a small number of other tests.

Reviewers: arsenm, tstellarAMD

Subscribers: MatzeB, arsenm, llvm-commits

Differential Revision: http://reviews.llvm.org/D19041

llvm-svn: 266345
llvm/lib/Target/AMDGPU/AMDGPU.h
llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
llvm/lib/Target/AMDGPU/CMakeLists.txt
llvm/lib/Target/AMDGPU/SIFixSGPRLiveRanges.cpp [deleted file]
llvm/test/CodeGen/AMDGPU/subreg-coalescer-undef-use.ll