summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.h
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.h')
-rw-r--r--llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.h31
1 files changed, 22 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.h b/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.h
index dc7772e4a23..6790acd8bde 100644
--- a/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.h
+++ b/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.h
@@ -20,6 +20,7 @@
#define PHY_REG_ALLOC_H
#include "llvm/CodeGen/LiveRangeInfo.h"
+#include "llvm/CodeGen/MachineBasicBlock.h"
#include "Support/NonCopyable.h"
#include <map>
@@ -81,7 +82,6 @@ public:
//
void allocateRegisters();
-
// access to register classes by class ID
//
const RegClass* getRegClassByID(unsigned int id) const {
@@ -90,7 +90,7 @@ public:
RegClass* getRegClassByID(unsigned int id) {
return RegClassList[id];
}
-
+
private:
void addInterference(const Value *Def, const ValueSet *LVSet,
bool isCallInst);
@@ -109,32 +109,45 @@ private:
void allocateStackSpace4SpilledLRs();
void insertCode4SpilledLR (const LiveRange *LR,
- MachineInstr *MInst,
- const BasicBlock *BB,
+ MachineBasicBlock::iterator& MII,
+ MachineBasicBlock &MBB,
const unsigned OpNum);
+ // Method for inserting caller saving code. The caller must save all the
+ // volatile registers live across a call.
+ void insertCallerSavingCode(std::vector<MachineInstr*>& instrnsBefore,
+ std::vector<MachineInstr*>& instrnsAfter,
+ MachineInstr *CallMI,
+ const BasicBlock *BB);
+
inline void constructLiveRanges() { LRI.constructLiveRanges(); }
void colorIncomingArgs();
void colorCallRetArgs();
void updateMachineCode();
- void updateInstruction(MachineInstr* MInst, BasicBlock* BB);
+ void updateInstruction(MachineBasicBlock::iterator& MII,
+ MachineBasicBlock &MBB);
void printLabel(const Value *const Val);
void printMachineCode();
- friend class UltraSparcRegInfo; // FIXME: remove this
-
int getUsableUniRegAtMI(int RegType,
const ValueSet *LVSetBef,
MachineInstr *MInst,
std::vector<MachineInstr*>& MIBef,
std::vector<MachineInstr*>& MIAft);
+ // Callback method used to find unused registers.
+ // LVSetBef is the live variable set to search for an unused register.
+ // If it is not specified, the LV set before the current MInst is used.
+ // This is sufficient as long as no new copy instructions are generated
+ // to copy the free register to memory.
+ //
int getUnusedUniRegAtMI(RegClass *RC, const int RegType,
- const MachineInstr *MInst, const ValueSet *LVSetBef);
-
+ const MachineInstr *MInst,
+ const ValueSet *LVSetBef = 0);
+
void setRelRegsUsedByThisInst(RegClass *RC, const int RegType,
const MachineInstr *MInst );
OpenPOWER on IntegriCloud