/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|*                                                                            *|
|* Register Information Header Fragment                                       *|
|*                                                                            *|
|* Automatically generated file, do not edit!                                 *|
|*                                                                            *|
\*===----------------------------------------------------------------------===*/

#include "llvm/CodeGen/TargetRegisterInfo.h"

namespace llvm {

class AVRFrameLowering;

struct AVRGenRegisterInfo : public TargetRegisterInfo {
  explicit AVRGenRegisterInfo(unsigned RA, unsigned D = 0, unsigned E = 0,
      unsigned PC = 0, unsigned HwMode = 0);
  unsigned composeSubRegIndicesImpl(unsigned, unsigned) const override;
  unsigned reverseComposeSubRegIndicesImpl(unsigned, unsigned) const override;
  LaneBitmask composeSubRegIndexLaneMaskImpl(unsigned, LaneBitmask) const override;
  LaneBitmask reverseComposeSubRegIndexLaneMaskImpl(unsigned, LaneBitmask) const override;
  const TargetRegisterClass *getSubClassWithSubReg(const TargetRegisterClass *, unsigned) const override;
  const TargetRegisterClass *getSubRegisterClass(const TargetRegisterClass *, unsigned) const override;
  const RegClassWeight &getRegClassWeight(const TargetRegisterClass *RC) const override;
  unsigned getRegUnitWeight(MCRegUnit RegUnit) const override;
  unsigned getNumRegPressureSets() const override;
  const char *getRegPressureSetName(unsigned Idx) const override;
  unsigned getRegPressureSetLimit(const MachineFunction &MF, unsigned Idx) const override;
  const int *getRegClassPressureSets(const TargetRegisterClass *RC) const override;
  const int *getRegUnitPressureSets(MCRegUnit RegUnit) const override;
  ArrayRef<const char *> getRegMaskNames() const override;
  ArrayRef<const uint32_t *> getRegMasks() const override;
  bool isGeneralPurposeRegister(const MachineFunction &, MCRegister) const override;
  bool isGeneralPurposeRegisterClass(const TargetRegisterClass *RC) const override;
  bool isFixedRegister(const MachineFunction &, MCRegister) const override;
  bool isArgumentRegister(const MachineFunction &, MCRegister) const override;
  bool isConstantPhysReg(MCRegister PhysReg) const override final;
  /// Devirtualized TargetFrameLowering.
  static const AVRFrameLowering *getFrameLowering(
      const MachineFunction &MF);
};

namespace AVR { // Register classes
  extern const TargetRegisterClass GPR8RegClass;
  extern const TargetRegisterClass GPR8NOZRegClass;
  extern const TargetRegisterClass GPR8loRegClass;
  extern const TargetRegisterClass LD8RegClass;
  extern const TargetRegisterClass GPR8NOZ_and_LD8RegClass;
  extern const TargetRegisterClass LD8loRegClass;
  extern const TargetRegisterClass CCRRegClass;
  extern const TargetRegisterClass DREGSRegClass;
  extern const TargetRegisterClass DREGSNOZRegClass;
  extern const TargetRegisterClass DREGSMOVWRegClass;
  extern const TargetRegisterClass DREGSMOVW_and_DREGSNOZRegClass;
  extern const TargetRegisterClass DREGS_with_sub_hi_in_LD8RegClass;
  extern const TargetRegisterClass DREGSNOZ_and_DREGS_with_sub_hi_in_LD8RegClass;
  extern const TargetRegisterClass DREGS_with_sub_lo_in_LD8RegClass;
  extern const TargetRegisterClass DREGSNOZ_and_DREGS_with_sub_lo_in_LD8RegClass;
  extern const TargetRegisterClass DREGS_with_sub_lo_in_GPR8loRegClass;
  extern const TargetRegisterClass DREGS_with_sub_hi_in_GPR8loRegClass;
  extern const TargetRegisterClass DLDREGSRegClass;
  extern const TargetRegisterClass DREGS_with_sub_hi_in_LD8loRegClass;
  extern const TargetRegisterClass DREGS_with_sub_lo_in_LD8loRegClass;
  extern const TargetRegisterClass DREGSloRegClass;
  extern const TargetRegisterClass DLDREGS_and_DREGSNOZRegClass;
  extern const TargetRegisterClass DREGS_with_sub_hi_in_LD8lo_and_DREGS_with_sub_lo_in_LD8RegClass;
  extern const TargetRegisterClass DREGSLD8loRegClass;
  extern const TargetRegisterClass IWREGSRegClass;
  extern const TargetRegisterClass DREGSNOZ_and_IWREGSRegClass;
  extern const TargetRegisterClass PTRREGSRegClass;
  extern const TargetRegisterClass DREGSNOZ_and_PTRREGSRegClass;
  extern const TargetRegisterClass PTRDISPREGSRegClass;
  extern const TargetRegisterClass DREGSNOZ_and_PTRDISPREGSRegClass;
  extern const TargetRegisterClass DREGS_with_sub_hi_in_LD8_and_DREGS_with_sub_lo_in_GPR8loRegClass;
  extern const TargetRegisterClass GPRSPRegClass;
  extern const TargetRegisterClass ZREGRegClass;
} // end namespace AVR

} // end namespace llvm

