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:

SPIR-V Architectures
Architecture Description
spirv32 SPIR-V with 32-bit pointer width.
spirv64 SPIR-V with 64-bit pointer width.
SPIR-V Subarchitectures
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.
SPIR-V Vendors
Vendor Description
<empty>/unknown Generic SPIR-V target without any vendor-specific settings.
Operating Systems
OS Description
<empty>/unknown Defaults to the OpenCL runtime.
SPIR-V Environments
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 Opaque Types
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).