diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-07-18 04:52:23 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-07-18 04:52:23 +0000 |
commit | 090db9b7a90591b0ec18cc2c7f0aad4a8766a2bb (patch) | |
tree | 75563f8af9f112df55f7419df19382d3f3d56af3 /llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp | |
parent | e20cbf3068d7dd1c9e1325b12788b2d341ab06e8 (diff) | |
download | bcm5719-llvm-090db9b7a90591b0ec18cc2c7f0aad4a8766a2bb.tar.gz bcm5719-llvm-090db9b7a90591b0ec18cc2c7f0aad4a8766a2bb.zip |
Catch more coalescing opportunities.
llvm-svn: 76282
Diffstat (limited to 'llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp b/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp index 9f8d1bad34b..0ce603cc6a3 100644 --- a/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp +++ b/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp @@ -1235,14 +1235,17 @@ bool SimpleRegisterCoalescing::JoinCopy(CopyRec &TheCopy, bool &Again) { SrcReg = CopyMI->getOperand(1).getReg(); SrcSubIdx = CopyMI->getOperand(2).getImm(); } else if (isInsSubReg || isSubRegToReg) { - if (CopyMI->getOperand(2).getSubReg()) { + DstReg = CopyMI->getOperand(0).getReg(); + DstSubIdx = CopyMI->getOperand(3).getImm(); + SrcReg = CopyMI->getOperand(2).getReg(); + SrcSubIdx = CopyMI->getOperand(2).getSubReg(); + if (SrcSubIdx && SrcSubIdx != DstSubIdx) { + // r1025 = INSERT_SUBREG r1025, r1024<2>, 2 Then r1024 has already been + // coalesced to a larger register so the subreg indices cancel out. DOUT << "\tSource of insert_subreg is already coalesced " << "to another register.\n"; return false; // Not coalescable. } - DstReg = CopyMI->getOperand(0).getReg(); - DstSubIdx = CopyMI->getOperand(3).getImm(); - SrcReg = CopyMI->getOperand(2).getReg(); } else if (!tii_->isMoveInstr(*CopyMI, SrcReg, DstReg, SrcSubIdx, DstSubIdx)){ llvm_unreachable("Unrecognized copy instruction!"); } |