return I != kills.end() && *I == KillIdx;
}
- /// isOnlyKill - Return true if the specified index is the only kill of the
- /// specified val#.
- static bool isOnlyKill(const VNInfo *VNI, unsigned KillIdx) {
- bool Found = false;
- const SmallVector<unsigned, 4> &kills = VNI->kills;
- for (unsigned i = 0, e = kills.size(); i != e; ++i) {
- if (KillIdx != kills[i])
+ /// isOnlyLROfValNo - Return true if the specified live range is the only
+ /// one defined by the its val#.
+ bool isOnlyLROfValNo( const LiveRange *LR) {
+ for (const_iterator I = begin(), E = end(); I != E; ++I) {
+ const LiveRange *Tmp = I;
+ if (Tmp != LR && Tmp->valno == LR->valno)
return false;
- Found = true;
}
- return Found;
+ return true;
}
/// MergeValueNumberInto - This method is called when two value nubmers
}
/// TrimLiveIntervalToLastUse - If there is a last use in the same basic block
-/// as the copy instruction, trim the ive interval to the last use and return
+/// as the copy instruction, trim the live interval to the last use and return
/// true.
bool
SimpleRegisterCoalescing::TrimLiveIntervalToLastUse(unsigned CopyIdx,
if (LR->valno->def == RemoveStart) {
// If the def MI defines the val# and this copy is the only kill of the
// val#, then propagate the dead marker.
- if (!li.isOnlyKill(LR->valno, RemoveEnd))
- li.removeKill(LR->valno, RemoveEnd);
- else {
+ if (!li.isOnlyLROfValNo(LR)) {
+ if (li.isKill(LR->valno, RemoveEnd))
+ li.removeKill(LR->valno, RemoveEnd);
+ } else {
PropagateDeadness(li, CopyMI, RemoveStart, li_, tri_);
++numDeadValNo;
}