OpenCL-Docs icon indicating copy to clipboard operation
OpenCL-Docs copied to clipboard

Add a script to check for orphan definitions in the XML

Open kpet opened this issue 3 years ago • 6 comments

Signed-off-by: Kevin Petit [email protected] Change-Id: I041e48869da1ffd261ff6292819ed308136a7afd

kpet avatar Nov 25 '21 09:11 kpet

Currently produces the following output:

Looking for orphan definitions in xml/cl.xml
Enum 'CL_HALF_DIG' is defined but not used in any core version or extension!
Enum 'CL_HALF_MANT_DIG' is defined but not used in any core version or extension!
Enum 'CL_HALF_MAX_10_EXP' is defined but not used in any core version or extension!
Enum 'CL_HALF_MAX_EXP' is defined but not used in any core version or extension!
Enum 'CL_HALF_MIN_10_EXP' is defined but not used in any core version or extension!
Enum 'CL_HALF_MIN_EXP' is defined but not used in any core version or extension!
Enum 'CL_HALF_RADIX' is defined but not used in any core version or extension!
Enum 'CL_HALF_MAX' is defined but not used in any core version or extension!
Enum 'CL_HALF_MIN' is defined but not used in any core version or extension!
Enum 'CL_HALF_EPSILON' is defined but not used in any core version or extension!
Enum 'CL_M_E' is defined but not used in any core version or extension!
Enum 'CL_M_LOG2E' is defined but not used in any core version or extension!
Enum 'CL_M_LOG10E' is defined but not used in any core version or extension!
Enum 'CL_M_LN2' is defined but not used in any core version or extension!
Enum 'CL_M_LN10' is defined but not used in any core version or extension!
Enum 'CL_M_PI' is defined but not used in any core version or extension!
Enum 'CL_M_PI_2' is defined but not used in any core version or extension!
Enum 'CL_M_PI_4' is defined but not used in any core version or extension!
Enum 'CL_M_1_PI' is defined but not used in any core version or extension!
Enum 'CL_M_2_PI' is defined but not used in any core version or extension!
Enum 'CL_M_2_SQRTPI' is defined but not used in any core version or extension!
Enum 'CL_M_SQRT2' is defined but not used in any core version or extension!
Enum 'CL_M_SQRT1_2' is defined but not used in any core version or extension!
Enum 'CL_M_E_F' is defined but not used in any core version or extension!
Enum 'CL_M_LOG2E_F' is defined but not used in any core version or extension!
Enum 'CL_M_LOG10E_F' is defined but not used in any core version or extension!
Enum 'CL_M_LN2_F' is defined but not used in any core version or extension!
Enum 'CL_M_LN10_F' is defined but not used in any core version or extension!
Enum 'CL_M_PI_F' is defined but not used in any core version or extension!
Enum 'CL_M_PI_2_F' is defined but not used in any core version or extension!
Enum 'CL_M_PI_4_F' is defined but not used in any core version or extension!
Enum 'CL_M_1_PI_F' is defined but not used in any core version or extension!
Enum 'CL_M_2_PI_F' is defined but not used in any core version or extension!
Enum 'CL_M_2_SQRTPI_F' is defined but not used in any core version or extension!
Enum 'CL_M_SQRT2_F' is defined but not used in any core version or extension!
Enum 'CL_M_SQRT1_2_F' is defined but not used in any core version or extension!
Enum 'CL_PIPE_FULL_INTEL' is defined but not used in any core version or extension!
Enum 'CL_PIPE_EMPTY_INTEL' is defined but not used in any core version or extension!
Enum 'CL_ERROR_RESERVED0_IMG' is defined but not used in any core version or extension!
Enum 'CL_ERROR_RESERVED1_IMG' is defined but not used in any core version or extension!
Enum 'CL_ERROR_RESERVED2_IMG' is defined but not used in any core version or extension!
Enum 'CL_ERROR_RESERVED3_IMG' is defined but not used in any core version or extension!
Enum 'CL_QUEUE_RESERVED_QCOM' is defined but not used in any core version or extension!
Enum 'CL_MEM_RESERVED21_INTEL' is defined but not used in any core version or extension!
Enum 'CL_MEM_RESERVED22_INTEL' is defined but not used in any core version or extension!
Enum 'CL_MEM_RESERVED0_ARM' is defined but not used in any core version or extension!
Enum 'CL_MEM_RESERVED1_ARM' is defined but not used in any core version or extension!
Enum 'CL_MEM_RESERVED2_ARM' is defined but not used in any core version or extension!
Enum 'CL_MEM_RESERVED3_ARM' is defined but not used in any core version or extension!
Enum 'CL_MEM_RESERVED4_ARM' is defined but not used in any core version or extension!
Enum 'CL_MEM_RESERVED0_QCOM' is defined but not used in any core version or extension!
Enum 'CL_MEM_RESERVED1_QCOM' is defined but not used in any core version or extension!
Enum 'CL_MEM_RESERVED2_QCOM' is defined but not used in any core version or extension!
Enum 'CL_MEM_RESERVED3_QCOM' is defined but not used in any core version or extension!
Enum 'CL_KHRONOS_VENDOR_ID_CODEPLAY' is defined but not used in any core version or extension!
Enum 'CL_KHRONOS_VENDOR_ID_POCL' is defined but not used in any core version or extension!
Enum 'CL_COMMAND_ACQUIRE_D3D9_OBJECTS_INTEL' is defined but not used in any core version or extension!
Enum 'CL_COMMAND_RELEASE_D3D9_OBJECTS_INTEL' is defined but not used in any core version or extension!
Enum 'CL_NV21' is defined but not used in any core version or extension!
Enum 'CL_YV12' is defined but not used in any core version or extension!
Enum 'CL_RESERVED0_IMG' is defined but not used in any core version or extension!
Enum 'CL_RESERVED1_IMG' is defined but not used in any core version or extension!
Enum 'CL_RESERVED2_IMG' is defined but not used in any core version or extension!
Enum 'CL_DEVICE_JOB_SLOTS_ARM' is defined but not used in any core version or extension!
Enum 'CL_QUEUE_JOB_SLOT_ARM' is defined but not used in any core version or extension!
Enum 'CL_KERNEL_ARG_HOST_ACCESSIBLE_PIPE_INTEL' is defined but not used in any core version or extension!
Enum 'CL_DEVICE_MAX_HOST_READ_PIPES_INTEL' is defined but not used in any core version or extension!
Enum 'CL_DEVICE_MAX_HOST_WRITE_PIPES_INTEL' is defined but not used in any core version or extension!
Type 'stdint' is defined but not used in any core version or extension!
Type 'd3d9.h' is defined but not used in any core version or extension!
Type 'd3d9types.h' is defined but not used in any core version or extension!
Type 'dxgiformat.h' is defined but not used in any core version or extension!
Type 'dxvahd.h' is defined but not used in any core version or extension!
Type 'wtypes.h' is defined but not used in any core version or extension!
Type 'ID3D10Buffer' is defined but not used in any core version or extension!
Type 'ID3D10Texture2D' is defined but not used in any core version or extension!
Type 'ID3D10Texture3D' is defined but not used in any core version or extension!
Type 'ID3D11Buffer' is defined but not used in any core version or extension!
Type 'ID3D11Texture2D' is defined but not used in any core version or extension!
Type 'ID3D11Texture3D' is defined but not used in any core version or extension!
Type 'IDirect3DSurface9' is defined but not used in any core version or extension!
Type 'D3DFORMAT' is defined but not used in any core version or extension!
Type 'HANDLE' is defined but not used in any core version or extension!
Type 'DXGI_FORMAT' is defined but not used in any core version or extension!
Type 'UINT' is defined but not used in any core version or extension!
Type 'va/va.h' is defined but not used in any core version or extension!
Type 'VASurfaceID' is defined but not used in any core version or extension!
Type 'VAImageFormat' is defined but not used in any core version or extension!
Type 'CL/cl_gl.h' is defined but not used in any core version or extension!
Type 'void' is defined but not used in any core version or extension!
Type 'char' is defined but not used in any core version or extension!
Type 'int' is defined but not used in any core version or extension!
Type 'unsigned char' is defined but not used in any core version or extension!
Type 'unsigned int' is defined but not used in any core version or extension!
Type 'intptr_t' is defined but not used in any core version or extension!
Type 'size_t' is defined but not used in any core version or extension!
Type 'float' is defined but not used in any core version or extension!
Type 'double' is defined but not used in any core version or extension!
Type 'int8_t' is defined but not used in any core version or extension!
Type 'int16_t' is defined but not used in any core version or extension!
Type 'int32_t' is defined but not used in any core version or extension!
Type 'int64_t' is defined but not used in any core version or extension!
Type 'uint8_t' is defined but not used in any core version or extension!
Type 'uint16_t' is defined but not used in any core version or extension!
Type 'uint32_t' is defined but not used in any core version or extension!
Type 'uint64_t' is defined but not used in any core version or extension!
Type 'cl_double' is defined but not used in any core version or extension!
Type 'cl_float' is defined but not used in any core version or extension!
Type 'cl_short' is defined but not used in any core version or extension!
Type 'cl_int' is defined but not used in any core version or extension!
Type 'cl_long' is defined but not used in any core version or extension!
Type 'cl_char' is defined but not used in any core version or extension!
Type 'cl_uchar' is defined but not used in any core version or extension!
Type 'cl_half' is defined but not used in any core version or extension!
Type 'cl_ushort' is defined but not used in any core version or extension!
Type 'cl_uint' is defined but not used in any core version or extension!
Type 'cl_ulong' is defined but not used in any core version or extension!
Type 'cl_GLint' is defined but not used in any core version or extension!
Type 'cl_GLenum' is defined but not used in any core version or extension!
Type 'cl_GLuint' is defined but not used in any core version or extension!
Type 'cl_properties' is defined but not used in any core version or extension!
Type 'cl_mem_alloc_flags_img' is defined but not used in any core version or extension!
Type 'cl_icd_dispatch' is defined but not used in any core version or extension!

