[llvm-commits] [llvm] r70513 - /llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp
Jakob Stoklund Olesen
stoklund at 2pi.dk
Thu Apr 30 14:24:03 PDT 2009
Author: stoklund
Date: Thu Apr 30 16:24:03 2009
New Revision: 70513
URL: http://llvm.org/viewvc/llvm-project?rev=70513&view=rev
Log:
Join cross class copies using getCommonSubClass()
Modified:
llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp
Modified: llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp?rev=70513&r1=70512&r2=70513&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp (original)
+++ llvm/trunk/lib/CodeGen/SimpleRegisterCoalescing.cpp Thu Apr 30 16:24:03 2009
@@ -1482,27 +1482,15 @@
}
Limit = allocatableRCRegs_[DstRC].count();
} else if (!SrcIsPhys && !DstIsPhys) {
- unsigned SrcSize = SrcRC->getSize();
- unsigned DstSize = DstRC->getSize();
- if (SrcSize < DstSize)
- // For example X86::MOVSD2PDrr copies from FR64 to VR128.
- NewRC = DstRC;
- else if (DstSize > SrcSize) {
- NewRC = SrcRC;
- std::swap(LargeReg, SmallReg);
- } else {
- unsigned SrcNumRegs = SrcRC->getNumRegs();
- unsigned DstNumRegs = DstRC->getNumRegs();
- if (DstNumRegs < SrcNumRegs)
- // Sub-register class?
- NewRC = DstRC;
- else if (SrcNumRegs < DstNumRegs) {
- NewRC = SrcRC;
- std::swap(LargeReg, SmallReg);
- } else
- // No idea what's the right register class to use.
- return false;
+ NewRC = getCommonSubClass(SrcRC, DstRC);
+ if (!NewRC) {
+ DOUT << "\tDisjoint regclasses: "
+ << SrcRC->getName() << ", "
+ << DstRC->getName() << ".\n";
+ return false; // Not coalescable.
}
+ if (DstRC->getSize() > SrcRC->getSize())
+ std::swap(LargeReg, SmallReg);
}
// If we are joining two virtual registers and the resulting register
More information about the llvm-commits
mailing list