dd6029ff3a
There are several bugfixes in this update, but the most important one is to ensure __start_ and __stop_ symbols for linker sets and kernel module metadata are always emitted in object files: http://llvm.org/bugs/show_bug.cgi?id=9292 Before this fix, if you compiled kernel modules with clang, they would not be properly processed by kldxref, and if they had any dependencies, the kernel would fail to load those. Another problem occurred when attempting to mount a tmpfs filesystem, which would result in 'operation not supported by device'.
57 lines
1.8 KiB
C++
57 lines
1.8 KiB
C++
//===-- llvm/CodeGen/AllocationOrder.h - Allocation Order -*- C++ -*-------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements an allocation order for virtual registers.
|
|
//
|
|
// The preferred allocation order for a virtual register depends on allocation
|
|
// hints and target hooks. The AllocationOrder class encapsulates all of that.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CODEGEN_ALLOCATIONORDER_H
|
|
#define LLVM_CODEGEN_ALLOCATIONORDER_H
|
|
|
|
namespace llvm {
|
|
|
|
class BitVector;
|
|
class VirtRegMap;
|
|
|
|
class AllocationOrder {
|
|
const unsigned *Begin;
|
|
const unsigned *End;
|
|
const unsigned *Pos;
|
|
const BitVector &Reserved;
|
|
unsigned Hint;
|
|
public:
|
|
|
|
/// AllocationOrder - Create a new AllocationOrder for VirtReg.
|
|
/// @param VirtReg Virtual register to allocate for.
|
|
/// @param VRM Virtual register map for function.
|
|
/// @param ReservedRegs Set of reserved registers as returned by
|
|
/// TargetRegisterInfo::getReservedRegs().
|
|
AllocationOrder(unsigned VirtReg,
|
|
const VirtRegMap &VRM,
|
|
const BitVector &ReservedRegs);
|
|
|
|
/// next - Return the next physical register in the allocation order, or 0.
|
|
/// It is safe to call next again after it returned 0.
|
|
/// It will keep returning 0 until rewind() is called.
|
|
unsigned next();
|
|
|
|
/// rewind - Start over from the beginning.
|
|
void rewind() { Pos = 0; }
|
|
|
|
/// isHint - Return true if PhysReg is a preferred register.
|
|
bool isHint(unsigned PhysReg) const { return PhysReg == Hint; }
|
|
};
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif
|