LCOV - code coverage report
Current view: top level - lib/Target/AMDGPU/Utils - AMDKernelCodeTInfo.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 19 19 100.0 %
Date: 2018-07-13 00:08:38 Functions: 75 75 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===--------------------- AMDKernelCodeTInfo.h ---------------------------===//
       2             : //
       3             : //                     The LLVM Compiler Infrastructure
       4             : //
       5             : // This file is distributed under the University of Illinois Open Source
       6             : // License. See LICENSE.TXT for details.
       7             : //
       8             : //===----------------------------------------------------------------------===//
       9             : //
      10             : //===----------------------------------------------------------------------===//
      11             : //
      12             : /// \file - specifies tables for amd_kernel_code_t structure parsing/printing
      13             : //
      14             : //===----------------------------------------------------------------------===//
      15             : 
      16             : #define QNAME(name) amd_kernel_code_t::name
      17             : #define FLD_T(name) decltype(QNAME(name)), &QNAME(name)
      18             : 
      19             : #define FIELD2(sname, aname, name) \
      20             :   RECORD(sname, aname, printField<FLD_T(name)>, parseField<FLD_T(name)>)
      21             : 
      22             : #define FIELD(name) FIELD2(name, name, name)
      23             : 
      24             : 
      25             : #define PRINTCODEPROP(name) \
      26             :   printBitField<FLD_T(code_properties),\
      27             :                 AMD_CODE_PROPERTY_##name##_SHIFT,\
      28             :                 AMD_CODE_PROPERTY_##name##_WIDTH>
      29             : 
      30             : #define PARSECODEPROP(name) \
      31             :   parseBitField<FLD_T(code_properties),\
      32             :                 AMD_CODE_PROPERTY_##name##_SHIFT,\
      33             :                 AMD_CODE_PROPERTY_##name##_WIDTH>
      34             : 
      35             : #define CODEPROP(name, shift) \
      36             :   RECORD(name, name, PRINTCODEPROP(shift), PARSECODEPROP(shift))
      37             : 
      38             : // have to define these lambdas because of Set/GetMacro
      39             : #define PRINTCOMP(GetMacro, Shift) \
      40             : [](StringRef Name, const amd_kernel_code_t &C, raw_ostream &OS) { \
      41             :    printName(OS, Name) << \
      42             :      (int)GetMacro(C.compute_pgm_resource_registers >> Shift); \
      43             : }
      44             : #define PARSECOMP(SetMacro, Shift) \
      45             : [](amd_kernel_code_t &C, MCAsmParser &MCParser, raw_ostream &Err) { \
      46             :    int64_t Value = 0; \
      47             :    if (!expectAbsExpression(MCParser, Value, Err)) \
      48             :      return false; \
      49             :    C.compute_pgm_resource_registers |= SetMacro(Value) << Shift; \
      50             :    return true; \
      51             : }
      52             : 
      53             : #define COMPPGM(name, aname, GetMacro, SetMacro, Shift) \
      54             :   RECORD(name, aname, PRINTCOMP(GetMacro, Shift), PARSECOMP(SetMacro, Shift))
      55             : 
      56             : #define COMPPGM1(name, aname, AccMacro) \
      57             :   COMPPGM(name, aname, G_00B848_##AccMacro, S_00B848_##AccMacro, 0)
      58             : 
      59             : #define COMPPGM2(name, aname, AccMacro) \
      60             :   COMPPGM(name, aname, G_00B84C_##AccMacro, S_00B84C_##AccMacro, 32)
      61             : 
      62             : ///////////////////////////////////////////////////////////////////////////////
      63             : // Begin of the table
      64             : // Define RECORD(name, print, parse) in your code to get field definitions
      65             : // and include this file
      66             : 
      67             : FIELD2(amd_code_version_major,        kernel_code_version_major,  amd_kernel_code_version_major),
      68             : FIELD2(amd_code_version_minor,        kernel_code_version_minor,  amd_kernel_code_version_minor),
      69             : FIELD2(amd_machine_kind,              machine_kind,               amd_machine_kind),
      70             : FIELD2(amd_machine_version_major,     machine_version_major,      amd_machine_version_major),
      71             : FIELD2(amd_machine_version_minor,     machine_version_minor,      amd_machine_version_minor),
      72             : FIELD2(amd_machine_version_stepping,  machine_version_stepping,   amd_machine_version_stepping),
      73             : 
      74             : FIELD(kernel_code_entry_byte_offset),
      75             : FIELD(kernel_code_prefetch_byte_size),
      76             : 
      77        8540 : COMPPGM1(granulated_workitem_vgpr_count,  compute_pgm_rsrc1_vgprs,          VGPRS),
      78        8548 : COMPPGM1(granulated_wavefront_sgpr_count, compute_pgm_rsrc1_sgprs,          SGPRS),
      79        8540 : COMPPGM1(priority,                        compute_pgm_rsrc1_priority,       PRIORITY),
      80        8540 : COMPPGM1(float_mode,                      compute_pgm_rsrc1_float_mode,     FLOAT_MODE), // TODO: split float_mode
      81        8540 : COMPPGM1(priv,                            compute_pgm_rsrc1_priv,           PRIV),
      82        8540 : COMPPGM1(enable_dx10_clamp,               compute_pgm_rsrc1_dx10_clamp,     DX10_CLAMP),
      83        8540 : COMPPGM1(debug_mode,                      compute_pgm_rsrc1_debug_mode,     DEBUG_MODE),
      84        8540 : COMPPGM1(enable_ieee_mode,                compute_pgm_rsrc1_ieee_mode,      IEEE_MODE),
      85             : // TODO: bulky
      86             : // TODO: cdbg_user
      87        8540 : COMPPGM2(enable_sgpr_private_segment_wave_byte_offset, compute_pgm_rsrc2_scratch_en, SCRATCH_EN),
      88        8548 : COMPPGM2(user_sgpr_count,                 compute_pgm_rsrc2_user_sgpr,      USER_SGPR),
      89        8536 : COMPPGM2(enable_trap_handler,             compute_pgm_rsrc2_trap_handler,   TRAP_HANDLER),
      90        8540 : COMPPGM2(enable_sgpr_workgroup_id_x,      compute_pgm_rsrc2_tgid_x_en,      TGID_X_EN),
      91        8540 : COMPPGM2(enable_sgpr_workgroup_id_y,      compute_pgm_rsrc2_tgid_y_en,      TGID_Y_EN),
      92        8540 : COMPPGM2(enable_sgpr_workgroup_id_z,      compute_pgm_rsrc2_tgid_z_en,      TGID_Z_EN),
      93        8540 : COMPPGM2(enable_sgpr_workgroup_info,      compute_pgm_rsrc2_tg_size_en,     TG_SIZE_EN),
      94        8540 : COMPPGM2(enable_vgpr_workitem_id,         compute_pgm_rsrc2_tidig_comp_cnt, TIDIG_COMP_CNT),
      95        8540 : COMPPGM2(enable_exception_msb,            compute_pgm_rsrc2_excp_en_msb,    EXCP_EN_MSB), // TODO: split enable_exception_msb
      96        8540 : COMPPGM2(granulated_lds_size,             compute_pgm_rsrc2_lds_size,       LDS_SIZE),
      97        8540 : COMPPGM2(enable_exception,                compute_pgm_rsrc2_excp_en,        EXCP_EN), // TODO: split enable_exception
      98             : 
      99             : CODEPROP(enable_sgpr_private_segment_buffer,  ENABLE_SGPR_PRIVATE_SEGMENT_BUFFER),
     100             : CODEPROP(enable_sgpr_dispatch_ptr,            ENABLE_SGPR_DISPATCH_PTR),
     101             : CODEPROP(enable_sgpr_queue_ptr,               ENABLE_SGPR_QUEUE_PTR),
     102             : CODEPROP(enable_sgpr_kernarg_segment_ptr,     ENABLE_SGPR_KERNARG_SEGMENT_PTR),
     103             : CODEPROP(enable_sgpr_dispatch_id,             ENABLE_SGPR_DISPATCH_ID),
     104             : CODEPROP(enable_sgpr_flat_scratch_init,       ENABLE_SGPR_FLAT_SCRATCH_INIT),
     105             : CODEPROP(enable_sgpr_private_segment_size,    ENABLE_SGPR_PRIVATE_SEGMENT_SIZE),
     106             : CODEPROP(enable_sgpr_grid_workgroup_count_x,  ENABLE_SGPR_GRID_WORKGROUP_COUNT_X),
     107             : CODEPROP(enable_sgpr_grid_workgroup_count_y,  ENABLE_SGPR_GRID_WORKGROUP_COUNT_Y),
     108             : CODEPROP(enable_sgpr_grid_workgroup_count_z,  ENABLE_SGPR_GRID_WORKGROUP_COUNT_Z),
     109             : CODEPROP(enable_ordered_append_gds,           ENABLE_ORDERED_APPEND_GDS),
     110             : CODEPROP(private_element_size,                PRIVATE_ELEMENT_SIZE),
     111             : CODEPROP(is_ptr64,                            IS_PTR64),
     112             : CODEPROP(is_dynamic_callstack,                IS_DYNAMIC_CALLSTACK),
     113             : CODEPROP(is_debug_enabled,                    IS_DEBUG_SUPPORTED),
     114             : CODEPROP(is_xnack_enabled,                    IS_XNACK_SUPPORTED),
     115             : 
     116             : FIELD(workitem_private_segment_byte_size),
     117             : FIELD(workgroup_group_segment_byte_size),
     118             : FIELD(gds_segment_byte_size),
     119             : FIELD(kernarg_segment_byte_size),
     120             : FIELD(workgroup_fbarrier_count),
     121             : FIELD(wavefront_sgpr_count),
     122             : FIELD(workitem_vgpr_count),
     123             : FIELD(reserved_vgpr_first),
     124             : FIELD(reserved_vgpr_count),
     125             : FIELD(reserved_sgpr_first),
     126             : FIELD(reserved_sgpr_count),
     127             : FIELD(debug_wavefront_private_segment_offset_sgpr),
     128             : FIELD(debug_private_segment_buffer_sgpr),
     129             : FIELD(kernarg_segment_alignment),
     130             : FIELD(group_segment_alignment),
     131             : FIELD(private_segment_alignment),
     132             : FIELD(wavefront_size),
     133             : FIELD(call_convention),
     134             : FIELD(runtime_loader_kernel_symbol)
     135             : // TODO: control_directive
     136             : 
     137             : // end of the table
     138             : ///////////////////////////////////////////////////////////////////////////////
     139             : 
     140             : #undef QNAME
     141             : #undef FLD_T
     142             : #undef FIELD2
     143             : #undef FIELD
     144             : #undef PRINTCODEPROP
     145             : #undef PARSECODEPROP
     146             : #undef CODEPROP
     147             : #undef PRINTCOMP
     148             : #undef PAPSECOMP
     149             : #undef COMPPGM
     150             : #undef COMPPGM1
     151             : #undef COMPPGM2

Generated by: LCOV version 1.13