diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2008-06-17 20:11:16 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2008-06-17 20:11:16 +0000 |
| commit | 1eb69314faafef864bdb5c61d5bb8c23a69efd65 (patch) | |
| tree | f76026f15f1c30e9553ebc5b9383949abf1bdfaf /llvm/lib/CodeGen | |
| parent | e157b265b760c4005eafb24218b1da09902b098d (diff) | |
| download | bcm5719-llvm-1eb69314faafef864bdb5c61d5bb8c23a69efd65.tar.gz bcm5719-llvm-1eb69314faafef864bdb5c61d5bb8c23a69efd65.zip | |
When extending a liveinterval by commuting, don't throw away the live ranges that are not affected.
llvm-svn: 52430
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp b/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp index 5cd6dd9da15..f9a26520d4a 100644 --- a/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp +++ b/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp @@ -381,10 +381,21 @@ bool SimpleRegisterCoalescing::RemoveCopyByCommutingDef(LiveInterval &IntA, // simply extend BLR if CopyMI doesn't end the range. DOUT << "\nExtending: "; IntB.print(DOUT, tri_); - IntB.removeValNo(BValNo); + // Remove val#'s defined by copies that will be coalesced away. for (unsigned i = 0, e = BDeadValNos.size(); i != e; ++i) IntB.removeValNo(BDeadValNos[i]); - VNInfo *ValNo = IntB.getNextValue(AValNo->def, 0, li_->getVNInfoAllocator()); + + // Extend BValNo by merging in IntA live ranges of AValNo. Val# definition + // is updated. Kills are also updated. + VNInfo *ValNo = BValNo; + ValNo->def = AValNo->def; + ValNo->copy = NULL; + for (unsigned j = 0, ee = ValNo->kills.size(); j != ee; ++j) { + unsigned Kill = ValNo->kills[j]; + if (Kill != BLR->end) + BKills.push_back(Kill); + } + ValNo->kills.clear(); for (LiveInterval::iterator AI = IntA.begin(), AE = IntA.end(); AI != AE; ++AI) { if (AI->valno != AValNo) continue; |

