LCOV - code coverage report
Current view: top level - build-llvm/lib/Target/RISCV - RISCVGenRegisterInfo.inc (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 1 6 16.7 %
Date: 2017-08-13 15:02:11 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
       2             : |*                                                                            *|
       3             : |* Target Register Enum Values                                                *|
       4             : |*                                                                            *|
       5             : |* Automatically generated file, do not edit!                                 *|
       6             : |*                                                                            *|
       7             : \*===----------------------------------------------------------------------===*/
       8             : 
       9             : 
      10             : #ifdef GET_REGINFO_ENUM
      11             : #undef GET_REGINFO_ENUM
      12             : 
      13             : namespace llvm {
      14             : 
      15             : class MCRegisterClass;
      16             : extern const MCRegisterClass RISCVMCRegisterClasses[];
      17             : 
      18             : namespace RISCV {
      19             : enum {
      20             :   NoRegister,
      21             :   X0_32 = 1,
      22             :   X0_64 = 2,
      23             :   X1_32 = 3,
      24             :   X1_64 = 4,
      25             :   X2_32 = 5,
      26             :   X2_64 = 6,
      27             :   X3_32 = 7,
      28             :   X3_64 = 8,
      29             :   X4_32 = 9,
      30             :   X4_64 = 10,
      31             :   X5_32 = 11,
      32             :   X5_64 = 12,
      33             :   X6_32 = 13,
      34             :   X6_64 = 14,
      35             :   X7_32 = 15,
      36             :   X7_64 = 16,
      37             :   X8_32 = 17,
      38             :   X8_64 = 18,
      39             :   X9_32 = 19,
      40             :   X9_64 = 20,
      41             :   X10_32 = 21,
      42             :   X10_64 = 22,
      43             :   X11_32 = 23,
      44             :   X11_64 = 24,
      45             :   X12_32 = 25,
      46             :   X12_64 = 26,
      47             :   X13_32 = 27,
      48             :   X13_64 = 28,
      49             :   X14_32 = 29,
      50             :   X14_64 = 30,
      51             :   X15_32 = 31,
      52             :   X15_64 = 32,
      53             :   X16_32 = 33,
      54             :   X16_64 = 34,
      55             :   X17_32 = 35,
      56             :   X17_64 = 36,
      57             :   X18_32 = 37,
      58             :   X18_64 = 38,
      59             :   X19_32 = 39,
      60             :   X19_64 = 40,
      61             :   X20_32 = 41,
      62             :   X20_64 = 42,
      63             :   X21_32 = 43,
      64             :   X21_64 = 44,
      65             :   X22_32 = 45,
      66             :   X22_64 = 46,
      67             :   X23_32 = 47,
      68             :   X23_64 = 48,
      69             :   X24_32 = 49,
      70             :   X24_64 = 50,
      71             :   X25_32 = 51,
      72             :   X25_64 = 52,
      73             :   X26_32 = 53,
      74             :   X26_64 = 54,
      75             :   X27_32 = 55,
      76             :   X27_64 = 56,
      77             :   X28_32 = 57,
      78             :   X28_64 = 58,
      79             :   X29_32 = 59,
      80             :   X29_64 = 60,
      81             :   X30_32 = 61,
      82             :   X30_64 = 62,
      83             :   X31_32 = 63,
      84             :   X31_64 = 64,
      85             :   NUM_TARGET_REGS       // 65
      86             : };
      87             : } // end namespace RISCV
      88             : 
      89             : // Register classes
      90             : 
      91             : namespace RISCV {
      92             : enum {
      93             :   GPRRegClassID = 0,
      94             :   GPR64RegClassID = 1,
      95             : 
      96             :   };
      97             : } // end namespace RISCV
      98             : 
      99             : 
     100             : // Register alternate name indices
     101             : 
     102             : namespace RISCV {
     103             : enum {
     104             :   ABIRegAltName,        // 0
     105             :   NoRegAltName, // 1
     106             :   NUM_TARGET_REG_ALT_NAMES = 2
     107             : };
     108             : } // end namespace RISCV
     109             : 
     110             : 
     111             : // Subregister indices
     112             : 
     113             : namespace RISCV {
     114             : enum {
     115             :   NoSubRegister,
     116             :   sub_32,       // 1
     117             :   NUM_TARGET_SUBREGS
     118             : };
     119             : } // end namespace RISCV
     120             : 
     121             : } // end namespace llvm
     122             : 
     123             : #endif // GET_REGINFO_ENUM
     124             : 
     125             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
     126             : |*                                                                            *|
     127             : |* MC Register Information                                                    *|
     128             : |*                                                                            *|
     129             : |* Automatically generated file, do not edit!                                 *|
     130             : |*                                                                            *|
     131             : \*===----------------------------------------------------------------------===*/
     132             : 
     133             : 
     134             : #ifdef GET_REGINFO_MC_DESC
     135             : #undef GET_REGINFO_MC_DESC
     136             : 
     137             : namespace llvm {
     138             : 
     139             : extern const MCPhysReg RISCVRegDiffLists[] = {
     140             :   /* 0 */ 0, 0,
     141             :   /* 2 */ 1, 0,
     142             :   /* 4 */ 2, 0,
     143             :   /* 6 */ 3, 0,
     144             :   /* 8 */ 4, 0,
     145             :   /* 10 */ 5, 0,
     146             :   /* 12 */ 6, 0,
     147             :   /* 14 */ 7, 0,
     148             :   /* 16 */ 8, 0,
     149             :   /* 18 */ 9, 0,
     150             :   /* 20 */ 10, 0,
     151             :   /* 22 */ 11, 0,
     152             :   /* 24 */ 12, 0,
     153             :   /* 26 */ 13, 0,
     154             :   /* 28 */ 14, 0,
     155             :   /* 30 */ 15, 0,
     156             :   /* 32 */ 16, 0,
     157             :   /* 34 */ 17, 0,
     158             :   /* 36 */ 18, 0,
     159             :   /* 38 */ 19, 0,
     160             :   /* 40 */ 20, 0,
     161             :   /* 42 */ 21, 0,
     162             :   /* 44 */ 22, 0,
     163             :   /* 46 */ 23, 0,
     164             :   /* 48 */ 24, 0,
     165             :   /* 50 */ 25, 0,
     166             :   /* 52 */ 26, 0,
     167             :   /* 54 */ 27, 0,
     168             :   /* 56 */ 28, 0,
     169             :   /* 58 */ 29, 0,
     170             :   /* 60 */ 30, 0,
     171             :   /* 62 */ 31, 0,
     172             :   /* 64 */ 65535, 0,
     173             : };
     174             : 
     175             : extern const LaneBitmask RISCVLaneMaskLists[] = {
     176             :   /* 0 */ LaneBitmask(0x00000000), LaneBitmask::getAll(),
     177             :   /* 2 */ LaneBitmask(0x00000001), LaneBitmask::getAll(),
     178       70917 : };
     179             : 
     180             : extern const uint16_t RISCVSubRegIdxLists[] = {
     181             :   /* 0 */ 1, 0,
     182             : };
     183             : 
     184             : extern const MCRegisterInfo::SubRegCoveredBits RISCVSubRegIdxRanges[] = {
     185             :   { 65535, 65535 },
     186             :   { 0, 32 },    // sub_32
     187             : };
     188             : 
     189             : extern const char RISCVRegStrings[] = {
     190             :   /* 0 */ 'X', '1', '0', '_', '3', '2', 0,
     191             :   /* 7 */ 'X', '2', '0', '_', '3', '2', 0,
     192             :   /* 14 */ 'X', '3', '0', '_', '3', '2', 0,
     193             :   /* 21 */ 'X', '0', '_', '3', '2', 0,
     194             :   /* 27 */ 'X', '1', '1', '_', '3', '2', 0,
     195             :   /* 34 */ 'X', '2', '1', '_', '3', '2', 0,
     196             :   /* 41 */ 'X', '3', '1', '_', '3', '2', 0,
     197             :   /* 48 */ 'X', '1', '_', '3', '2', 0,
     198             :   /* 54 */ 'X', '1', '2', '_', '3', '2', 0,
     199             :   /* 61 */ 'X', '2', '2', '_', '3', '2', 0,
     200             :   /* 68 */ 'X', '2', '_', '3', '2', 0,
     201             :   /* 74 */ 'X', '1', '3', '_', '3', '2', 0,
     202             :   /* 81 */ 'X', '2', '3', '_', '3', '2', 0,
     203             :   /* 88 */ 'X', '3', '_', '3', '2', 0,
     204             :   /* 94 */ 'X', '1', '4', '_', '3', '2', 0,
     205             :   /* 101 */ 'X', '2', '4', '_', '3', '2', 0,
     206             :   /* 108 */ 'X', '4', '_', '3', '2', 0,
     207             :   /* 114 */ 'X', '1', '5', '_', '3', '2', 0,
     208             :   /* 121 */ 'X', '2', '5', '_', '3', '2', 0,
     209             :   /* 128 */ 'X', '5', '_', '3', '2', 0,
     210             :   /* 134 */ 'X', '1', '6', '_', '3', '2', 0,
     211             :   /* 141 */ 'X', '2', '6', '_', '3', '2', 0,
     212             :   /* 148 */ 'X', '6', '_', '3', '2', 0,
     213             :   /* 154 */ 'X', '1', '7', '_', '3', '2', 0,
     214             :   /* 161 */ 'X', '2', '7', '_', '3', '2', 0,
     215             :   /* 168 */ 'X', '7', '_', '3', '2', 0,
     216             :   /* 174 */ 'X', '1', '8', '_', '3', '2', 0,
     217             :   /* 181 */ 'X', '2', '8', '_', '3', '2', 0,
     218             :   /* 188 */ 'X', '8', '_', '3', '2', 0,
     219             :   /* 194 */ 'X', '1', '9', '_', '3', '2', 0,
     220             :   /* 201 */ 'X', '2', '9', '_', '3', '2', 0,
     221             :   /* 208 */ 'X', '9', '_', '3', '2', 0,
     222             :   /* 214 */ 'X', '1', '0', '_', '6', '4', 0,
     223             :   /* 221 */ 'X', '2', '0', '_', '6', '4', 0,
     224             :   /* 228 */ 'X', '3', '0', '_', '6', '4', 0,
     225             :   /* 235 */ 'X', '0', '_', '6', '4', 0,
     226             :   /* 241 */ 'X', '1', '1', '_', '6', '4', 0,
     227             :   /* 248 */ 'X', '2', '1', '_', '6', '4', 0,
     228             :   /* 255 */ 'X', '3', '1', '_', '6', '4', 0,
     229             :   /* 262 */ 'X', '1', '_', '6', '4', 0,
     230             :   /* 268 */ 'X', '1', '2', '_', '6', '4', 0,
     231             :   /* 275 */ 'X', '2', '2', '_', '6', '4', 0,
     232             :   /* 282 */ 'X', '2', '_', '6', '4', 0,
     233             :   /* 288 */ 'X', '1', '3', '_', '6', '4', 0,
     234             :   /* 295 */ 'X', '2', '3', '_', '6', '4', 0,
     235             :   /* 302 */ 'X', '3', '_', '6', '4', 0,
     236             :   /* 308 */ 'X', '1', '4', '_', '6', '4', 0,
     237             :   /* 315 */ 'X', '2', '4', '_', '6', '4', 0,
     238             :   /* 322 */ 'X', '4', '_', '6', '4', 0,
     239             :   /* 328 */ 'X', '1', '5', '_', '6', '4', 0,
     240             :   /* 335 */ 'X', '2', '5', '_', '6', '4', 0,
     241             :   /* 342 */ 'X', '5', '_', '6', '4', 0,
     242             :   /* 348 */ 'X', '1', '6', '_', '6', '4', 0,
     243             :   /* 355 */ 'X', '2', '6', '_', '6', '4', 0,
     244             :   /* 362 */ 'X', '6', '_', '6', '4', 0,
     245             :   /* 368 */ 'X', '1', '7', '_', '6', '4', 0,
     246             :   /* 375 */ 'X', '2', '7', '_', '6', '4', 0,
     247             :   /* 382 */ 'X', '7', '_', '6', '4', 0,
     248             :   /* 388 */ 'X', '1', '8', '_', '6', '4', 0,
     249             :   /* 395 */ 'X', '2', '8', '_', '6', '4', 0,
     250             :   /* 402 */ 'X', '8', '_', '6', '4', 0,
     251             :   /* 408 */ 'X', '1', '9', '_', '6', '4', 0,
     252             :   /* 415 */ 'X', '2', '9', '_', '6', '4', 0,
     253             :   /* 422 */ 'X', '9', '_', '6', '4', 0,
     254             : };
     255             : 
     256             : extern const MCRegisterDesc RISCVRegDesc[] = { // Descriptors
     257             :   { 6, 0, 0, 0, 0, 0 },
     258             :   { 21, 1, 2, 1, 0, 0 },
     259             :   { 235, 64, 1, 0, 0, 2 },
     260             :   { 48, 1, 2, 1, 32, 0 },
     261             :   { 262, 64, 1, 0, 32, 2 },
     262             :   { 68, 1, 2, 1, 64, 0 },
     263             :   { 282, 64, 1, 0, 64, 2 },
     264             :   { 88, 1, 2, 1, 96, 0 },
     265             :   { 302, 64, 1, 0, 96, 2 },
     266             :   { 108, 1, 2, 1, 128, 0 },
     267             :   { 322, 64, 1, 0, 128, 2 },
     268             :   { 128, 1, 2, 1, 160, 0 },
     269             :   { 342, 64, 1, 0, 160, 2 },
     270             :   { 148, 1, 2, 1, 192, 0 },
     271             :   { 362, 64, 1, 0, 192, 2 },
     272             :   { 168, 1, 2, 1, 224, 0 },
     273             :   { 382, 64, 1, 0, 224, 2 },
     274             :   { 188, 1, 2, 1, 256, 0 },
     275             :   { 402, 64, 1, 0, 256, 2 },
     276             :   { 208, 1, 2, 1, 288, 0 },
     277             :   { 422, 64, 1, 0, 288, 2 },
     278             :   { 0, 1, 2, 1, 320, 0 },
     279             :   { 214, 64, 1, 0, 320, 2 },
     280             :   { 27, 1, 2, 1, 352, 0 },
     281             :   { 241, 64, 1, 0, 352, 2 },
     282             :   { 54, 1, 2, 1, 384, 0 },
     283             :   { 268, 64, 1, 0, 384, 2 },
     284             :   { 74, 1, 2, 1, 416, 0 },
     285             :   { 288, 64, 1, 0, 416, 2 },
     286             :   { 94, 1, 2, 1, 448, 0 },
     287             :   { 308, 64, 1, 0, 448, 2 },
     288             :   { 114, 1, 2, 1, 480, 0 },
     289             :   { 328, 64, 1, 0, 480, 2 },
     290             :   { 134, 1, 2, 1, 512, 0 },
     291             :   { 348, 64, 1, 0, 512, 2 },
     292             :   { 154, 1, 2, 1, 544, 0 },
     293             :   { 368, 64, 1, 0, 544, 2 },
     294             :   { 174, 1, 2, 1, 576, 0 },
     295             :   { 388, 64, 1, 0, 576, 2 },
     296             :   { 194, 1, 2, 1, 608, 0 },
     297             :   { 408, 64, 1, 0, 608, 2 },
     298             :   { 7, 1, 2, 1, 640, 0 },
     299             :   { 221, 64, 1, 0, 640, 2 },
     300             :   { 34, 1, 2, 1, 672, 0 },
     301             :   { 248, 64, 1, 0, 672, 2 },
     302             :   { 61, 1, 2, 1, 704, 0 },
     303             :   { 275, 64, 1, 0, 704, 2 },
     304             :   { 81, 1, 2, 1, 736, 0 },
     305             :   { 295, 64, 1, 0, 736, 2 },
     306             :   { 101, 1, 2, 1, 768, 0 },
     307             :   { 315, 64, 1, 0, 768, 2 },
     308             :   { 121, 1, 2, 1, 800, 0 },
     309             :   { 335, 64, 1, 0, 800, 2 },
     310             :   { 141, 1, 2, 1, 832, 0 },
     311             :   { 355, 64, 1, 0, 832, 2 },
     312             :   { 161, 1, 2, 1, 864, 0 },
     313             :   { 375, 64, 1, 0, 864, 2 },
     314             :   { 181, 1, 2, 1, 896, 0 },
     315             :   { 395, 64, 1, 0, 896, 2 },
     316             :   { 201, 1, 2, 1, 928, 0 },
     317             :   { 415, 64, 1, 0, 928, 2 },
     318             :   { 14, 1, 2, 1, 960, 0 },
     319             :   { 228, 64, 1, 0, 960, 2 },
     320             :   { 41, 1, 2, 1, 992, 0 },
     321             :   { 255, 64, 1, 0, 992, 2 },
     322             : };
     323             : 
     324             : extern const MCPhysReg RISCVRegUnitRoots[][2] = {
     325             :   { RISCV::X0_32 },
     326             :   { RISCV::X1_32 },
     327             :   { RISCV::X2_32 },
     328             :   { RISCV::X3_32 },
     329             :   { RISCV::X4_32 },
     330             :   { RISCV::X5_32 },
     331             :   { RISCV::X6_32 },
     332             :   { RISCV::X7_32 },
     333             :   { RISCV::X8_32 },
     334             :   { RISCV::X9_32 },
     335             :   { RISCV::X10_32 },
     336             :   { RISCV::X11_32 },
     337             :   { RISCV::X12_32 },
     338             :   { RISCV::X13_32 },
     339             :   { RISCV::X14_32 },
     340             :   { RISCV::X15_32 },
     341             :   { RISCV::X16_32 },
     342             :   { RISCV::X17_32 },
     343             :   { RISCV::X18_32 },
     344             :   { RISCV::X19_32 },
     345             :   { RISCV::X20_32 },
     346             :   { RISCV::X21_32 },
     347             :   { RISCV::X22_32 },
     348             :   { RISCV::X23_32 },
     349             :   { RISCV::X24_32 },
     350             :   { RISCV::X25_32 },
     351             :   { RISCV::X26_32 },
     352             :   { RISCV::X27_32 },
     353             :   { RISCV::X28_32 },
     354             :   { RISCV::X29_32 },
     355             :   { RISCV::X30_32 },
     356             :   { RISCV::X31_32 },
     357             : };
     358             : 
     359             : namespace {     // Register classes...
     360             :   // GPR Register Class...
     361             :   const MCPhysReg GPR[] = {
     362             :     RISCV::X0_32, RISCV::X1_32, RISCV::X2_32, RISCV::X3_32, RISCV::X4_32, RISCV::X5_32, RISCV::X6_32, RISCV::X7_32, RISCV::X8_32, RISCV::X9_32, RISCV::X10_32, RISCV::X11_32, RISCV::X12_32, RISCV::X13_32, RISCV::X14_32, RISCV::X15_32, RISCV::X16_32, RISCV::X17_32, RISCV::X18_32, RISCV::X19_32, RISCV::X20_32, RISCV::X21_32, RISCV::X22_32, RISCV::X23_32, RISCV::X24_32, RISCV::X25_32, RISCV::X26_32, RISCV::X27_32, RISCV::X28_32, RISCV::X29_32, RISCV::X30_32, RISCV::X31_32, 
     363             :   };
     364             : 
     365             :   // GPR Bit set.
     366             :   const uint8_t GPRBits[] = {
     367             :     0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
     368             :   };
     369             : 
     370             :   // GPR64 Register Class...
     371             :   const MCPhysReg GPR64[] = {
     372             :     RISCV::X0_64, RISCV::X1_64, RISCV::X2_64, RISCV::X3_64, RISCV::X4_64, RISCV::X5_64, RISCV::X6_64, RISCV::X7_64, RISCV::X8_64, RISCV::X9_64, RISCV::X10_64, RISCV::X11_64, RISCV::X12_64, RISCV::X13_64, RISCV::X14_64, RISCV::X15_64, RISCV::X16_64, RISCV::X17_64, RISCV::X18_64, RISCV::X19_64, RISCV::X20_64, RISCV::X21_64, RISCV::X22_64, RISCV::X23_64, RISCV::X24_64, RISCV::X25_64, RISCV::X26_64, RISCV::X27_64, RISCV::X28_64, RISCV::X29_64, RISCV::X30_64, RISCV::X31_64, 
     373             :   };
     374             : 
     375             :   // GPR64 Bit set.
     376             :   const uint8_t GPR64Bits[] = {
     377             :     0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 
     378             :   };
     379             : 
     380             : } // end anonymous namespace
     381             : 
     382             : extern const char RISCVRegClassStrings[] = {
     383             :   /* 0 */ 'G', 'P', 'R', '6', '4', 0,
     384             :   /* 6 */ 'G', 'P', 'R', 0,
     385             : };
     386             : 
     387             : extern const MCRegisterClass RISCVMCRegisterClasses[] = {
     388             :   { GPR, GPRBits, 6, 32, sizeof(GPRBits), RISCV::GPRRegClassID, 4, 1, true },
     389             :   { GPR64, GPR64Bits, 0, 32, sizeof(GPR64Bits), RISCV::GPR64RegClassID, 8, 1, true },
     390             : };
     391             : 
     392             : // RISCV Dwarf<->LLVM register mappings.
     393             : extern const MCRegisterInfo::DwarfLLVMRegPair RISCVDwarfFlavour0Dwarf2L[] = {
     394             :   { 0U, RISCV::X0_64 },
     395             :   { 1U, RISCV::X1_64 },
     396             :   { 2U, RISCV::X2_64 },
     397             :   { 3U, RISCV::X3_64 },
     398             :   { 4U, RISCV::X4_64 },
     399             :   { 5U, RISCV::X5_64 },
     400             :   { 6U, RISCV::X6_64 },
     401             :   { 7U, RISCV::X7_64 },
     402             :   { 8U, RISCV::X8_64 },
     403             :   { 9U, RISCV::X9_64 },
     404             :   { 10U, RISCV::X10_64 },
     405             :   { 11U, RISCV::X11_64 },
     406             :   { 12U, RISCV::X12_64 },
     407             :   { 13U, RISCV::X13_64 },
     408             :   { 14U, RISCV::X14_64 },
     409             :   { 15U, RISCV::X15_64 },
     410             :   { 16U, RISCV::X16_64 },
     411             :   { 17U, RISCV::X17_64 },
     412             :   { 18U, RISCV::X18_64 },
     413             :   { 19U, RISCV::X19_64 },
     414             :   { 20U, RISCV::X20_64 },
     415             :   { 21U, RISCV::X21_64 },
     416             :   { 22U, RISCV::X22_64 },
     417             :   { 23U, RISCV::X23_64 },
     418             :   { 24U, RISCV::X24_64 },
     419             :   { 25U, RISCV::X25_64 },
     420             :   { 26U, RISCV::X26_64 },
     421             :   { 27U, RISCV::X27_64 },
     422             :   { 28U, RISCV::X28_64 },
     423             :   { 29U, RISCV::X29_64 },
     424             :   { 30U, RISCV::X30_64 },
     425             :   { 31U, RISCV::X31_64 },
     426             : };
     427             : extern const unsigned RISCVDwarfFlavour0Dwarf2LSize = array_lengthof(RISCVDwarfFlavour0Dwarf2L);
     428             : 
     429             : extern const MCRegisterInfo::DwarfLLVMRegPair RISCVEHFlavour0Dwarf2L[] = {
     430             :   { 0U, RISCV::X0_64 },
     431             :   { 1U, RISCV::X1_64 },
     432             :   { 2U, RISCV::X2_64 },
     433             :   { 3U, RISCV::X3_64 },
     434             :   { 4U, RISCV::X4_64 },
     435             :   { 5U, RISCV::X5_64 },
     436             :   { 6U, RISCV::X6_64 },
     437             :   { 7U, RISCV::X7_64 },
     438             :   { 8U, RISCV::X8_64 },
     439             :   { 9U, RISCV::X9_64 },
     440             :   { 10U, RISCV::X10_64 },
     441             :   { 11U, RISCV::X11_64 },
     442             :   { 12U, RISCV::X12_64 },
     443             :   { 13U, RISCV::X13_64 },
     444             :   { 14U, RISCV::X14_64 },
     445             :   { 15U, RISCV::X15_64 },
     446             :   { 16U, RISCV::X16_64 },
     447             :   { 17U, RISCV::X17_64 },
     448             :   { 18U, RISCV::X18_64 },
     449             :   { 19U, RISCV::X19_64 },
     450             :   { 20U, RISCV::X20_64 },
     451             :   { 21U, RISCV::X21_64 },
     452             :   { 22U, RISCV::X22_64 },
     453             :   { 23U, RISCV::X23_64 },
     454             :   { 24U, RISCV::X24_64 },
     455             :   { 25U, RISCV::X25_64 },
     456             :   { 26U, RISCV::X26_64 },
     457             :   { 27U, RISCV::X27_64 },
     458             :   { 28U, RISCV::X28_64 },
     459             :   { 29U, RISCV::X29_64 },
     460             :   { 30U, RISCV::X30_64 },
     461             :   { 31U, RISCV::X31_64 },
     462             : };
     463             : extern const unsigned RISCVEHFlavour0Dwarf2LSize = array_lengthof(RISCVEHFlavour0Dwarf2L);
     464             : 
     465             : extern const MCRegisterInfo::DwarfLLVMRegPair RISCVDwarfFlavour0L2Dwarf[] = {
     466             :   { RISCV::X0_32, 0U },
     467             :   { RISCV::X0_64, 0U },
     468             :   { RISCV::X1_32, 1U },
     469             :   { RISCV::X1_64, 1U },
     470             :   { RISCV::X2_32, 2U },
     471             :   { RISCV::X2_64, 2U },
     472             :   { RISCV::X3_32, 3U },
     473             :   { RISCV::X3_64, 3U },
     474             :   { RISCV::X4_32, 4U },
     475             :   { RISCV::X4_64, 4U },
     476             :   { RISCV::X5_32, 5U },
     477             :   { RISCV::X5_64, 5U },
     478             :   { RISCV::X6_32, 6U },
     479             :   { RISCV::X6_64, 6U },
     480             :   { RISCV::X7_32, 7U },
     481             :   { RISCV::X7_64, 7U },
     482             :   { RISCV::X8_32, 8U },
     483             :   { RISCV::X8_64, 8U },
     484             :   { RISCV::X9_32, 9U },
     485             :   { RISCV::X9_64, 9U },
     486             :   { RISCV::X10_32, 10U },
     487             :   { RISCV::X10_64, 10U },
     488             :   { RISCV::X11_32, 11U },
     489             :   { RISCV::X11_64, 11U },
     490             :   { RISCV::X12_32, 12U },
     491             :   { RISCV::X12_64, 12U },
     492             :   { RISCV::X13_32, 13U },
     493             :   { RISCV::X13_64, 13U },
     494             :   { RISCV::X14_32, 14U },
     495             :   { RISCV::X14_64, 14U },
     496             :   { RISCV::X15_32, 15U },
     497             :   { RISCV::X15_64, 15U },
     498             :   { RISCV::X16_32, 16U },
     499             :   { RISCV::X16_64, 16U },
     500             :   { RISCV::X17_32, 17U },
     501             :   { RISCV::X17_64, 17U },
     502             :   { RISCV::X18_32, 18U },
     503             :   { RISCV::X18_64, 18U },
     504             :   { RISCV::X19_32, 19U },
     505             :   { RISCV::X19_64, 19U },
     506             :   { RISCV::X20_32, 20U },
     507             :   { RISCV::X20_64, 20U },
     508             :   { RISCV::X21_32, 21U },
     509             :   { RISCV::X21_64, 21U },
     510             :   { RISCV::X22_32, 22U },
     511             :   { RISCV::X22_64, 22U },
     512             :   { RISCV::X23_32, 23U },
     513             :   { RISCV::X23_64, 23U },
     514             :   { RISCV::X24_32, 24U },
     515             :   { RISCV::X24_64, 24U },
     516             :   { RISCV::X25_32, 25U },
     517             :   { RISCV::X25_64, 25U },
     518             :   { RISCV::X26_32, 26U },
     519             :   { RISCV::X26_64, 26U },
     520             :   { RISCV::X27_32, 27U },
     521             :   { RISCV::X27_64, 27U },
     522             :   { RISCV::X28_32, 28U },
     523             :   { RISCV::X28_64, 28U },
     524             :   { RISCV::X29_32, 29U },
     525             :   { RISCV::X29_64, 29U },
     526             :   { RISCV::X30_32, 30U },
     527             :   { RISCV::X30_64, 30U },
     528             :   { RISCV::X31_32, 31U },
     529             :   { RISCV::X31_64, 31U },
     530             : };
     531             : extern const unsigned RISCVDwarfFlavour0L2DwarfSize = array_lengthof(RISCVDwarfFlavour0L2Dwarf);
     532             : 
     533             : extern const MCRegisterInfo::DwarfLLVMRegPair RISCVEHFlavour0L2Dwarf[] = {
     534             :   { RISCV::X0_32, 0U },
     535             :   { RISCV::X0_64, 0U },
     536             :   { RISCV::X1_32, 1U },
     537             :   { RISCV::X1_64, 1U },
     538             :   { RISCV::X2_32, 2U },
     539             :   { RISCV::X2_64, 2U },
     540             :   { RISCV::X3_32, 3U },
     541             :   { RISCV::X3_64, 3U },
     542             :   { RISCV::X4_32, 4U },
     543             :   { RISCV::X4_64, 4U },
     544             :   { RISCV::X5_32, 5U },
     545             :   { RISCV::X5_64, 5U },
     546             :   { RISCV::X6_32, 6U },
     547             :   { RISCV::X6_64, 6U },
     548             :   { RISCV::X7_32, 7U },
     549             :   { RISCV::X7_64, 7U },
     550             :   { RISCV::X8_32, 8U },
     551             :   { RISCV::X8_64, 8U },
     552             :   { RISCV::X9_32, 9U },
     553             :   { RISCV::X9_64, 9U },
     554             :   { RISCV::X10_32, 10U },
     555             :   { RISCV::X10_64, 10U },
     556             :   { RISCV::X11_32, 11U },
     557             :   { RISCV::X11_64, 11U },
     558             :   { RISCV::X12_32, 12U },
     559             :   { RISCV::X12_64, 12U },
     560             :   { RISCV::X13_32, 13U },
     561             :   { RISCV::X13_64, 13U },
     562             :   { RISCV::X14_32, 14U },
     563             :   { RISCV::X14_64, 14U },
     564             :   { RISCV::X15_32, 15U },
     565             :   { RISCV::X15_64, 15U },
     566             :   { RISCV::X16_32, 16U },
     567             :   { RISCV::X16_64, 16U },
     568             :   { RISCV::X17_32, 17U },
     569             :   { RISCV::X17_64, 17U },
     570             :   { RISCV::X18_32, 18U },
     571             :   { RISCV::X18_64, 18U },
     572             :   { RISCV::X19_32, 19U },
     573             :   { RISCV::X19_64, 19U },
     574             :   { RISCV::X20_32, 20U },
     575             :   { RISCV::X20_64, 20U },
     576             :   { RISCV::X21_32, 21U },
     577             :   { RISCV::X21_64, 21U },
     578             :   { RISCV::X22_32, 22U },
     579             :   { RISCV::X22_64, 22U },
     580             :   { RISCV::X23_32, 23U },
     581             :   { RISCV::X23_64, 23U },
     582             :   { RISCV::X24_32, 24U },
     583             :   { RISCV::X24_64, 24U },
     584             :   { RISCV::X25_32, 25U },
     585             :   { RISCV::X25_64, 25U },
     586             :   { RISCV::X26_32, 26U },
     587             :   { RISCV::X26_64, 26U },
     588             :   { RISCV::X27_32, 27U },
     589             :   { RISCV::X27_64, 27U },
     590             :   { RISCV::X28_32, 28U },
     591             :   { RISCV::X28_64, 28U },
     592             :   { RISCV::X29_32, 29U },
     593             :   { RISCV::X29_64, 29U },
     594             :   { RISCV::X30_32, 30U },
     595             :   { RISCV::X30_64, 30U },
     596             :   { RISCV::X31_32, 31U },
     597             :   { RISCV::X31_64, 31U },
     598             : };
     599             : extern const unsigned RISCVEHFlavour0L2DwarfSize = array_lengthof(RISCVEHFlavour0L2Dwarf);
     600             : 
     601             : extern const uint16_t RISCVRegEncodingTable[] = {
     602             :   0,
     603             :   0,
     604             :   0,
     605             :   1,
     606             :   1,
     607             :   2,
     608             :   2,
     609             :   3,
     610             :   3,
     611             :   4,
     612             :   4,
     613             :   5,
     614             :   5,
     615             :   6,
     616             :   6,
     617             :   7,
     618             :   7,
     619             :   8,
     620             :   8,
     621             :   9,
     622             :   9,
     623             :   10,
     624             :   10,
     625             :   11,
     626             :   11,
     627             :   12,
     628             :   12,
     629             :   13,
     630             :   13,
     631             :   14,
     632             :   14,
     633             :   15,
     634             :   15,
     635             :   16,
     636             :   16,
     637             :   17,
     638             :   17,
     639             :   18,
     640             :   18,
     641             :   19,
     642             :   19,
     643             :   20,
     644             :   20,
     645             :   21,
     646             :   21,
     647             :   22,
     648             :   22,
     649             :   23,
     650             :   23,
     651             :   24,
     652             :   24,
     653             :   25,
     654             :   25,
     655             :   26,
     656             :   26,
     657             :   27,
     658             :   27,
     659             :   28,
     660             :   28,
     661             :   29,
     662             :   29,
     663             :   30,
     664             :   30,
     665             :   31,
     666             :   31,
     667             : };
     668             : static inline void InitRISCVMCRegisterInfo(MCRegisterInfo *RI, unsigned RA, unsigned DwarfFlavour = 0, unsigned EHFlavour = 0, unsigned PC = 0) {
     669             :   RI->InitMCRegisterInfo(RISCVRegDesc, 65, RA, PC, RISCVMCRegisterClasses, 2, RISCVRegUnitRoots, 32, RISCVRegDiffLists, RISCVLaneMaskLists, RISCVRegStrings, RISCVRegClassStrings, RISCVSubRegIdxLists, 2,
     670           0 : RISCVSubRegIdxRanges, RISCVRegEncodingTable);
     671             : 
     672             :   switch (DwarfFlavour) {
     673             :   default:
     674             :     llvm_unreachable("Unknown DWARF flavour");
     675             :   case 0:
     676           0 :     RI->mapDwarfRegsToLLVMRegs(RISCVDwarfFlavour0Dwarf2L, RISCVDwarfFlavour0Dwarf2LSize, false);
     677             :     break;
     678             :   }
     679             :   switch (EHFlavour) {
     680             :   default:
     681             :     llvm_unreachable("Unknown DWARF flavour");
     682             :   case 0:
     683           0 :     RI->mapDwarfRegsToLLVMRegs(RISCVEHFlavour0Dwarf2L, RISCVEHFlavour0Dwarf2LSize, true);
     684             :     break;
     685             :   }
     686             :   switch (DwarfFlavour) {
     687             :   default:
     688             :     llvm_unreachable("Unknown DWARF flavour");
     689             :   case 0:
     690           0 :     RI->mapLLVMRegsToDwarfRegs(RISCVDwarfFlavour0L2Dwarf, RISCVDwarfFlavour0L2DwarfSize, false);
     691             :     break;
     692             :   }
     693             :   switch (EHFlavour) {
     694             :   default:
     695             :     llvm_unreachable("Unknown DWARF flavour");
     696             :   case 0:
     697           0 :     RI->mapLLVMRegsToDwarfRegs(RISCVEHFlavour0L2Dwarf, RISCVEHFlavour0L2DwarfSize, true);
     698             :     break;
     699             :   }
     700             : }
     701             : 
     702             : } // end namespace llvm
     703             : 
     704             : #endif // GET_REGINFO_MC_DESC
     705             : 
     706             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
     707             : |*                                                                            *|
     708             : |* Register Information Header Fragment                                       *|
     709             : |*                                                                            *|
     710             : |* Automatically generated file, do not edit!                                 *|
     711             : |*                                                                            *|
     712             : \*===----------------------------------------------------------------------===*/
     713             : 
     714             : 
     715             : #ifdef GET_REGINFO_HEADER
     716             : #undef GET_REGINFO_HEADER
     717             : 
     718             : #include "llvm/Target/TargetRegisterInfo.h"
     719             : 
     720             : namespace llvm {
     721             : 
     722             : class RISCVFrameLowering;
     723             : 
     724             : struct RISCVGenRegisterInfo : public TargetRegisterInfo {
     725             :   explicit RISCVGenRegisterInfo(unsigned RA, unsigned D = 0, unsigned E = 0, unsigned PC = 0);
     726             :   unsigned composeSubRegIndicesImpl(unsigned, unsigned) const override;
     727             :   LaneBitmask composeSubRegIndexLaneMaskImpl(unsigned, LaneBitmask) const override;
     728             :   LaneBitmask reverseComposeSubRegIndexLaneMaskImpl(unsigned, LaneBitmask) const override;
     729             :   const TargetRegisterClass *getSubClassWithSubReg(const TargetRegisterClass*, unsigned) const override;
     730             :   const RegClassWeight &getRegClassWeight(const TargetRegisterClass *RC) const override;
     731             :   unsigned getRegUnitWeight(unsigned RegUnit) const override;
     732             :   unsigned getNumRegPressureSets() const override;
     733             :   const char *getRegPressureSetName(unsigned Idx) const override;
     734             :   unsigned getRegPressureSetLimit(const MachineFunction &MF, unsigned Idx) const override;
     735             :   const int *getRegClassPressureSets(const TargetRegisterClass *RC) const override;
     736             :   const int *getRegUnitPressureSets(unsigned RegUnit) const override;
     737             :   ArrayRef<const char *> getRegMaskNames() const override;
     738             :   ArrayRef<const uint32_t *> getRegMasks() const override;
     739             :   /// Devirtualized TargetFrameLowering.
     740             :   static const RISCVFrameLowering *getFrameLowering(
     741             :       const MachineFunction &MF);
     742             : };
     743             : 
     744             : namespace RISCV { // Register classes
     745             :   extern const TargetRegisterClass GPRRegClass;
     746             :   extern const TargetRegisterClass GPR64RegClass;
     747             : } // end namespace RISCV
     748             : 
     749             : } // end namespace llvm
     750             : 
     751             : #endif // GET_REGINFO_HEADER
     752             : 
     753             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
     754             : |*                                                                            *|
     755             : |* Target Register and Register Classes Information                           *|
     756             : |*                                                                            *|
     757             : |* Automatically generated file, do not edit!                                 *|
     758             : |*                                                                            *|
     759             : \*===----------------------------------------------------------------------===*/
     760             : 
     761             : 
     762             : #ifdef GET_REGINFO_TARGET_DESC
     763             : #undef GET_REGINFO_TARGET_DESC
     764             : 
     765             : namespace llvm {
     766             : 
     767             : extern const MCRegisterClass RISCVMCRegisterClasses[];
     768             : 
     769             : static const MVT::SimpleValueType VTLists[] = {
     770             :   /* 0 */ MVT::i32, MVT::Other,
     771             :   /* 2 */ MVT::i64, MVT::Other,
     772             : };
     773             : 
     774             : static const char *const SubRegIndexNameTable[] = { "sub_32", "" };
     775             : 
     776             : 
     777             : static const LaneBitmask SubRegIndexLaneMaskTable[] = {
     778             :   LaneBitmask::getAll(),
     779             :   LaneBitmask(0x00000001), // sub_32
     780             :  };
     781             : 
     782             : 
     783             : 
     784             : static const TargetRegisterClass *const NullRegClasses[] = { nullptr };
     785             : 
     786             : static const uint32_t GPRSubClassMask[] = {
     787             :   0x00000001, 
     788             :   0x00000002, // sub_32
     789             : };
     790             : 
     791             : static const uint32_t GPR64SubClassMask[] = {
     792             :   0x00000002, 
     793             : };
     794             : 
     795             : static const uint16_t SuperRegIdxSeqs[] = {
     796             :   /* 0 */ 1, 0,
     797             : };
     798             : 
     799             : 
     800             : namespace RISCV {   // Register class instances
     801             :   extern const TargetRegisterClass GPRRegClass = {
     802             :     &RISCVMCRegisterClasses[GPRRegClassID],
     803             :     4, /* SpillSize */
     804             :     4, /* SpillAlignment */
     805             :     VTLists + 0,
     806             :     GPRSubClassMask,
     807             :     SuperRegIdxSeqs + 0,
     808             :     LaneBitmask(0x00000001),
     809             :     0,
     810             :     false, /* HasDisjunctSubRegs */
     811             :     false, /* CoveredBySubRegs */
     812             :     NullRegClasses,
     813             :     nullptr
     814             :   };
     815             : 
     816             :   extern const TargetRegisterClass GPR64RegClass = {
     817             :     &RISCVMCRegisterClasses[GPR64RegClassID],
     818             :     8, /* SpillSize */
     819             :     8, /* SpillAlignment */
     820             :     VTLists + 2,
     821             :     GPR64SubClassMask,
     822             :     SuperRegIdxSeqs + 1,
     823             :     LaneBitmask(0x00000001),
     824             :     0,
     825             :     false, /* HasDisjunctSubRegs */
     826             :     false, /* CoveredBySubRegs */
     827             :     NullRegClasses,
     828             :     nullptr
     829             :   };
     830             : 
     831             : } // end namespace RISCV
     832             : 
     833             : namespace {
     834             :   const TargetRegisterClass* const RegisterClasses[] = {
     835             :     &RISCV::GPRRegClass,
     836             :     &RISCV::GPR64RegClass,
     837             :   };
     838             : } // end anonymous namespace
     839             : 
     840             : static const TargetRegisterInfoDesc RISCVRegInfoDesc[] = { // Extra Descriptors
     841             :   { 0, false },
     842             :   { 0, true },
     843             :   { 0, true },
     844             :   { 0, true },
     845             :   { 0, true },
     846             :   { 0, true },
     847             :   { 0, true },
     848             :   { 0, true },
     849             :   { 0, true },
     850             :   { 0, true },
     851             :   { 0, true },
     852             :   { 0, true },
     853             :   { 0, true },
     854             :   { 0, true },
     855             :   { 0, true },
     856             :   { 0, true },
     857             :   { 0, true },
     858             :   { 0, true },
     859             :   { 0, true },
     860             :   { 0, true },
     861             :   { 0, true },
     862             :   { 0, true },
     863             :   { 0, true },
     864             :   { 0, true },
     865             :   { 0, true },
     866             :   { 0, true },
     867             :   { 0, true },
     868             :   { 0, true },
     869             :   { 0, true },
     870             :   { 0, true },
     871             :   { 0, true },
     872             :   { 0, true },
     873             :   { 0, true },
     874             :   { 0, true },
     875             :   { 0, true },
     876             :   { 0, true },
     877             :   { 0, true },
     878             :   { 0, true },
     879             :   { 0, true },
     880             :   { 0, true },
     881             :   { 0, true },
     882             :   { 0, true },
     883             :   { 0, true },
     884             :   { 0, true },
     885             :   { 0, true },
     886             :   { 0, true },
     887             :   { 0, true },
     888             :   { 0, true },
     889             :   { 0, true },
     890             :   { 0, true },
     891             :   { 0, true },
     892             :   { 0, true },
     893             :   { 0, true },
     894             :   { 0, true },
     895             :   { 0, true },
     896             :   { 0, true },
     897             :   { 0, true },
     898             :   { 0, true },
     899             :   { 0, true },
     900             :   { 0, true },
     901             :   { 0, true },
     902             :   { 0, true },
     903             :   { 0, true },
     904             :   { 0, true },
     905             :   { 0, true },
     906             : };
     907             : unsigned RISCVGenRegisterInfo::composeSubRegIndicesImpl(unsigned IdxA, unsigned IdxB) const {
     908             :   static const uint8_t Rows[1][1] = {
     909             :     { 0, },
     910             :   };
     911             : 
     912             :   --IdxA; assert(IdxA < 1);
     913             :   --IdxB; assert(IdxB < 1);
     914             :   return Rows[0][IdxB];
     915             : }
     916             : 
     917             :   struct MaskRolOp {
     918             :     LaneBitmask Mask;
     919             :     uint8_t  RotateLeft;
     920             :   };
     921             :   static const MaskRolOp LaneMaskComposeSequences[] = {
     922             :     { LaneBitmask(0xFFFFFFFF),  0 }, { LaneBitmask::getNone(), 0 }  // Sequence 0
     923             :   };
     924             :   static const MaskRolOp *const CompositeSequences[] = {
     925             :     &LaneMaskComposeSequences[0] // to sub_32
     926             :   };
     927             : 
     928             : LaneBitmask RISCVGenRegisterInfo::composeSubRegIndexLaneMaskImpl(unsigned IdxA, LaneBitmask LaneMask) const {
     929             :   --IdxA; assert(IdxA < 1 && "Subregister index out of bounds");
     930             :   LaneBitmask Result;
     931             :   for (const MaskRolOp *Ops = CompositeSequences[IdxA]; Ops->Mask.any(); ++Ops) {
     932             :     LaneBitmask::Type M = LaneMask.getAsInteger() & Ops->Mask.getAsInteger();
     933             :     if (unsigned S = Ops->RotateLeft)
     934             :       Result |= LaneBitmask((M << S) | (M >> (LaneBitmask::BitWidth - S)));
     935             :     else
     936             :       Result |= LaneBitmask(M);
     937             :   }
     938             :   return Result;
     939             : }
     940             : 
     941             : LaneBitmask RISCVGenRegisterInfo::reverseComposeSubRegIndexLaneMaskImpl(unsigned IdxA,  LaneBitmask LaneMask) const {
     942             :   LaneMask &= getSubRegIndexLaneMask(IdxA);
     943             :   --IdxA; assert(IdxA < 1 && "Subregister index out of bounds");
     944             :   LaneBitmask Result;
     945             :   for (const MaskRolOp *Ops = CompositeSequences[IdxA]; Ops->Mask.any(); ++Ops) {
     946             :     LaneBitmask::Type M = LaneMask.getAsInteger();
     947             :     if (unsigned S = Ops->RotateLeft)
     948             :       Result |= LaneBitmask((M >> S) | (M << (LaneBitmask::BitWidth - S)));
     949             :     else
     950             :       Result |= LaneBitmask(M);
     951             :   }
     952             :   return Result;
     953             : }
     954             : 
     955             : const TargetRegisterClass *RISCVGenRegisterInfo::getSubClassWithSubReg(const TargetRegisterClass *RC, unsigned Idx) const {
     956             :   static const uint8_t Table[2][1] = {
     957             :     {   // GPR
     958             :       0,        // sub_32
     959             :     },
     960             :     {   // GPR64
     961             :       2,        // sub_32 -> GPR64
     962             :     },
     963             :   };
     964             :   assert(RC && "Missing regclass");
     965             :   if (!Idx) return RC;
     966             :   --Idx;
     967             :   assert(Idx < 1 && "Bad subreg");
     968             :   unsigned TV = Table[RC->getID()][Idx];
     969             :   return TV ? getRegClass(TV - 1) : nullptr;
     970             : }
     971             : 
     972             : /// Get the weight in units of pressure for this register class.
     973             : const RegClassWeight &RISCVGenRegisterInfo::
     974             : getRegClassWeight(const TargetRegisterClass *RC) const {
     975             :   static const RegClassWeight RCWeightTable[] = {
     976             :     {1, 32},    // GPR
     977             :     {1, 32},    // GPR64
     978             :   };
     979             :   return RCWeightTable[RC->getID()];
     980             : }
     981             : 
     982             : /// Get the weight in units of pressure for this register unit.
     983             : unsigned RISCVGenRegisterInfo::
     984             : getRegUnitWeight(unsigned RegUnit) const {
     985             :   assert(RegUnit < 32 && "invalid register unit");
     986             :   // All register units have unit weight.
     987             :   return 1;
     988             : }
     989             : 
     990             : 
     991             : // Get the number of dimensions of register pressure.
     992             : unsigned RISCVGenRegisterInfo::getNumRegPressureSets() const {
     993             :   return 1;
     994             : }
     995             : 
     996             : // Get the name of this register unit pressure set.
     997             : const char *RISCVGenRegisterInfo::
     998             : getRegPressureSetName(unsigned Idx) const {
     999             :   static const char *const PressureNameTable[] = {
    1000             :     "GPR",
    1001             :   };
    1002             :   return PressureNameTable[Idx];
    1003             : }
    1004             : 
    1005             : // Get the register unit pressure limit for this dimension.
    1006             : // This limit must be adjusted dynamically for reserved registers.
    1007             : unsigned RISCVGenRegisterInfo::
    1008             : getRegPressureSetLimit(const MachineFunction &MF, unsigned Idx) const {
    1009             :   static const uint8_t PressureLimitTable[] = {
    1010             :     32,         // 0: GPR
    1011             :   };
    1012             :   return PressureLimitTable[Idx];
    1013             : }
    1014             : 
    1015             : /// Table of pressure sets per register class or unit.
    1016             : static const int RCSetsTable[] = {
    1017             :   /* 0 */ 0, -1,
    1018             : };
    1019             : 
    1020             : /// Get the dimensions of register pressure impacted by this register class.
    1021             : /// Returns a -1 terminated array of pressure set IDs
    1022             : const int* RISCVGenRegisterInfo::
    1023             : getRegClassPressureSets(const TargetRegisterClass *RC) const {
    1024             :   static const uint8_t RCSetStartTable[] = {
    1025             :     0,0,};
    1026             :   return &RCSetsTable[RCSetStartTable[RC->getID()]];
    1027             : }
    1028             : 
    1029             : /// Get the dimensions of register pressure impacted by this register unit.
    1030             : /// Returns a -1 terminated array of pressure set IDs
    1031             : const int* RISCVGenRegisterInfo::
    1032             : getRegUnitPressureSets(unsigned RegUnit) const {
    1033             :   assert(RegUnit < 32 && "invalid register unit");
    1034             :   static const uint8_t RUSetStartTable[] = {
    1035             :     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
    1036             :   return &RCSetsTable[RUSetStartTable[RegUnit]];
    1037             : }
    1038             : 
    1039             : extern const MCRegisterDesc RISCVRegDesc[];
    1040             : extern const MCPhysReg RISCVRegDiffLists[];
    1041             : extern const LaneBitmask RISCVLaneMaskLists[];
    1042             : extern const char RISCVRegStrings[];
    1043             : extern const char RISCVRegClassStrings[];
    1044             : extern const MCPhysReg RISCVRegUnitRoots[][2];
    1045             : extern const uint16_t RISCVSubRegIdxLists[];
    1046             : extern const MCRegisterInfo::SubRegCoveredBits RISCVSubRegIdxRanges[];
    1047             : extern const uint16_t RISCVRegEncodingTable[];
    1048             : // RISCV Dwarf<->LLVM register mappings.
    1049             : extern const MCRegisterInfo::DwarfLLVMRegPair RISCVDwarfFlavour0Dwarf2L[];
    1050             : extern const unsigned RISCVDwarfFlavour0Dwarf2LSize;
    1051             : 
    1052             : extern const MCRegisterInfo::DwarfLLVMRegPair RISCVEHFlavour0Dwarf2L[];
    1053             : extern const unsigned RISCVEHFlavour0Dwarf2LSize;
    1054             : 
    1055             : extern const MCRegisterInfo::DwarfLLVMRegPair RISCVDwarfFlavour0L2Dwarf[];
    1056             : extern const unsigned RISCVDwarfFlavour0L2DwarfSize;
    1057             : 
    1058             : extern const MCRegisterInfo::DwarfLLVMRegPair RISCVEHFlavour0L2Dwarf[];
    1059             : extern const unsigned RISCVEHFlavour0L2DwarfSize;
    1060             : 
    1061             : RISCVGenRegisterInfo::
    1062             : RISCVGenRegisterInfo(unsigned RA, unsigned DwarfFlavour, unsigned EHFlavour, unsigned PC)
    1063             :   : TargetRegisterInfo(RISCVRegInfoDesc, RegisterClasses, RegisterClasses+2,
    1064             :              SubRegIndexNameTable, SubRegIndexLaneMaskTable, LaneBitmask(0xFFFFFFFE)) {
    1065             :   InitMCRegisterInfo(RISCVRegDesc, 65, RA, PC,
    1066             :                      RISCVMCRegisterClasses, 2,
    1067             :                      RISCVRegUnitRoots,
    1068             :                      32,
    1069             :                      RISCVRegDiffLists,
    1070             :                      RISCVLaneMaskLists,
    1071             :                      RISCVRegStrings,
    1072             :                      RISCVRegClassStrings,
    1073             :                      RISCVSubRegIdxLists,
    1074             :                      2,
    1075             :                      RISCVSubRegIdxRanges,
    1076             :                      RISCVRegEncodingTable);
    1077             : 
    1078             :   switch (DwarfFlavour) {
    1079             :   default:
    1080             :     llvm_unreachable("Unknown DWARF flavour");
    1081             :   case 0:
    1082             :     mapDwarfRegsToLLVMRegs(RISCVDwarfFlavour0Dwarf2L, RISCVDwarfFlavour0Dwarf2LSize, false);
    1083             :     break;
    1084             :   }
    1085             :   switch (EHFlavour) {
    1086             :   default:
    1087             :     llvm_unreachable("Unknown DWARF flavour");
    1088             :   case 0:
    1089             :     mapDwarfRegsToLLVMRegs(RISCVEHFlavour0Dwarf2L, RISCVEHFlavour0Dwarf2LSize, true);
    1090             :     break;
    1091             :   }
    1092             :   switch (DwarfFlavour) {
    1093             :   default:
    1094             :     llvm_unreachable("Unknown DWARF flavour");
    1095             :   case 0:
    1096             :     mapLLVMRegsToDwarfRegs(RISCVDwarfFlavour0L2Dwarf, RISCVDwarfFlavour0L2DwarfSize, false);
    1097             :     break;
    1098             :   }
    1099             :   switch (EHFlavour) {
    1100             :   default:
    1101             :     llvm_unreachable("Unknown DWARF flavour");
    1102             :   case 0:
    1103             :     mapLLVMRegsToDwarfRegs(RISCVEHFlavour0L2Dwarf, RISCVEHFlavour0L2DwarfSize, true);
    1104             :     break;
    1105             :   }
    1106             : }
    1107             : 
    1108             : 
    1109             : 
    1110             : ArrayRef<const uint32_t *> RISCVGenRegisterInfo::getRegMasks() const {
    1111             :   return None;
    1112             : }
    1113             : 
    1114             : ArrayRef<const char *> RISCVGenRegisterInfo::getRegMaskNames() const {
    1115             :   return None;
    1116             : }
    1117             : 
    1118             : const RISCVFrameLowering *
    1119             : RISCVGenRegisterInfo::getFrameLowering(const MachineFunction &MF) {
    1120             :   return static_cast<const RISCVFrameLowering *>(
    1121             :       MF.getSubtarget().getFrameLowering());
    1122             : }
    1123             : 
    1124             : } // end namespace llvm
    1125             : 
    1126             : #endif // GET_REGINFO_TARGET_DESC
    1127             : 

Generated by: LCOV version 1.13