diff options
author | Matthias Braun <matze@braunis.de> | 2015-09-22 03:44:41 +0000 |
---|---|---|
committer | Matthias Braun <matze@braunis.de> | 2015-09-22 03:44:41 +0000 |
commit | d3dd1354a49c321324878269189cdff7e0e151bb (patch) | |
tree | 8e2679c0255c036a28de407235dcfc7a271bbc77 /llvm/lib/CodeGen/LiveInterval.cpp | |
parent | 927a11e380d5c5fb1e618a6ce6bdf6c1f423e53f (diff) | |
download | bcm5719-llvm-d3dd1354a49c321324878269189cdff7e0e151bb.tar.gz bcm5719-llvm-d3dd1354a49c321324878269189cdff7e0e151bb.zip |
LiveIntervalAnalysis: Factor common code into splitSeparateComponents; NFC
llvm-svn: 248241
Diffstat (limited to 'llvm/lib/CodeGen/LiveInterval.cpp')
-rw-r--r-- | llvm/lib/CodeGen/LiveInterval.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/LiveInterval.cpp b/llvm/lib/CodeGen/LiveInterval.cpp index 3dc4113c639..5c2dba4531a 100644 --- a/llvm/lib/CodeGen/LiveInterval.cpp +++ b/llvm/lib/CodeGen/LiveInterval.cpp @@ -1372,11 +1372,8 @@ unsigned ConnectedVNInfoEqClasses::Classify(const LiveInterval *LI) { return EqClass.getNumClasses(); } -void ConnectedVNInfoEqClasses::Distribute(LiveInterval *LIV[], +void ConnectedVNInfoEqClasses::Distribute(LiveInterval &LI, LiveInterval *LIV[], MachineRegisterInfo &MRI) { - assert(LIV[0] && "LIV[0] must be set"); - LiveInterval &LI = *LIV[0]; - // Rewrite instructions. for (MachineRegisterInfo::reg_iterator RI = MRI.reg_begin(LI.reg), RE = MRI.reg_end(); RI != RE;) { @@ -1398,7 +1395,8 @@ void ConnectedVNInfoEqClasses::Distribute(LiveInterval *LIV[], // NULL. If the use is tied to a def, VNI will be the defined value. if (!VNI) continue; - MO.setReg(LIV[getEqClass(VNI)]->reg); + if (unsigned EqClass = getEqClass(VNI)) + MO.setReg(LIV[EqClass-1]->reg); } // Move runs to new intervals. @@ -1407,9 +1405,9 @@ void ConnectedVNInfoEqClasses::Distribute(LiveInterval *LIV[], ++J; for (LiveInterval::iterator I = J; I != E; ++I) { if (unsigned eq = EqClass[I->valno->id]) { - assert((LIV[eq]->empty() || LIV[eq]->expiredAt(I->start)) && + assert((LIV[eq-1]->empty() || LIV[eq-1]->expiredAt(I->start)) && "New intervals should be empty"); - LIV[eq]->segments.push_back(*I); + LIV[eq-1]->segments.push_back(*I); } else *J++ = *I; } @@ -1424,8 +1422,8 @@ void ConnectedVNInfoEqClasses::Distribute(LiveInterval *LIV[], for (unsigned i = j; i != e; ++i) { VNInfo *VNI = LI.getValNumInfo(i); if (unsigned eq = EqClass[i]) { - VNI->id = LIV[eq]->getNumValNums(); - LIV[eq]->valnos.push_back(VNI); + VNI->id = LIV[eq-1]->getNumValNums(); + LIV[eq-1]->valnos.push_back(VNI); } else { VNI->id = j; LI.valnos[j++] = VNI; |