OSDN Git Service

Allow overlaps between virtreg and physreg live ranges.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Thu, 6 Sep 2012 18:15:23 +0000 (18:15 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Thu, 6 Sep 2012 18:15:23 +0000 (18:15 +0000)
commit45c5c57179e8b4938042431f8e12c9bfad67b3c8
tree028a8ab9a6720b6c1fe6c9b3a8b3eadbc531a428
parente617ccb80da76821379bbff4a2fdcd09e8401e8b
Allow overlaps between virtreg and physreg live ranges.

The RegisterCoalescer understands overlapping live ranges where one
register is defined as a copy of the other. With this change, register
allocators using LiveRegMatrix can do the same, at least for copies
between physical and virtual registers.

When a physreg is defined by a copy from a virtreg, allow those live
ranges to overlap:

  %CL<def> = COPY %vreg11:sub_8bit; GR32_ABCD:%vreg11
  %vreg13<def,tied1> = SAR32rCL %vreg13<tied0>, %CL<imp-use,kill>

We can assign %vreg11 to %ECX, overlapping the live range of %CL.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163336 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/LiveInterval.h
lib/CodeGen/LiveInterval.cpp
lib/CodeGen/LiveRegMatrix.cpp
lib/CodeGen/RegisterCoalescer.h
test/CodeGen/PowerPC/2010-03-09-indirect-call.ll
test/CodeGen/X86/phys_subreg_coalesce-3.ll
test/CodeGen/X86/tls-pic.ll