Found 0 orphan commands.
Found 68 orphan enums.
Found 55 orphan types.

Some of these are obvious issues and should be fixed, others may require special casing in the checking script. I'm proposing we resolve all of these util the script reports zero and then make sure it is routinely run as part of the spec generation and CI.

kpet avatar Nov 25 '21 09:11 kpet

Neat!

I'm proposing we resolve all of these util the script reports zero and then make sure it is routinely run as part of the spec generation and CI.

This seems reasonable. Are you planning to fix most of these?

Some initial triage:

  • All of the CL_HALF_XXX enums could be treated analogous to the CL_FLT_XXX enums, which are currently assigned to core OpenCL 1.0 and listed in cl_platform.h.
  • All of the CL_M_XXX enums could also be assigned to core OpenCL 1.0 (they're also in cl_platform.h).
  • Most of the listed basic types are also in cl_platform.h. I guess we could assign them to core OpenCL 1.0 also? Do we want a separate XML section for platform enums and types?
  • Most of the other types are for extensions and we'll just need to assign them to the right extension.
  • I'll follow up regarding the Intel pipe enums.
    • Enum 'CL_PIPE_FULL_INTEL' is defined but not used in any core version or extension!
    • Enum 'CL_PIPE_EMPTY_INTEL' is defined but not used in any core version or extension!
    • Enum 'CL_KERNEL_ARG_HOST_ACCESSIBLE_PIPE_INTEL' is defined but not used in any core version or extension!
    • Enum 'CL_DEVICE_MAX_HOST_READ_PIPES_INTEL' is defined but not used in any core version or extension!
    • Enum 'CL_DEVICE_MAX_HOST_WRITE_PIPES_INTEL' is defined but not used in any core version or extension!
  • The correct names for these enums is DX9_OBJECTS, not D3D9_OBJECTS. The correct enums are already in the XML file so these can simply be removed:
    • Enum 'CL_COMMAND_ACQUIRE_D3D9_OBJECTS_INTEL' is defined but not used in any core version or extension!
    • Enum 'CL_COMMAND_RELEASE_D3D9_OBJECTS_INTEL' is defined but not used in any core version or extension!

bashbaug avatar Nov 29 '21 18:11 bashbaug

Are you planning to fix most of these?

Can do but I'll need a bit of help with vendor extensions.

All of the CL_HALF_XXX enums could be treated analogous to the CL_FLT_XXX enums, which are currently assigned to core OpenCL 1.0 and listed in cl_platform.h.

Not sure I agree. These are currently provided by cl_khr_fp16. We still don't have FP16 support in core. This makes me wonder whether we should move them to cl_ext.h or maybe even cl_half.h. I note there are two sets of identical definitions for two compiler families as well.

All of the CL_M_XXX enums could also be assigned to core OpenCL 1.0 (they're also in cl_platform.h). Most of the listed basic types are also in cl_platform.h. I guess we could assign them to core OpenCL 1.0 also?

That sounds reasonable. I'll double check they all were in 1.0.

Do we want a separate XML section for platform enums and types?

Maybe, could become useful as we move toward more generation.

Most of the other types are for extensions and we'll just need to assign them to the right extension.

We'll need a way of dealing with reserved enums as well. I'm thinking we could add a subtree similar to feature or extensions.

I'll follow up regarding the Intel pipe enums.

Thanks! Feel free to open a separate PR. I don't mind rebasing that one until the output is clean.

The correct names for these enums is DX9_OBJECTS, not D3D9_OBJECTS. The correct enums are already in the XML file so these can simply be removed:

Ok. I note there also seems to be an NVidia version of these using D3D9_OBJECTS that's commented out.

kpet avatar Nov 30 '21 11:11 kpet

All of the CL_HALF_XXX enums could be treated analogous to the CL_FLT_XXX enums, which are currently assigned to core OpenCL 1.0 and listed in cl_platform.h.

Not sure I agree. These are currently provided by cl_khr_fp16. We still don't have FP16 support in core. This makes me wonder whether we should move them to cl_ext.h or maybe even cl_half.h. I note there are two sets of identical definitions for two compiler families as well.

I think there's really two questions here:

  1. What should we do in the XML file to reflect what is currently in the headers? Since the CL_HALF_XXX enums are currently in cl_platform.h alongside the CL_FLT_XXX and CL_DBL_XXX enums I think it would make sense to treat them the same for now at least.
  2. Where do we want these enums moving forward, and is there a way to de-duplicate the values that are the same for all compilers?

We can do (1) to clean up the XML file while we're trying to figure out what to do for (2).

bashbaug avatar Nov 30 '21 19:11 bashbaug

Enum 'CL_KHRONOS_VENDOR_ID_CODEPLAY' is defined but not used in any core version or extension! Enum 'CL_KHRONOS_VENDOR_ID_POCL' is defined but not used in any core version or extension!

I've handled these here: https://github.com/KhronosGroup/OpenCL-Docs/pull/737

Otherwise I don't really have anything to add beyond the existing comments. I support the principal of having the XML clean and kept so by CI.

alycm avatar Dec 08 '21 19:12 alycm

https://github.com/KhronosGroup/OpenCL-Docs/pull/960 adds uses for all types and enums except vendor definitions and reservations.

kpet avatar Aug 09 '23 10:08 kpet