| //===- 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. | |
| //===----------------------------------------------------------------------===// | |
| namespace llvm { | |
| namespace AMDGPU { | |
| enum PartialMappingIdx { | |
| None = - 1, | |
| PM_SGPR1 = 0, | |
| PM_SGPR16 = 4, | |
| PM_SGPR32 = 5, | |
| PM_SGPR64 = 6, | |
| PM_SGPR128 = 7, | |
| PM_SGPR256 = 8, | |
| PM_SGPR512 = 9, | |
| PM_VGPR1 = 10, | |
| PM_VGPR16 = 14, | |
| PM_VGPR32 = 15, | |
| PM_VGPR64 = 16, | |
| PM_VGPR128 = 17, | |
| PM_VGPR256 = 18, | |
| PM_VGPR512 = 19, | |
| PM_SGPR96 = 20, | |
| PM_VGPR96 = 21 | |
| }; | |
| const RegisterBankInfo::PartialMapping PartMappings[] { | |
| // StartIdx, Length, RegBank | |
| {0, 1, SCCRegBank}, | |
| {0, 16, SGPRRegBank}, | |
| {0, 32, SGPRRegBank}, | |
| {0, 64, SGPRRegBank}, | |
| {0, 128, SGPRRegBank}, | |
| {0, 256, SGPRRegBank}, | |
| {0, 512, SGPRRegBank}, | |
| {0, 1, SGPRRegBank}, | |
| {0, 16, VGPRRegBank}, | |
| {0, 32, VGPRRegBank}, | |
| {0, 64, VGPRRegBank}, | |
| {0, 128, VGPRRegBank}, | |
| {0, 256, VGPRRegBank}, | |
| {0, 512, VGPRRegBank}, | |
| {0, 96, SGPRRegBank}, | |
| {0, 96, VGPRRegBank}, | |
| }; | |
| const RegisterBankInfo::ValueMapping ValMappings[] { | |
| {&PartMappings[0], 1}, | |
| {nullptr, 0}, | |
| {nullptr, 0}, | |
| {nullptr, 0}, | |
| {&PartMappings[1], 1}, | |
| {&PartMappings[2], 1}, | |
| {&PartMappings[3], 1}, | |
| {&PartMappings[4], 1}, | |
| {&PartMappings[5], 1}, | |
| {&PartMappings[6], 1}, | |
| {&PartMappings[7], 1}, | |
| {nullptr, 0}, | |
| {nullptr, 0}, | |
| {nullptr, 0}, | |
| {&PartMappings[8], 1}, | |
| {&PartMappings[9], 1}, | |
| {&PartMappings[10], 1}, | |
| {&PartMappings[11], 1}, | |
| {&PartMappings[12], 1}, | |
| {&PartMappings[13], 1}, | |
| {&PartMappings[14], 1}, | |
| {&PartMappings[15], 1} | |
| }; | |
| enum ValueMappingIdx { | |
| SGPRStartIdx = 0, | |
| VGPRStartIdx = 10 | |
| }; | |
| const RegisterBankInfo::ValueMapping *getValueMapping(unsigned BankID, | |
| unsigned Size) { | |
| unsigned Idx; | |
| switch (Size) { | |
| case 1: | |
| Idx = BankID == AMDGPU::SCCRegBankID ? PM_SGPR1 : PM_VGPR1; | |
| break; | |
| case 96: | |
| Idx = BankID == AMDGPU::SGPRRegBankID ? PM_SGPR96 : PM_VGPR96; | |
| break; | |
| default: | |
| Idx = BankID == AMDGPU::VGPRRegBankID ? VGPRStartIdx : SGPRStartIdx; | |
| Idx += Log2_32_Ceil(Size); | |
| break; | |
| } | |
| return &ValMappings[Idx]; | |
| } | |
| } // End AMDGPU namespace. | |
| } // End llvm namespace. |