AllocationOrder.h revision c9672cb8bea13fcbcbdb1cf26708d831c034c089
1//===-- llvm/CodeGen/AllocationOrder.h - Allocation Order -*- C++ -*-------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file implements an allocation order for virtual registers. 11// 12// The preferred allocation order for a virtual register depends on allocation 13// hints and target hooks. The AllocationOrder class encapsulates all of that. 14// 15//===----------------------------------------------------------------------===// 16 17#ifndef LLVM_CODEGEN_ALLOCATIONORDER_H 18#define LLVM_CODEGEN_ALLOCATIONORDER_H 19 20namespace llvm { 21 22class BitVector; 23class VirtRegMap; 24 25class AllocationOrder { 26 const unsigned *Begin; 27 const unsigned *End; 28 const unsigned *Pos; 29 const BitVector &Reserved; 30 unsigned Hint; 31public: 32 33 /// AllocationOrder - Create a new AllocationOrder for VirtReg. 34 /// @param VirtReg Virtual register to allocate for. 35 /// @param VRM Virtual register map for function. 36 /// @param ReservedRegs Set of reserved registers as returned by 37 /// TargetRegisterInfo::getReservedRegs(). 38 AllocationOrder(unsigned VirtReg, 39 const VirtRegMap &VRM, 40 const BitVector &ReservedRegs); 41 42 /// next - Return the next physical register in the allocation order, or 0. 43 /// It is safe to call next again after it returned 0. 44 /// It will keep returning 0 until rewind() is called. 45 unsigned next(); 46 47 /// rewind - Start over from the beginning. 48 void rewind() { Pos = 0; } 49 50}; 51 52} // end namespace llvm 53 54#endif 55