LCOV - code coverage report
Current view: top level - build-llvm/lib/Target/R600 - AMDGPUGenSubtargetInfo.inc (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 54 56 96.4 %
Date: 2015-06-12 22:53:20 Functions: 3 6 50.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
       2             : |*                                                                            *|
       3             : |* Subtarget Enumeration Source Fragment                                      *|
       4             : |*                                                                            *|
       5             : |* Automatically generated file, do not edit!                                 *|
       6             : |*                                                                            *|
       7             : \*===----------------------------------------------------------------------===*/
       8             : 
       9             : 
      10             : #ifdef GET_SUBTARGETINFO_ENUM
      11             : #undef GET_SUBTARGETINFO_ENUM
      12             : namespace llvm {
      13             : namespace AMDGPU {
      14             : enum : uint64_t {
      15             :   Feature64BitPtr = 0,
      16             :   FeatureCFALUBug = 1,
      17             :   FeatureCIInsts = 2,
      18             :   FeatureCaymanISA = 3,
      19             :   FeatureDisable = 4,
      20             :   FeatureDumpCode = 5,
      21             :   FeatureDumpCodeLower = 6,
      22             :   FeatureEnableLoadStoreOpt = 7,
      23             :   FeatureEvergreen = 8,
      24             :   FeatureFP32Denormals = 9,
      25             :   FeatureFP64 = 10,
      26             :   FeatureFP64Denormals = 11,
      27             :   FeatureFastFMAF32 = 12,
      28             :   FeatureFetchLimit8 = 13,
      29             :   FeatureFetchLimit16 = 14,
      30             :   FeatureFlatAddressSpace = 15,
      31             :   FeatureGCN = 16,
      32             :   FeatureGCN1Encoding = 17,
      33             :   FeatureGCN3Encoding = 18,
      34             :   FeatureIRStructurizer = 19,
      35             :   FeatureIfCvt = 20,
      36             :   FeatureLDSBankCount16 = 21,
      37             :   FeatureLDSBankCount32 = 22,
      38             :   FeatureLocalMemorySize0 = 23,
      39             :   FeatureLocalMemorySize32768 = 24,
      40             :   FeatureLocalMemorySize65536 = 25,
      41             :   FeatureNorthernIslands = 26,
      42             :   FeaturePromoteAlloca = 27,
      43             :   FeatureR600 = 28,
      44             :   FeatureR600ALUInst = 29,
      45             :   FeatureR700 = 30,
      46             :   FeatureSGPRInitBug = 31,
      47             :   FeatureSeaIslands = 32,
      48             :   FeatureSouthernIslands = 33,
      49             :   FeatureVGPRSpilling = 34,
      50             :   FeatureVertexCache = 35,
      51             :   FeatureVolcanicIslands = 36,
      52             :   FeatureWavefrontSize16 = 37,
      53             :   FeatureWavefrontSize32 = 38,
      54             :   FeatureWavefrontSize64 = 39
      55             : };
      56             : }
      57             : } // End llvm namespace 
      58             : #endif // GET_SUBTARGETINFO_ENUM
      59             : 
      60             : 
      61             : #ifdef GET_SUBTARGETINFO_MC_DESC
      62             : #undef GET_SUBTARGETINFO_MC_DESC
      63             : namespace llvm {
      64             : // Sorted (by key) array of values for CPU features.
      65             : extern const llvm::SubtargetFeatureKV AMDGPUFeatureKV[] = {
      66             :   { "64BitPtr", "Specify if 64-bit addressing should be used", { AMDGPU::Feature64BitPtr }, { } },
      67             :   { "DumpCode", "Dump MachineInstrs in the CodeEmitter", { AMDGPU::FeatureDumpCode }, { } },
      68             :   { "EVERGREEN", "EVERGREEN GPU generation", { AMDGPU::FeatureEvergreen }, { AMDGPU::FeatureFetchLimit16, AMDGPU::FeatureLocalMemorySize32768 } },
      69             :   { "HasVertexCache", "Specify use of dedicated vertex cache", { AMDGPU::FeatureVertexCache }, { } },
      70             :   { "NORTHERN_ISLANDS", "NORTHERN_ISLANDS GPU generation", { AMDGPU::FeatureNorthernIslands }, { AMDGPU::FeatureFetchLimit16, AMDGPU::FeatureWavefrontSize64, AMDGPU::FeatureLocalMemorySize32768 } },
      71             :   { "R600", "R600 GPU generation", { AMDGPU::FeatureR600 }, { AMDGPU::FeatureR600ALUInst, AMDGPU::FeatureFetchLimit8, AMDGPU::FeatureLocalMemorySize0 } },
      72             :   { "R600ALUInst", "Older version of ALU instructions encoding", { AMDGPU::FeatureR600ALUInst }, { } },
      73             :   { "R700", "R700 GPU generation", { AMDGPU::FeatureR700 }, { AMDGPU::FeatureFetchLimit16, AMDGPU::FeatureLocalMemorySize0 } },
      74             :   { "SEA_ISLANDS", "SEA_ISLANDS GPU generation", { AMDGPU::FeatureSeaIslands }, { AMDGPU::Feature64BitPtr, AMDGPU::FeatureFP64, AMDGPU::FeatureLocalMemorySize65536, AMDGPU::FeatureWavefrontSize64, AMDGPU::FeatureGCN, AMDGPU::FeatureFlatAddressSpace, AMDGPU::FeatureGCN1Encoding, AMDGPU::FeatureCIInsts } },
      75             :   { "SOUTHERN_ISLANDS", "SOUTHERN_ISLANDS GPU generation", { AMDGPU::FeatureSouthernIslands }, { AMDGPU::Feature64BitPtr, AMDGPU::FeatureFP64, AMDGPU::FeatureLocalMemorySize32768, AMDGPU::FeatureWavefrontSize64, AMDGPU::FeatureGCN, AMDGPU::FeatureGCN1Encoding, AMDGPU::FeatureLDSBankCount32 } },
      76             :   { "VOLCANIC_ISLANDS", "VOLCANIC_ISLANDS GPU generation", { AMDGPU::FeatureVolcanicIslands }, { AMDGPU::Feature64BitPtr, AMDGPU::FeatureFP64, AMDGPU::FeatureLocalMemorySize65536, AMDGPU::FeatureWavefrontSize64, AMDGPU::FeatureFlatAddressSpace, AMDGPU::FeatureGCN, AMDGPU::FeatureGCN3Encoding, AMDGPU::FeatureCIInsts, AMDGPU::FeatureLDSBankCount32 } },
      77             :   { "caymanISA", "Use Cayman ISA", { AMDGPU::FeatureCaymanISA }, { } },
      78             :   { "cfalubug", "GPU has CF_ALU bug", { AMDGPU::FeatureCFALUBug }, { } },
      79             :   { "ci-insts", "Additional intstructions for CI+", { AMDGPU::FeatureCIInsts }, { } },
      80             :   { "disable-ifcvt", "Disable the if conversion pass", { AMDGPU::FeatureIfCvt }, { } },
      81             :   { "disable-irstructurizer", "Disable IR Structurizer", { AMDGPU::FeatureIRStructurizer }, { } },
      82             :   { "dumpcode", "Dump MachineInstrs in the CodeEmitter", { AMDGPU::FeatureDumpCodeLower }, { } },
      83             :   { "fast-fmaf", "Assuming f32 fma is at least as fast as mul + add", { AMDGPU::FeatureFastFMAF32 }, { } },
      84             :   { "fetch16", "Limit the maximum number of fetches in a clause to 16", { AMDGPU::FeatureFetchLimit16 }, { } },
      85             :   { "fetch8", "Limit the maximum number of fetches in a clause to 8", { AMDGPU::FeatureFetchLimit8 }, { } },
      86             :   { "flat-address-space", "Support flat address space", { AMDGPU::FeatureFlatAddressSpace }, { } },
      87             :   { "fp32-denormals", "Enable single precision denormal handling", { AMDGPU::FeatureFP32Denormals }, { } },
      88             :   { "fp64", "Enable double precision operations", { AMDGPU::FeatureFP64 }, { } },
      89             :   { "fp64-denormals", "Enable double precision denormal handling", { AMDGPU::FeatureFP64Denormals }, { AMDGPU::FeatureFP64 } },
      90             :   { "gcn", "GCN or newer GPU", { AMDGPU::FeatureGCN }, { } },
      91             :   { "gcn1-encoding", "Encoding format for SI and CI", { AMDGPU::FeatureGCN1Encoding }, { } },
      92             :   { "gcn3-encoding", "Encoding format for VI", { AMDGPU::FeatureGCN3Encoding }, { } },
      93             :   { "ldsbankcount16", "The number of LDS banks per compute unit.", { AMDGPU::FeatureLDSBankCount16 }, { } },
      94             :   { "ldsbankcount32", "The number of LDS banks per compute unit.", { AMDGPU::FeatureLDSBankCount32 }, { } },
      95             :   { "load-store-opt", "Enable SI load/store optimizer pass", { AMDGPU::FeatureEnableLoadStoreOpt }, { } },
      96             :   { "localmemorysize0", "The size of local memory in bytes", { AMDGPU::FeatureLocalMemorySize0 }, { } },
      97             :   { "localmemorysize32768", "The size of local memory in bytes", { AMDGPU::FeatureLocalMemorySize32768 }, { } },
      98             :   { "localmemorysize65536", "The size of local memory in bytes", { AMDGPU::FeatureLocalMemorySize65536 }, { } },
      99             :   { "promote-alloca", "Enable promote alloca pass", { AMDGPU::FeaturePromoteAlloca }, { } },
     100             :   { "sgpr-init-bug", "VI SGPR initilization bug requiring a fixed SGPR allocation size", { AMDGPU::FeatureSGPRInitBug }, { } },
     101             :   { "vgpr-spilling", "Enable spilling of VGPRs to scratch memory", { AMDGPU::FeatureVGPRSpilling }, { } },
     102             :   { "wavefrontsize16", "The number of threads per wavefront", { AMDGPU::FeatureWavefrontSize16 }, { } },
     103             :   { "wavefrontsize32", "The number of threads per wavefront", { AMDGPU::FeatureWavefrontSize32 }, { } },
     104             :   { "wavefrontsize64", "The number of threads per wavefront", { AMDGPU::FeatureWavefrontSize64 }, { } }
     105     1166003 : };
     106             : 
     107             : // Sorted (by key) array of values for CPU subtype.
     108             : extern const llvm::SubtargetFeatureKV AMDGPUSubTypeKV[] = {
     109             :   { "", "Select the  processor", { AMDGPU::FeatureR600, AMDGPU::FeatureVertexCache }, { } },
     110             :   { "SI", "Select the SI processor", { AMDGPU::FeatureSouthernIslands, AMDGPU::FeatureFastFMAF32 }, { } },
     111             :   { "barts", "Select the barts processor", { AMDGPU::FeatureNorthernIslands, AMDGPU::FeatureVertexCache, AMDGPU::FeatureCFALUBug }, { } },
     112             :   { "bonaire", "Select the bonaire processor", { AMDGPU::FeatureSeaIslands, AMDGPU::FeatureLDSBankCount32 }, { } },
     113             :   { "caicos", "Select the caicos processor", { AMDGPU::FeatureNorthernIslands, AMDGPU::FeatureCFALUBug }, { } },
     114             :   { "carrizo", "Select the carrizo processor", { AMDGPU::FeatureVolcanicIslands }, { } },
     115             :   { "cayman", "Select the cayman processor", { AMDGPU::FeatureNorthernIslands, AMDGPU::FeatureFP64, AMDGPU::FeatureCaymanISA }, { } },
     116             :   { "cedar", "Select the cedar processor", { AMDGPU::FeatureEvergreen, AMDGPU::FeatureVertexCache, AMDGPU::FeatureWavefrontSize32, AMDGPU::FeatureCFALUBug }, { } },
     117             :   { "cypress", "Select the cypress processor", { AMDGPU::FeatureEvergreen, AMDGPU::FeatureFP64, AMDGPU::FeatureVertexCache, AMDGPU::FeatureWavefrontSize64 }, { } },
     118             :   { "hainan", "Select the hainan processor", { AMDGPU::FeatureSouthernIslands }, { } },
     119             :   { "hawaii", "Select the hawaii processor", { AMDGPU::FeatureSeaIslands, AMDGPU::FeatureFastFMAF32, AMDGPU::FeatureLDSBankCount32 }, { } },
     120             :   { "iceland", "Select the iceland processor", { AMDGPU::FeatureVolcanicIslands, AMDGPU::FeatureSGPRInitBug }, { } },
     121             :   { "juniper", "Select the juniper processor", { AMDGPU::FeatureEvergreen, AMDGPU::FeatureVertexCache, AMDGPU::FeatureWavefrontSize64 }, { } },
     122             :   { "kabini", "Select the kabini processor", { AMDGPU::FeatureSeaIslands, AMDGPU::FeatureLDSBankCount16 }, { } },
     123             :   { "kaveri", "Select the kaveri processor", { AMDGPU::FeatureSeaIslands, AMDGPU::FeatureLDSBankCount32 }, { } },
     124             :   { "mullins", "Select the mullins processor", { AMDGPU::FeatureSeaIslands, AMDGPU::FeatureLDSBankCount16 }, { } },
     125             :   { "oland", "Select the oland processor", { AMDGPU::FeatureSouthernIslands }, { } },
     126             :   { "pitcairn", "Select the pitcairn processor", { AMDGPU::FeatureSouthernIslands }, { } },
     127             :   { "r600", "Select the r600 processor", { AMDGPU::FeatureR600, AMDGPU::FeatureVertexCache, AMDGPU::FeatureWavefrontSize64 }, { } },
     128             :   { "r630", "Select the r630 processor", { AMDGPU::FeatureR600, AMDGPU::FeatureVertexCache, AMDGPU::FeatureWavefrontSize32 }, { } },
     129             :   { "redwood", "Select the redwood processor", { AMDGPU::FeatureEvergreen, AMDGPU::FeatureVertexCache, AMDGPU::FeatureWavefrontSize64, AMDGPU::FeatureCFALUBug }, { } },
     130             :   { "rs880", "Select the rs880 processor", { AMDGPU::FeatureR600, AMDGPU::FeatureWavefrontSize16 }, { } },
     131             :   { "rv670", "Select the rv670 processor", { AMDGPU::FeatureR600, AMDGPU::FeatureFP64, AMDGPU::FeatureVertexCache, AMDGPU::FeatureWavefrontSize64 }, { } },
     132             :   { "rv710", "Select the rv710 processor", { AMDGPU::FeatureR700, AMDGPU::FeatureVertexCache, AMDGPU::FeatureWavefrontSize32 }, { } },
     133             :   { "rv730", "Select the rv730 processor", { AMDGPU::FeatureR700, AMDGPU::FeatureVertexCache, AMDGPU::FeatureWavefrontSize32 }, { } },
     134             :   { "rv770", "Select the rv770 processor", { AMDGPU::FeatureR700, AMDGPU::FeatureFP64, AMDGPU::FeatureVertexCache, AMDGPU::FeatureWavefrontSize64 }, { } },
     135             :   { "sumo", "Select the sumo processor", { AMDGPU::FeatureEvergreen, AMDGPU::FeatureWavefrontSize64, AMDGPU::FeatureCFALUBug }, { } },
     136             :   { "tahiti", "Select the tahiti processor", { AMDGPU::FeatureSouthernIslands, AMDGPU::FeatureFastFMAF32 }, { } },
     137             :   { "tonga", "Select the tonga processor", { AMDGPU::FeatureVolcanicIslands, AMDGPU::FeatureSGPRInitBug }, { } },
     138             :   { "turks", "Select the turks processor", { AMDGPU::FeatureNorthernIslands, AMDGPU::FeatureVertexCache, AMDGPU::FeatureCFALUBug }, { } },
     139             :   { "verde", "Select the verde processor", { AMDGPU::FeatureSouthernIslands }, { } }
     140     1166003 : };
     141             : 
     142             : #ifdef DBGFIELD
     143             : #error "<target>GenSubtargetInfo.inc requires a DBGFIELD macro"
     144             : #endif
     145             : #ifndef NDEBUG
     146             : #define DBGFIELD(x) x,
     147             : #else
     148             : #define DBGFIELD(x)
     149             : #endif
     150             : 
     151             : // Functional units for "R600_VLIW5_Itin"
     152             : namespace R600_VLIW5_ItinFU {
     153             :   const unsigned ALU_X = 1 << 0;
     154             :   const unsigned ALU_Y = 1 << 1;
     155             :   const unsigned ALU_Z = 1 << 2;
     156             :   const unsigned ALU_W = 1 << 3;
     157             :   const unsigned TRANS = 1 << 4;
     158             :   const unsigned ALU_NULL = 1 << 5;
     159             : }
     160             : 
     161             : // Functional units for "R600_VLIW4_Itin"
     162             : namespace R600_VLIW4_ItinFU {
     163             :   const unsigned ALU_X = 1 << 0;
     164             :   const unsigned ALU_Y = 1 << 1;
     165             :   const unsigned ALU_Z = 1 << 2;
     166             :   const unsigned ALU_W = 1 << 3;
     167             :   const unsigned ALU_NULL = 1 << 4;
     168             : }
     169             : 
     170             : extern const llvm::InstrStage AMDGPUStages[] = {
     171             :   { 0, 0, 0, llvm::InstrStage::Required }, // No itinerary
     172             :   { 1, R600_VLIW5_ItinFU::ALU_X | R600_VLIW5_ItinFU::ALU_Y | R600_VLIW5_ItinFU::ALU_Z | R600_VLIW5_ItinFU::ALU_W | R600_VLIW5_ItinFU::TRANS, -1, (llvm::InstrStage::ReservationKinds)0 }, // 1
     173             :   { 1, R600_VLIW5_ItinFU::ALU_NULL, -1, (llvm::InstrStage::ReservationKinds)0 }, // 2
     174             :   { 1, R600_VLIW5_ItinFU::ALU_X | R600_VLIW5_ItinFU::ALU_Y | R600_VLIW5_ItinFU::ALU_Z | R600_VLIW5_ItinFU::ALU_W, -1, (llvm::InstrStage::ReservationKinds)0 }, // 3
     175             :   { 1, R600_VLIW5_ItinFU::TRANS, -1, (llvm::InstrStage::ReservationKinds)0 }, // 4
     176             :   { 1, R600_VLIW5_ItinFU::ALU_X, -1, (llvm::InstrStage::ReservationKinds)0 }, // 5
     177             :   { 1, R600_VLIW4_ItinFU::ALU_X | R600_VLIW4_ItinFU::ALU_Y | R600_VLIW4_ItinFU::ALU_Z | R600_VLIW4_ItinFU::ALU_W, -1, (llvm::InstrStage::ReservationKinds)0 }, // 6
     178             :   { 1, R600_VLIW4_ItinFU::ALU_NULL, -1, (llvm::InstrStage::ReservationKinds)0 }, // 7
     179             :   { 0, 0, 0, llvm::InstrStage::Required } // End stages
     180             : };
     181             : extern const unsigned AMDGPUOperandCycles[] = {
     182             :   0, // No itinerary
     183             :   0 // End operand cycles
     184             : };
     185             : extern const unsigned AMDGPUForwardingPaths[] = {
     186             :  0, // No itinerary
     187             :  0 // End bypass tables
     188             : };
     189             : 
     190             : static const llvm::InstrItinerary R600_VLIW5_Itin[] = {
     191             :   { 0, 0, 0, 0, 0 }, // 0 NoInstrModel
     192             :   { 1, 1, 2, 0, 0 }, // 1 AnyALU
     193             :   { 1, 2, 3, 0, 0 }, // 2 NullALU
     194             :   { 1, 3, 4, 0, 0 }, // 3 VecALU
     195             :   { 1, 2, 3, 0, 0 }, // 4 NullALU_WriteVMEM
     196             :   { 1, 4, 5, 0, 0 }, // 5 TransALU
     197             :   { 1, 2, 3, 0, 0 }, // 6 NullALU_WriteLDS
     198             :   { 1, 2, 3, 0, 0 }, // 7 NullALU_Write32Bit
     199             :   { 1, 5, 6, 0, 0 }, // 8 XALU
     200             :   { 1, 2, 3, 0, 0 }, // 9 NullALU_WriteSALU
     201             :   { 1, 2, 3, 0, 0 }, // 10 NullALU_WriteSMEM
     202             :   { 1, 2, 3, 0, 0 }, // 11 NullALU_WriteDouble
     203             :   { 1, 2, 3, 0, 0 }, // 12 NullALU_WriteQuarterRate32
     204             :   { 1, 2, 3, 0, 0 }, // 13 NullALU_WriteFloatFMA_WriteSALU
     205             :   { 1, 2, 3, 0, 0 }, // 14 NullALU_WriteDouble_WriteSALU
     206             :   { 0, ~0U, ~0U, ~0U, ~0U } // end marker
     207             : };
     208             : 
     209             : static const llvm::InstrItinerary R600_VLIW4_Itin[] = {
     210             :   { 0, 0, 0, 0, 0 }, // 0 NoInstrModel
     211             :   { 1, 6, 7, 0, 0 }, // 1 AnyALU
     212             :   { 1, 7, 8, 0, 0 }, // 2 NullALU
     213             :   { 1, 6, 7, 0, 0 }, // 3 VecALU
     214             :   { 1, 7, 8, 0, 0 }, // 4 NullALU_WriteVMEM
     215             :   { 1, 7, 8, 0, 0 }, // 5 TransALU
     216             :   { 1, 7, 8, 0, 0 }, // 6 NullALU_WriteLDS
     217             :   { 1, 7, 8, 0, 0 }, // 7 NullALU_Write32Bit
     218             :   { 0, 0, 0, 0, 0 }, // 8 XALU
     219             :   { 1, 7, 8, 0, 0 }, // 9 NullALU_WriteSALU
     220             :   { 1, 7, 8, 0, 0 }, // 10 NullALU_WriteSMEM
     221             :   { 1, 7, 8, 0, 0 }, // 11 NullALU_WriteDouble
     222             :   { 1, 7, 8, 0, 0 }, // 12 NullALU_WriteQuarterRate32
     223             :   { 1, 7, 8, 0, 0 }, // 13 NullALU_WriteFloatFMA_WriteSALU
     224             :   { 1, 7, 8, 0, 0 }, // 14 NullALU_WriteDouble_WriteSALU
     225             :   { 0, ~0U, ~0U, ~0U, ~0U } // end marker
     226             : };
     227             : 
     228             : // ===============================================================
     229             : // Data tables for the new per-operand machine model.
     230             : 
     231             : // {ProcResourceIdx, Cycles}
     232             : extern const llvm::MCWriteProcResEntry AMDGPUWriteProcResTable[] = {
     233             :   { 0,  0}, // Invalid
     234             :   { 6,  1}, // #1
     235             :   { 3,  1}, // #2
     236             :   { 5,  1}, // #3
     237             :   { 4,  1}, // #4
     238             :   { 4,  1}, // #5
     239             :   { 5,  1} // #6
     240             : }; // AMDGPUWriteProcResTable
     241             : 
     242             : // {Cycles, WriteResourceID}
     243             : extern const llvm::MCWriteLatencyEntry AMDGPUWriteLatencyTable[] = {
     244             :   { 0,  0}, // Invalid
     245             :   {450,  0}, // #1 WriteVMEM
     246             :   {32,  0}, // #2 WriteLDS
     247             :   { 1,  0}, // #3 Write32Bit_WriteSALU
     248             :   {10,  0}, // #4 WriteSMEM
     249             :   { 4,  0}, // #5 WriteDouble_WriteQuarterRate32
     250             :   { 1,  0}, // #6 WriteFloatFMA_WriteSALU
     251             :   { 1,  0}, // #7 WriteSALU
     252             :   {16,  0}, // #8 WriteDouble
     253             :   {16,  0}, // #9 WriteFloatFMA_WriteDouble
     254             :   { 1,  0} // #10 WriteSALU
     255             : }; // AMDGPUWriteLatencyTable
     256             : 
     257             : // {UseIdx, WriteResourceID, Cycles}
     258             : extern const llvm::MCReadAdvanceEntry AMDGPUReadAdvanceTable[] = {
     259             :   {0,  0,  0}, // Invalid
     260             : }; // AMDGPUReadAdvanceTable
     261             : 
     262             : // {Name, NumMicroOps, BeginGroup, EndGroup, WriteProcResIdx,#, WriteLatencyIdx,#, ReadAdvanceIdx,#}
     263             : static const llvm::MCSchedClassDesc SIFullSpeedModelSchedClasses[] = {
     264             :   {DBGFIELD("InvalidSchedClass")  65535, 0, 0,  0, 0,  0, 0,  0, 0},
     265             :   {DBGFIELD("AnyALU")             0, 0, 0,  0, 0,  0, 0,  0, 0}, // #1
     266             :   {DBGFIELD("NullALU")            0, 0, 0,  0, 0,  0, 0,  0, 0}, // #2
     267             :   {DBGFIELD("VecALU")             0, 0, 0,  0, 0,  0, 0,  0, 0}, // #3
     268             :   {DBGFIELD("NullALU_WriteVMEM")  1, 0, 0,  1, 1,  1, 1,  0, 0}, // #4
     269             :   {DBGFIELD("TransALU")           0, 0, 0,  0, 0,  0, 0,  0, 0}, // #5
     270             :   {DBGFIELD("NullALU_WriteLDS")   1, 0, 0,  2, 1,  2, 1,  0, 0}, // #6
     271             :   {DBGFIELD("NullALU_Write32Bit") 1, 0, 0,  3, 1,  3, 1,  0, 0}, // #7
     272             :   {DBGFIELD("XALU")               0, 0, 0,  0, 0,  0, 0,  0, 0}, // #8
     273             :   {DBGFIELD("NullALU_WriteSALU")  1, 0, 0,  4, 1,  3, 1,  0, 0}, // #9
     274             :   {DBGFIELD("NullALU_WriteSMEM")  1, 0, 0,  2, 1,  4, 1,  0, 0}, // #10
     275             :   {DBGFIELD("NullALU_WriteDouble") 1, 0, 0,  3, 1,  5, 1,  0, 0}, // #11
     276             :   {DBGFIELD("NullALU_WriteQuarterRate32") 1, 0, 0,  3, 1,  5, 1,  0, 0}, // #12
     277             :   {DBGFIELD("NullALU_WriteFloatFMA_WriteSALU") 2, 0, 0,  5, 2,  6, 2,  0, 0}, // #13
     278             :   {DBGFIELD("NullALU_WriteDouble_WriteSALU") 2, 0, 0,  5, 2,  5, 2,  0, 0} // #14
     279             : }; // SIFullSpeedModelSchedClasses
     280             : 
     281             : // {Name, NumMicroOps, BeginGroup, EndGroup, WriteProcResIdx,#, WriteLatencyIdx,#, ReadAdvanceIdx,#}
     282             : static const llvm::MCSchedClassDesc SIQuarterSpeedModelSchedClasses[] = {
     283             :   {DBGFIELD("InvalidSchedClass")  65535, 0, 0,  0, 0,  0, 0,  0, 0},
     284             :   {DBGFIELD("AnyALU")             0, 0, 0,  0, 0,  0, 0,  0, 0}, // #1
     285             :   {DBGFIELD("NullALU")            0, 0, 0,  0, 0,  0, 0,  0, 0}, // #2
     286             :   {DBGFIELD("VecALU")             0, 0, 0,  0, 0,  0, 0,  0, 0}, // #3
     287             :   {DBGFIELD("NullALU_WriteVMEM")  1, 0, 0,  1, 1,  1, 1,  0, 0}, // #4
     288             :   {DBGFIELD("TransALU")           0, 0, 0,  0, 0,  0, 0,  0, 0}, // #5
     289             :   {DBGFIELD("NullALU_WriteLDS")   1, 0, 0,  2, 1,  2, 1,  0, 0}, // #6
     290             :   {DBGFIELD("NullALU_Write32Bit") 1, 0, 0,  3, 1,  3, 1,  0, 0}, // #7
     291             :   {DBGFIELD("XALU")               0, 0, 0,  0, 0,  0, 0,  0, 0}, // #8
     292             :   {DBGFIELD("NullALU_WriteSALU")  1, 0, 0,  4, 1,  3, 1,  0, 0}, // #9
     293             :   {DBGFIELD("NullALU_WriteSMEM")  1, 0, 0,  2, 1,  4, 1,  0, 0}, // #10
     294             :   {DBGFIELD("NullALU_WriteDouble") 1, 0, 0,  3, 1,  8, 1,  0, 0}, // #11
     295             :   {DBGFIELD("NullALU_WriteQuarterRate32") 1, 0, 0,  3, 1,  5, 1,  0, 0}, // #12
     296             :   {DBGFIELD("NullALU_WriteFloatFMA_WriteSALU") 2, 0, 0,  5, 2,  9, 2,  0, 0}, // #13
     297             :   {DBGFIELD("NullALU_WriteDouble_WriteSALU") 2, 0, 0,  5, 2,  9, 2,  0, 0} // #14
     298             : }; // SIQuarterSpeedModelSchedClasses
     299             : 
     300             : static const llvm::MCSchedModel NoSchedModel = {
     301             :   MCSchedModel::DefaultIssueWidth,
     302             :   MCSchedModel::DefaultMicroOpBufferSize,
     303             :   MCSchedModel::DefaultLoopMicroOpBufferSize,
     304             :   MCSchedModel::DefaultLoadLatency,
     305             :   MCSchedModel::DefaultHighLatency,
     306             :   MCSchedModel::DefaultMispredictPenalty,
     307             :   0, // PostRAScheduler
     308             :   1, // CompleteModel
     309             :   0, // Processor ID
     310             :   0, 0, 0, 0, // No instruction-level machine model.
     311             :   nullptr}; // No Itinerary
     312             : 
     313             : static const llvm::MCSchedModel R600_VLIW5_ItinModel = {
     314             :   MCSchedModel::DefaultIssueWidth,
     315             :   MCSchedModel::DefaultMicroOpBufferSize,
     316             :   MCSchedModel::DefaultLoopMicroOpBufferSize,
     317             :   MCSchedModel::DefaultLoadLatency,
     318             :   MCSchedModel::DefaultHighLatency,
     319             :   MCSchedModel::DefaultMispredictPenalty,
     320             :   0, // PostRAScheduler
     321             :   1, // CompleteModel
     322             :   1, // Processor ID
     323             :   0, 0, 0, 0, // No instruction-level machine model.
     324             :   R600_VLIW5_Itin};
     325             : 
     326             : // {Name, NumUnits, SuperIdx, IsBuffered}
     327             : static const llvm::MCProcResourceDesc SIFullSpeedModelProcResources[] = {
     328             :   {DBGFIELD("InvalidUnit")     0, 0, 0},
     329             :   {DBGFIELD("HWBranch")        1, 0, 0}, // #1
     330             :   {DBGFIELD("HWExport")        7, 0, 0}, // #2
     331             :   {DBGFIELD("HWLGKM")          31, 0, 0}, // #3
     332             :   {DBGFIELD("HWSALU")          1, 0, 0}, // #4
     333             :   {DBGFIELD("HWVALU")          1, 0, 0}, // #5
     334             :   {DBGFIELD("HWVMEM")          15, 0, 0}  // #6
     335             : };
     336             : 
     337             : static const llvm::MCSchedModel SIFullSpeedModel = {
     338             :   MCSchedModel::DefaultIssueWidth,
     339             :   MCSchedModel::DefaultMicroOpBufferSize,
     340             :   MCSchedModel::DefaultLoopMicroOpBufferSize,
     341             :   MCSchedModel::DefaultLoadLatency,
     342             :   MCSchedModel::DefaultHighLatency,
     343             :   MCSchedModel::DefaultMispredictPenalty,
     344             :   0, // PostRAScheduler
     345             :   1, // CompleteModel
     346             :   2, // Processor ID
     347             :   SIFullSpeedModelProcResources,
     348             :   SIFullSpeedModelSchedClasses,
     349             :   7,
     350             :   15,
     351             :   nullptr}; // No Itinerary
     352             : 
     353             : // {Name, NumUnits, SuperIdx, IsBuffered}
     354             : static const llvm::MCProcResourceDesc SIQuarterSpeedModelProcResources[] = {
     355             :   {DBGFIELD("InvalidUnit")     0, 0, 0},
     356             :   {DBGFIELD("HWBranch")        1, 0, 0}, // #1
     357             :   {DBGFIELD("HWExport")        7, 0, 0}, // #2
     358             :   {DBGFIELD("HWLGKM")          31, 0, 0}, // #3
     359             :   {DBGFIELD("HWSALU")          1, 0, 0}, // #4
     360             :   {DBGFIELD("HWVALU")          1, 0, 0}, // #5
     361             :   {DBGFIELD("HWVMEM")          15, 0, 0}  // #6
     362             : };
     363             : 
     364             : static const llvm::MCSchedModel SIQuarterSpeedModel = {
     365             :   MCSchedModel::DefaultIssueWidth,
     366             :   MCSchedModel::DefaultMicroOpBufferSize,
     367             :   MCSchedModel::DefaultLoopMicroOpBufferSize,
     368             :   MCSchedModel::DefaultLoadLatency,
     369             :   MCSchedModel::DefaultHighLatency,
     370             :   MCSchedModel::DefaultMispredictPenalty,
     371             :   0, // PostRAScheduler
     372             :   1, // CompleteModel
     373             :   3, // Processor ID
     374             :   SIQuarterSpeedModelProcResources,
     375             :   SIQuarterSpeedModelSchedClasses,
     376             :   7,
     377             :   15,
     378             :   nullptr}; // No Itinerary
     379             : 
     380             : static const llvm::MCSchedModel R600_VLIW4_ItinModel = {
     381             :   MCSchedModel::DefaultIssueWidth,
     382             :   MCSchedModel::DefaultMicroOpBufferSize,
     383             :   MCSchedModel::DefaultLoopMicroOpBufferSize,
     384             :   MCSchedModel::DefaultLoadLatency,
     385             :   MCSchedModel::DefaultHighLatency,
     386             :   MCSchedModel::DefaultMispredictPenalty,
     387             :   0, // PostRAScheduler
     388             :   1, // CompleteModel
     389             :   4, // Processor ID
     390             :   0, 0, 0, 0, // No instruction-level machine model.
     391             :   R600_VLIW4_Itin};
     392             : 
     393             : // Sorted (by key) array of itineraries for CPU subtype.
     394             : extern const llvm::SubtargetInfoKV AMDGPUProcSchedKV[] = {
     395             :   { "", (const void *)&R600_VLIW5_ItinModel },
     396             :   { "SI", (const void *)&SIFullSpeedModel },
     397             :   { "barts", (const void *)&R600_VLIW5_ItinModel },
     398             :   { "bonaire", (const void *)&SIQuarterSpeedModel },
     399             :   { "caicos", (const void *)&R600_VLIW5_ItinModel },
     400             :   { "carrizo", (const void *)&SIQuarterSpeedModel },
     401             :   { "cayman", (const void *)&R600_VLIW4_ItinModel },
     402             :   { "cedar", (const void *)&R600_VLIW5_ItinModel },
     403             :   { "cypress", (const void *)&R600_VLIW5_ItinModel },
     404             :   { "hainan", (const void *)&SIQuarterSpeedModel },
     405             :   { "hawaii", (const void *)&SIFullSpeedModel },
     406             :   { "iceland", (const void *)&SIQuarterSpeedModel },
     407             :   { "juniper", (const void *)&R600_VLIW5_ItinModel },
     408             :   { "kabini", (const void *)&SIQuarterSpeedModel },
     409             :   { "kaveri", (const void *)&SIQuarterSpeedModel },
     410             :   { "mullins", (const void *)&SIQuarterSpeedModel },
     411             :   { "oland", (const void *)&SIQuarterSpeedModel },
     412             :   { "pitcairn", (const void *)&SIQuarterSpeedModel },
     413             :   { "r600", (const void *)&R600_VLIW5_ItinModel },
     414             :   { "r630", (const void *)&R600_VLIW5_ItinModel },
     415             :   { "redwood", (const void *)&R600_VLIW5_ItinModel },
     416             :   { "rs880", (const void *)&R600_VLIW5_ItinModel },
     417             :   { "rv670", (const void *)&R600_VLIW5_ItinModel },
     418             :   { "rv710", (const void *)&R600_VLIW5_ItinModel },
     419             :   { "rv730", (const void *)&R600_VLIW5_ItinModel },
     420             :   { "rv770", (const void *)&R600_VLIW5_ItinModel },
     421             :   { "sumo", (const void *)&R600_VLIW5_ItinModel },
     422             :   { "tahiti", (const void *)&SIFullSpeedModel },
     423             :   { "tonga", (const void *)&SIQuarterSpeedModel },
     424             :   { "turks", (const void *)&R600_VLIW5_ItinModel },
     425             :   { "verde", (const void *)&SIQuarterSpeedModel }
     426             : };
     427             : #undef DBGFIELD
     428         884 : static inline void InitAMDGPUMCSubtargetInfo(MCSubtargetInfo *II, const Triple &TT, StringRef CPU, StringRef FS) {
     429             :   II->InitMCSubtargetInfo(TT, CPU, FS, AMDGPUFeatureKV, AMDGPUSubTypeKV, 
     430             :                       AMDGPUProcSchedKV, AMDGPUWriteProcResTable, AMDGPUWriteLatencyTable, AMDGPUReadAdvanceTable, 
     431         884 :                       AMDGPUStages, AMDGPUOperandCycles, AMDGPUForwardingPaths);
     432         884 : }
     433             : 
     434             : } // End llvm namespace 
     435             : #endif // GET_SUBTARGETINFO_MC_DESC
     436             : 
     437             : 
     438             : #ifdef GET_SUBTARGETINFO_TARGET_DESC
     439             : #undef GET_SUBTARGETINFO_TARGET_DESC
     440             : #include "llvm/Support/Debug.h"
     441             : #include "llvm/Support/raw_ostream.h"
     442             : // ParseSubtargetFeatures - Parses features string setting specified
     443             : // subtarget options.
     444         840 : void llvm::AMDGPUSubtarget::ParseSubtargetFeatures(StringRef CPU, StringRef FS) {
     445             :   DEBUG(dbgs() << "\nFeatures:" << FS);
     446             :   DEBUG(dbgs() << "\nCPU:" << CPU << "\n\n");
     447         840 :   InitMCProcessorInfo(CPU, FS);
     448         840 :   const FeatureBitset& Bits = getFeatureBits();
     449        1680 :   if (Bits[AMDGPU::Feature64BitPtr]) Is64bit = true;
     450        1680 :   if (Bits[AMDGPU::FeatureCFALUBug]) CFALUBug = true;
     451        1680 :   if (Bits[AMDGPU::FeatureCIInsts]) CIInsts = true;
     452        1680 :   if (Bits[AMDGPU::FeatureCaymanISA]) CaymanISA = true;
     453        1680 :   if (Bits[AMDGPU::FeatureDisable]) FeatureDisable = true;
     454        1680 :   if (Bits[AMDGPU::FeatureDumpCode]) DumpCode = true;
     455        1680 :   if (Bits[AMDGPU::FeatureDumpCodeLower]) DumpCode = true;
     456        1680 :   if (Bits[AMDGPU::FeatureEnableLoadStoreOpt]) EnableLoadStoreOpt = true;
     457        1680 :   if (Bits[AMDGPU::FeatureEvergreen] && Gen < AMDGPUSubtarget::EVERGREEN) Gen = AMDGPUSubtarget::EVERGREEN;
     458        1680 :   if (Bits[AMDGPU::FeatureFP32Denormals]) FP32Denormals = true;
     459        1680 :   if (Bits[AMDGPU::FeatureFP64]) FP64 = true;
     460        1680 :   if (Bits[AMDGPU::FeatureFP64Denormals]) FP64Denormals = true;
     461        1680 :   if (Bits[AMDGPU::FeatureFastFMAF32]) FastFMAF32 = true;
     462        1680 :   if (Bits[AMDGPU::FeatureFetchLimit8] && TexVTXClauseSize < 8) TexVTXClauseSize = 8;
     463        1680 :   if (Bits[AMDGPU::FeatureFetchLimit16] && TexVTXClauseSize < 16) TexVTXClauseSize = 16;
     464        1680 :   if (Bits[AMDGPU::FeatureFlatAddressSpace]) FlatAddressSpace = true;
     465        1680 :   if (Bits[AMDGPU::FeatureGCN]) IsGCN = true;
     466        1680 :   if (Bits[AMDGPU::FeatureGCN1Encoding]) GCN1Encoding = true;
     467        1680 :   if (Bits[AMDGPU::FeatureGCN3Encoding]) GCN3Encoding = true;
     468        1680 :   if (Bits[AMDGPU::FeatureIRStructurizer]) EnableIRStructurizer = false;
     469        1680 :   if (Bits[AMDGPU::FeatureIfCvt]) EnableIfCvt = false;
     470        1680 :   if (Bits[AMDGPU::FeatureLDSBankCount16] && LDSBankCount < 16) LDSBankCount = 16;
     471        1680 :   if (Bits[AMDGPU::FeatureLDSBankCount32] && LDSBankCount < 32) LDSBankCount = 32;
     472        1680 :   if (Bits[AMDGPU::FeatureLocalMemorySize0] && LocalMemorySize < 0) LocalMemorySize = 0;
     473        1680 :   if (Bits[AMDGPU::FeatureLocalMemorySize32768] && LocalMemorySize < 32768) LocalMemorySize = 32768;
     474        1680 :   if (Bits[AMDGPU::FeatureLocalMemorySize65536] && LocalMemorySize < 65536) LocalMemorySize = 65536;
     475        1680 :   if (Bits[AMDGPU::FeatureNorthernIslands] && Gen < AMDGPUSubtarget::NORTHERN_ISLANDS) Gen = AMDGPUSubtarget::NORTHERN_ISLANDS;
     476        1680 :   if (Bits[AMDGPU::FeaturePromoteAlloca]) EnablePromoteAlloca = true;
     477        1680 :   if (Bits[AMDGPU::FeatureR600] && Gen < AMDGPUSubtarget::R600) Gen = AMDGPUSubtarget::R600;
     478        1680 :   if (Bits[AMDGPU::FeatureR600ALUInst]) R600ALUInst = false;
     479        1680 :   if (Bits[AMDGPU::FeatureR700] && Gen < AMDGPUSubtarget::R700) Gen = AMDGPUSubtarget::R700;
     480        1680 :   if (Bits[AMDGPU::FeatureSGPRInitBug]) SGPRInitBug = true;
     481        1680 :   if (Bits[AMDGPU::FeatureSeaIslands] && Gen < AMDGPUSubtarget::SEA_ISLANDS) Gen = AMDGPUSubtarget::SEA_ISLANDS;
     482        1680 :   if (Bits[AMDGPU::FeatureSouthernIslands] && Gen < AMDGPUSubtarget::SOUTHERN_ISLANDS) Gen = AMDGPUSubtarget::SOUTHERN_ISLANDS;
     483        1680 :   if (Bits[AMDGPU::FeatureVGPRSpilling]) EnableVGPRSpilling = true;
     484        1680 :   if (Bits[AMDGPU::FeatureVertexCache]) HasVertexCache = true;
     485        1680 :   if (Bits[AMDGPU::FeatureVolcanicIslands] && Gen < AMDGPUSubtarget::VOLCANIC_ISLANDS) Gen = AMDGPUSubtarget::VOLCANIC_ISLANDS;
     486        1680 :   if (Bits[AMDGPU::FeatureWavefrontSize16] && WavefrontSize < 16) WavefrontSize = 16;
     487        1680 :   if (Bits[AMDGPU::FeatureWavefrontSize32] && WavefrontSize < 32) WavefrontSize = 32;
     488        1680 :   if (Bits[AMDGPU::FeatureWavefrontSize64] && WavefrontSize < 64) WavefrontSize = 64;
     489         840 : }
     490             : #endif // GET_SUBTARGETINFO_TARGET_DESC
     491             : 
     492             : 
     493             : #ifdef GET_SUBTARGETINFO_HEADER
     494             : #undef GET_SUBTARGETINFO_HEADER
     495             : namespace llvm {
     496             : class DFAPacketizer;
     497         828 : struct AMDGPUGenSubtargetInfo : public TargetSubtargetInfo {
     498             :   explicit AMDGPUGenSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS);
     499             : public:
     500             :   unsigned resolveSchedClass(unsigned SchedClass,  const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
     501             :   DFAPacketizer *createDFAPacketizer(const InstrItineraryData *IID) const;
     502             : };
     503             : } // End llvm namespace 
     504             : #endif // GET_SUBTARGETINFO_HEADER
     505             : 
     506             : 
     507             : #ifdef GET_SUBTARGETINFO_CTOR
     508             : #undef GET_SUBTARGETINFO_CTOR
     509             : #include "llvm/CodeGen/TargetSchedule.h"
     510             : namespace llvm {
     511             : extern const llvm::SubtargetFeatureKV AMDGPUFeatureKV[];
     512             : extern const llvm::SubtargetFeatureKV AMDGPUSubTypeKV[];
     513             : extern const llvm::SubtargetInfoKV AMDGPUProcSchedKV[];
     514             : extern const llvm::MCWriteProcResEntry AMDGPUWriteProcResTable[];
     515             : extern const llvm::MCWriteLatencyEntry AMDGPUWriteLatencyTable[];
     516             : extern const llvm::MCReadAdvanceEntry AMDGPUReadAdvanceTable[];
     517             : extern const llvm::InstrStage AMDGPUStages[];
     518             : extern const unsigned AMDGPUOperandCycles[];
     519             : extern const unsigned AMDGPUForwardingPaths[];
     520         840 : AMDGPUGenSubtargetInfo::AMDGPUGenSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS)
     521         840 :   : TargetSubtargetInfo() {
     522             :   InitMCSubtargetInfo(TT, CPU, FS, makeArrayRef(AMDGPUFeatureKV, 39), makeArrayRef(AMDGPUSubTypeKV, 31), 
     523             :                       AMDGPUProcSchedKV, AMDGPUWriteProcResTable, AMDGPUWriteLatencyTable, AMDGPUReadAdvanceTable, 
     524         840 :                       AMDGPUStages, AMDGPUOperandCycles, AMDGPUForwardingPaths);
     525         840 : }
     526             : 
     527           0 : unsigned AMDGPUGenSubtargetInfo
     528             : ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
     529           0 :   report_fatal_error("Expected a variant SchedClass");
     530             : } // AMDGPUGenSubtargetInfo::resolveSchedClass
     531             : } // End llvm namespace 
     532             : #endif // GET_SUBTARGETINFO_CTOR
     533             : 

Generated by: LCOV version 1.11