//===-- llvm/CodeGen/SSARegMap.h --------------------------------*- C++ -*-===// // // Map register numbers to register classes that are correctly sized (typed) to // hold the information. Assists register allocation. Contained by // MachineFunction, should be deleted by register allocator when it is no // longer needed. // //===----------------------------------------------------------------------===// #ifndef LLVM_CODEGEN_SSAREGMAP_H #define LLVM_CODEGEN_SSAREGMAP_H #include "llvm/Target/MRegisterInfo.h" class TargetRegisterClass; class SSARegMap { std::vector RegClassMap; unsigned rescale(unsigned Reg) { return Reg - MRegisterInfo::FirstVirtualRegister; } public: const TargetRegisterClass* getRegClass(unsigned Reg) { unsigned actualReg = rescale(Reg); assert(actualReg < RegClassMap.size() && "Register out of bounds"); return RegClassMap[actualReg]; } /// createVirtualRegister - Create and return a new virtual register in the /// function with the specified register class. /// unsigned createVirtualRegister(const TargetRegisterClass *RegClass) { RegClassMap.push_back(RegClass); return RegClassMap.size()+MRegisterInfo::FirstVirtualRegister-1; } }; #endif