Committed for compliation. Not yet final.
--Ruchira
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@505 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/RegAlloc/PhyRegAlloc.h b/lib/CodeGen/RegAlloc/PhyRegAlloc.h
new file mode 100644
index 0000000..bcb8aa5
--- /dev/null
+++ b/lib/CodeGen/RegAlloc/PhyRegAlloc.h
@@ -0,0 +1,106 @@
+/* Title: PhyRegAlloc.h
+ Author: Ruchira Sasanka
+ Date: Aug 20, 01
+ Purpose: This is the main entry point for register allocation.
+
+ Notes:
+
+ * RegisterClasses: Each RegClass accepts a
+ MachineRegClass which contains machine specific info about that register
+ class. The code in the RegClass is machine independent and they use
+ access functions in the MachineRegClass object passed into it to get
+ machine specific info.
+
+ * Machine dependent work: All parts of the register coloring algorithm
+ except coloring of an individual node are machine independent.
+
+ Register allocation must be done as:
+
+ static const MachineRegInfo MRI = MachineRegInfo(); // machine reg info
+
+ MethodLiveVarInfo LVI(*MethodI ); // compute LV info
+ LVI.analyze();
+
+ PhyRegAlloc PRA(*MethodI, &MRI, &LVI); // allocate regs
+ PRA.allocateRegisters();
+
+ Assumptions:
+ All values in a live range will be of the same physical reg class.
+
+*/
+
+
+
+#ifndef PHY_REG_ALLOC_H
+#define PHY_REG_ALLOC_H
+
+#include "llvm/CodeGen/MachineInstr.h"
+#include "llvm/CodeGen/Sparc.h"
+
+#include "llvm/CodeGen/RegClass.h"
+#include "llvm/CodeGen/LiveRangeInfo.h"
+#include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
+
+
+class AddedInstrns
+{
+ public:
+ vector<const MachineInstr *> InstrnsBefore;
+ vector<const MachineInstr *> InstrnsAfter;
+
+ AddedInstrns() : InstrnsBefore(), InstrnsAfter() { }
+};
+
+typedef hash_map<const MachineInstr *, AddedInstrns *> AddedInstrMapType;
+
+
+
+class PhyRegAlloc
+{
+
+ vector<RegClass *> RegClassList ; // vector of register classes
+ const Method *const Meth; // name of the method we work on
+ const TargetMachine &TM; // target machine
+ MethodLiveVarInfo *const LVI; // LV information for this method
+ // (already computed for BBs)
+ LiveRangeInfo LRI; // LR info (will be computed)
+ const MachineRegInfo &MRI; // Machine Register information
+ const unsigned NumOfRegClasses; // recorded here for efficiency
+
+ vector<const Instruction *> CallInstrList; // a list of all call instrs
+
+ AddedInstrMapType AddedInstrMap; // to store instrns added in this phase
+
+
+ //------- private methods ---------------------------------------------------
+
+ void addInterference(const Value *const Def, const LiveVarSet *const LVSet,
+ const bool isCallInst);
+
+ void addInterferencesForArgs();
+ void createIGNodeListsAndIGs();
+ void buildInterferenceGraphs();
+
+ inline void constructLiveRanges()
+ { LRI.constructLiveRanges(); }
+
+ void colorIncomingArgs();
+ void updateMachineCode();
+
+ public:
+ PhyRegAlloc(const Method *const M, const TargetMachine& TM,
+ MethodLiveVarInfo *const Lvi);
+
+ void allocateRegisters(); // main method called for allocatin
+
+};
+
+
+
+
+
+
+
+
+#endif
+