diff options
author | David Goodwin <david_goodwin@apple.com> | 2009-11-05 21:06:09 +0000 |
---|---|---|
committer | David Goodwin <david_goodwin@apple.com> | 2009-11-05 21:06:09 +0000 |
commit | 6c41ba177e160a4c26c6c9c7c49d27cbecf1a94b (patch) | |
tree | 5b903fe1ef317ebaa4f2473a3fd47d1ad6ace855 | |
parent | d2691dbecbd79d0e6f4523622a2078ba10c860ef (diff) | |
download | external_llvm-6c41ba177e160a4c26c6c9c7c49d27cbecf1a94b.zip external_llvm-6c41ba177e160a4c26c6c9c7c49d27cbecf1a94b.tar.gz external_llvm-6c41ba177e160a4c26c6c9c7c49d27cbecf1a94b.tar.bz2 |
Fix bug in aggressive antidep breaking; liveness was not updated correctly for regions that do not have antidep candidates.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86172 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/AggressiveAntiDepBreaker.cpp | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/lib/CodeGen/AggressiveAntiDepBreaker.cpp b/lib/CodeGen/AggressiveAntiDepBreaker.cpp index 86d051c..c10900c 100644 --- a/lib/CodeGen/AggressiveAntiDepBreaker.cpp +++ b/lib/CodeGen/AggressiveAntiDepBreaker.cpp @@ -630,12 +630,6 @@ unsigned AggressiveAntiDepBreaker::BreakAntiDependencies( std::multimap<unsigned, AggressiveAntiDepState::RegisterReference>& RegRefs = State->GetRegRefs(); - // Nothing to do if no candidates. - if (Candidates.empty()) { - DEBUG(errs() << "\n===== No anti-dependency candidates\n"); - return 0; - } - // The code below assumes that there is at least one instruction, // so just duck out immediately if the block is empty. if (SUnits.empty()) return 0; @@ -655,16 +649,19 @@ unsigned AggressiveAntiDepBreaker::BreakAntiDependencies( // ...need a map from MI to SUnit. std::map<MachineInstr *, SUnit *> MISUnitMap; - - DEBUG(errs() << "\n===== Attempting to break " << Candidates.size() << - " anti-dependencies\n"); for (unsigned i = 0, e = SUnits.size(); i != e; ++i) { SUnit *SU = &SUnits[i]; MISUnitMap.insert(std::pair<MachineInstr *, SUnit *>(SU->getInstr(), SU)); } + // Even if there are no anti-dependencies we still need to go + // through the instructions to update Def, Kills, etc. #ifndef NDEBUG - { + if (Candidates.empty()) { + DEBUG(errs() << "\n===== No anti-dependency candidates\n"); + } else { + DEBUG(errs() << "\n===== Attempting to break " << Candidates.size() << + " anti-dependencies\n"); DEBUG(errs() << "Available regs:"); for (unsigned Reg = 0; Reg < TRI->getNumRegs(); ++Reg) { if (!State->IsLive(Reg)) |