User Guide for SPIR-V Target¶
Introduction¶
The SPIR-V target provides code generation for the SPIR-V binary format described in the official SPIR-V specification.
Target Triples¶
For cross-compilation into SPIR-V use option
-target <Architecture><Subarchitecture>-<Vendor>-<OS>-<Environment>
to specify the target triple:
¶ Architecture
Description
spirv32
SPIR-V with 32-bit pointer width.
spirv64
SPIR-V with 64-bit pointer width.
¶ Subarchitecture
Description
<empty>
SPIR-V version deduced by tools based on the compiled input.
v1.0
SPIR-V version 1.0.
v1.1
SPIR-V version 1.1.
v1.2
SPIR-V version 1.2.
v1.3
SPIR-V version 1.3.
v1.4
SPIR-V version 1.4.
v1.5
SPIR-V version 1.5.
¶ Vendor
Description
<empty>/
unknown
Generic SPIR-V target without any vendor-specific settings.
¶ OS
Description
<empty>/
unknown
Defaults to the OpenCL runtime.
¶ Environment
Description
<empty>/
unknown
Defaults to the OpenCL environment.
Example:
-target spirv64v1.0
can be used to compile for SPIR-V version 1.0 with 64-bit pointer width.
Representing special types in SPIR-V¶
SPIR-V specifies several kinds of opaque types. These types are represented using target extension types. These types are represented as follows:
¶ SPIR-V Type
LLVM type name
LLVM type arguments
OpTypeImage
spirv.Image
sampled type, dimensionality, depth, arrayed, MS, sampled, image format, access qualifier
OpTypeSampler
spirv.Sampler
(none)
OpTypeSampledImage
spirv.SampledImage
sampled type, dimensionality, depth, arrayed, MS, sampled, image format, access qualifier
OpTypeEvent
spirv.Event
(none)
OpTypeDeviceEvent
spirv.DeviceEvent
(none)
OpTypeReserveId
spirv.ReserveId
(none)
OpTypeQueue
spirv.Queue
(none)
OpTypePipe
spirv.Pipe
access qualifier
OpTypePipeStorage
spirv.PipeStorage
(none)
All integer arguments take the same value as they do in their corresponding
SPIR-V instruction.
For example, the OpenCL type image2d_depth_ro_t
would be represented in
SPIR-V IR as target("spirv.Image", void, 1, 1, 0, 0, 0, 0, 0)
, with its
dimensionality parameter as 1
meaning 2D. Sampled image types include the
parameters of its underlying image type, so that a sampled image for the
previous type has the representation
target("spirv.SampledImage, void, 1, 1, 0, 0, 0, 0, 0)
.