MI Sched: eliminate local vreg copies.
authorAndrew Trick <atrick@apple.com>
Wed, 24 Apr 2013 15:54:43 +0000 (15:54 +0000)
committerAndrew Trick <atrick@apple.com>
Wed, 24 Apr 2013 15:54:43 +0000 (15:54 +0000)
commite38afe1e335084134f7830ba6f2208e2ddde59b4
treee50d2dd8447a5d5d900d83d7c1b0f58c5090e61d
parente2326ad2c00fe3e8e21dbf312f1987ba92308733
MI Sched: eliminate local vreg copies.

For now, we just reschedule instructions that use the copied vregs and
let regalloc elliminate it. I would really like to eliminate the
copies on-the-fly during scheduling, but we need a complete
implementation of repairIntervalsInRange() first.

The general strategy is for the register coalescer to eliminate as
many global copies as possible and shrink live ranges to be
extended-basic-block local. The coalescer should not have to worry
about resolving local copies (e.g. it shouldn't attemp to reorder
instructions). The scheduler is a much better place to deal with local
interference. The coalescer side of this equation needs work.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180193 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/LiveInterval.h
include/llvm/CodeGen/MachineScheduler.h
include/llvm/CodeGen/ScheduleDAG.h
include/llvm/CodeGen/ScheduleDAGInstrs.h
lib/CodeGen/MachineScheduler.cpp
test/CodeGen/ARM/misched-copy-arm.ll [new file with mode: 0644]