diff options
| author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-05-15 23:31:35 +0000 |
|---|---|---|
| committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-05-15 23:31:35 +0000 |
| commit | 984997b3a04aff3ebc2b9dc4b0902b64584c7448 (patch) | |
| tree | 71d258aa67f79064625d80f9e200adaf39217ad8 /llvm/lib/CodeGen | |
| parent | 6ebc8c459878453cf5d703e04ae79566490c1214 (diff) | |
| download | bcm5719-llvm-984997b3a04aff3ebc2b9dc4b0902b64584c7448.tar.gz bcm5719-llvm-984997b3a04aff3ebc2b9dc4b0902b64584c7448.zip | |
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.
llvm-svn: 156878
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/RegisterCoalescer.cpp | 9 |
1 files changed, 0 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/RegisterCoalescer.cpp b/llvm/lib/CodeGen/RegisterCoalescer.cpp index 11ba9ac2bd1..6770c82af3b 100644 --- a/llvm/lib/CodeGen/RegisterCoalescer.cpp +++ b/llvm/lib/CodeGen/RegisterCoalescer.cpp @@ -278,15 +278,6 @@ bool CoalescerPair::setRegisters(const MachineInstr *MI) { SrcIdx, DstIdx); if (!NewRC) return false; - - // We cannot handle the case where both Src and Dst would be a - // sub-register. Yet. - if (SrcIdx && DstIdx) { - DEBUG(dbgs() << "\tCannot handle " << NewRC->getName() - << " with subregs " << TRI.getSubRegIndexName(SrcIdx) - << " and " << TRI.getSubRegIndexName(DstIdx) << '\n'); - return false; - } } else if (DstSub) { // SrcReg will be merged with a sub-register of DstReg. SrcIdx = DstSub; |

