diff --git a/llvm/lib/CodeGen/MachineSink.cpp b/llvm/lib/CodeGen/MachineSink.cpp --- a/llvm/lib/CodeGen/MachineSink.cpp +++ b/llvm/lib/CodeGen/MachineSink.cpp @@ -131,7 +131,7 @@ // will be split. SetVector> ToSplit; - SparseBitVector<> RegsToClearKillFlags; + DenseMap> RegsToClearKillFlags; using AllSuccsCache = std::map>; @@ -496,8 +496,9 @@ StoreInstrCache.clear(); // Now clear any kill flags for recorded registers. - for (auto I : RegsToClearKillFlags) - MRI->clearKillFlags(I); + for (auto SBV : RegsToClearKillFlags) + for (auto I : SBV.second) + MRI->clearKillFlags(I); RegsToClearKillFlags.clear(); return EverMadeChange; @@ -1439,7 +1440,8 @@ // used registers. for (MachineOperand &MO : MI.operands()) { if (MO.isReg() && MO.isUse()) - RegsToClearKillFlags.set(MO.getReg()); // Remember to clear kill flags. + RegsToClearKillFlags[&MI].set( + MO.getReg()); // Remember to clear kill flags. } return true;