Enable sub-sub-register copy coalescing.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 15 May 2012 23:31:35 +0000 (23:31 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 15 May 2012 23:31:35 +0000 (23:31 +0000)
commit83b3a293349919d18bc05d87bc03156ef6637370
tree79b278a98d668a456bafa2c2f5722ce3a4aed5e5
parentceacd6da8c31106333952f6dc4fd6e6aa98312f1
Enable sub-sub-register copy coalescing.

It is now possible to coalesce weird skewed sub-register copies by
picking a super-register class larger than both original registers. The
included test case produces code like this:

  vld2.32 {d16, d17, d18, d19}, [r0]!
  vst2.32 {d18, d19, d20, d21}, [r0]

We still perform interference checking as if it were a normal full copy
join, so this is still quite conservative. In particular, the f1 and f2
functions in the included test case still have remaining copies because
of false interference.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156878 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/RegisterCoalescer.cpp
test/CodeGen/ARM/coalesce-subregs.ll [new file with mode: 0644]