//===- AMDGPUGenRegisterBankInfo.def -----------------------------*- C++ -*-==//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
/// \file
/// This file defines all the static objects used by AMDGPURegisterBankInfo.
/// \todo This should be generated by TableGen.
//===----------------------------------------------------------------------===//

#ifndef LLVM_BUILD_GLOBAL_ISEL
#error "You shouldn't build this"
#endif

namespace llvm {
namespace AMDGPU {

enum PartialMappingIdx {
  None = - 1,
  PM_SGPR32 = 0,
  PM_SGPR64 = 1,
  PM_VGPR32 = 2,
  PM_VGPR64 = 3
};

const RegisterBankInfo::PartialMapping PartMappings[] {
  // StartIdx, Length, RegBank
  {0, 32, SGPRRegBank},
  {0, 64, SGPRRegBank},
  {0, 32, VGPRRegBank},
  {0, 64, VGPRRegBank}
};

const RegisterBankInfo::ValueMapping ValMappings[] {
  // SGPR 32-bit
  {&PartMappings[0], 1},
  // SGPR 64-bit
  {&PartMappings[1], 1},
  // VGPR 32-bit
  {&PartMappings[2], 1},
  // VGPR 64-bit
  {&PartMappings[3], 1}
};

enum ValueMappingIdx {
  SGPRStartIdx = 0,
  VGPRStartIdx = 2
};

const RegisterBankInfo::ValueMapping *getValueMapping(unsigned BankID,
                                                      unsigned Size) {
  assert(Size % 32 == 0);
  unsigned Idx = BankID == AMDGPU::SGPRRegBankID ? SGPRStartIdx : VGPRStartIdx;
  Idx += (Size / 32) - 1;
  return &ValMappings[Idx];
}

} // End AMDGPU namespace.
} // End llvm namespace.
