diff --git a/include/llvm/CodeGen/LiveIntervalAnalysis.h b/include/llvm/CodeGen/LiveIntervalAnalysis.h index 77451846c29..2bcef48e966 100644 --- a/include/llvm/CodeGen/LiveIntervalAnalysis.h +++ b/include/llvm/CodeGen/LiveIntervalAnalysis.h @@ -38,6 +38,10 @@ namespace llvm { const TargetInstrInfo* tii_; LiveVariables* lv_; + /// MBB2IdxMap - The index of the first instruction in the specified basic + /// block. + std::vector MBB2IdxMap; + typedef std::map Mi2IndexMap; Mi2IndexMap mi2iMap_; @@ -113,6 +117,17 @@ namespace llvm { return I->second; } + /// getMBBStartIdx - Return the base index of the first instruction in the + /// specified MachineBasicBlock. + unsigned getMBBStartIdx(MachineBasicBlock *MBB) const { + return getMBBStartIdx(MBB->getNumber()); + } + + unsigned getMBBStartIdx(unsigned MBBNo) const { + assert(MBBNo < MBB2IdxMap.size() && "Invalid MBB number!"); + return MBB2IdxMap[MBBNo]; + } + /// getInstructionIndex - returns the base index of instr unsigned getInstructionIndex(MachineInstr* instr) const { Mi2IndexMap::const_iterator it = mi2iMap_.find(instr); @@ -128,7 +143,7 @@ namespace llvm { "index does not correspond to an instruction"); return i2miMap_[index]; } - + std::vector addIntervalsForSpills(const LiveInterval& i, VirtRegMap& vrm, int slot); @@ -155,12 +170,17 @@ namespace llvm { } } - /// computeIntervals - compute live intervals - void computeIntervals(); + /// computeIntervals - Compute live intervals. This returns a vector of all + /// the two-address instructions to the caller. + void computeIntervals(std::vector &TwoAddrInsts); /// joinIntervals - join compatible live intervals void joinIntervals(); + /// HandleTwoAddressInsts - Arrange for the specified list of 2-addr + /// instructions to have their src/dst regs allocated to the same register. + void HandleTwoAddressInsts(const std::vector &TwoAddrInsts); + /// CopyCoallesceInMBB - Coallsece copies in the specified MBB, putting /// copies that cannot yet be coallesced into the "TryAgain" list. void CopyCoallesceInMBB(MachineBasicBlock *MBB, diff --git a/include/llvm/CodeGen/MachineFunction.h b/include/llvm/CodeGen/MachineFunction.h index 340e2f936b4..b06dd639228 100644 --- a/include/llvm/CodeGen/MachineFunction.h +++ b/include/llvm/CodeGen/MachineFunction.h @@ -223,13 +223,8 @@ public: return MBBNumbering[N]; } - /// getLastBlock - Returns the MachineBasicBlock with the greatest number - MachineBasicBlock *getLastBlock() { - return MBBNumbering.back(); - } - const MachineBasicBlock *getLastBlock() const { - return MBBNumbering.back(); - } + /// getNumBlockIDs - Return the number of MBB ID's allocated. + unsigned getNumBlockIDs() const { return MBBNumbering.size(); } /// print - Print out the MachineFunction in a format suitable for debugging /// to the specified stream.