[llvm] [SPIR-V] Extend SPIRVUsage.rst document (PR #84744)
Arvind Sudarsanam via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 11 12:36:53 PDT 2024
================
@@ -62,24 +67,90 @@ to specify the target triple:
OS Description
===================== ============================================================
*<empty>*/``unknown`` Defaults to the OpenCL runtime.
+ ``vulkan`` Vulkan shader runtime.
===================== ============================================================
.. table:: SPIR-V Environments
===================== ==============================================================
Environment Description
===================== ==============================================================
- *<empty>*/``unknown`` Defaults to the OpenCL environment.
+ *<empty>*/``unknown`` OpenCL environment or deduced by backend based on the input.
===================== ==============================================================
Example:
``-target spirv64v1.0`` can be used to compile for SPIR-V version 1.0 with 64-bit pointer width.
-.. _spirv-types:
+.. _spirv-extensions:
+
+Extensions
+----------
+
+The SPIR-V backend supports a variety of extensions that enable or enhance features beyond the core SPIR-V specification. These extensions can be enabled using the ``-spirv-extensions`` option followed by the name of the extension(s) you wish to enable. Below is a list of supported SPIR-V extensions, sorted alphabetically by their extension names:
+
+.. list-table:: Supported SPIR-V Extensions
+ :widths: 50 150
+ :header-rows: 1
+
+ * - Extension Name
+ - Description
+ * - ``SPV_EXT_shader_atomic_float16_add``
+ - Extends the SPV_EXT_shader_atomic_float_add extension to support atomically adding to 16-bit floating-point numbers in memory.
+ * - ``SPV_EXT_shader_atomic_float_add``
+ - Adds atomic add instruction on floating-point numbers.
+ * - ``SPV_EXT_shader_atomic_float_min_max``
+ - Adds atomic min and max instruction on floating-point numbers.
+ * - ``SPV_INTEL_arbitrary_precision_integers``
+ - Allows generating arbitrary width integer types.
+ * - ``SPV_INTEL_bfloat16_conversion``
+ - Adds instructions to convert between single-precision 32-bit floating-point values and 16-bit bfloat16 values.
+ * - ``SPV_INTEL_function_pointers``
+ - Allows translation of function pointers.
+ * - ``SPV_INTEL_optnone``
+ - Adds OptNoneINTEL value for Function Control mask that indicates a request to not optimize the function.
+ * - ``SPV_INTEL_subgroups``
+ - Allows work items in a subgroup to share data without the use of local memory and work group barriers, and to utilize specialized hardware to load and store blocks of data from images or buffers.
+ * - ``SPV_INTEL_usm_storage_classes``
+ - Introduces two new storage classes that are subclasses of the CrossWorkgroup storage class that provides additional information that can enable optimization.
+ * - ``SPV_INTEL_variable_length_array``
+ - Allows to allocate local arrays whose number of elements is unknown at compile time.
+ * - ``SPV_KHR_bit_instructions``
+ - Enables bit instructions to be used by SPIR-V modules without requiring the Shader capability.
+ * - ``SPV_KHR_expect_assume``
+ - Provides additional information to a compiler, similar to the llvm.assume and llvm.expect intrinsics.
+ * - ``SPV_KHR_float_controls``
+ - Provides new execution modes to control floating-point computations by overriding an implementation’s default behavior for rounding modes, denormals, signed zero, and infinities.
+ * - ``SPV_KHR_linkonce_odr``
+ - Allows to use the LinkOnceODR linkage type that lets a function or global variable to be merged with other functions or global variables of the same name when linkage occurs.
+ * - ``SPV_KHR_no_integer_wrap_decoration``
+ - Adds decorations to indicate that a given instruction does not cause integer wrapping.
+ * - ``SPV_KHR_subgroup_rotate``
+ - Adds a new instruction that enables rotating values across invocations within a subgroup.
+ * - ``SPV_KHR_uniform_group_instructions``
+ - Allows support for additional group operations within uniform control flow.
+
+To enable multiple extensions, list them separated by spaces. For example, to enable support for atomic operations on floating-point numbers and arbitrary precision integers, use:
-Representing special types in SPIR-V
-====================================
+``-spirv-extensions=SPV_EXT_shader_atomic_float_add,SPV_INTEL_arbitrary_precision_integers``
+
+LLVM IR
+=======
+
+SPIR-V is intentionally designed for seamless integration with various Intermediate
+Representations (IRs), including LLVM IR, facilitating straightforward mappings for
+most of its entities. The development of the SPIR-V backend has been guided by a
+principle of compatibility with the Khronos Group's SPIR-V LLVM Translator.
----------------
asudarsa wrote:
A link to the translator github page can be handy here. Thanks
https://github.com/llvm/llvm-project/pull/84744
More information about the llvm-commits
mailing list