- Created new pass
- Moved most of the parts from IREE's
ConvertToSPIRVPass
- Initial testing
- Make todo list
- arith-to-spirv-le-specific.mlir
- Function body empty
- arith-to-spirv-unsupported.mlir
- @unsupported_5elem_vector (5 elements, needs vector reshape)
- @unsupported_2x2elem_vector (2x2 needs vector reshape)
- Remaining function bodies are empty, no errors.
- arith-to-spirv.mlir
- @int32_scalar_addui_extended (2 return values, not supported by SPIR-V)
- fast-math.mlir
- complex-to-spirv.mlir
- cf-ops-to-spirv.mlir
- @simple_loop
- @main_graph
- func-ops-to-spirv.mlir
- @return_multi_val (not supported by SPIR-V)
- types-to-spirv.mlir
- @integer64 (
FuncToSPIRV
does not check for capability) - @integer128 (not supported by SPIR-V)
- @float64 (
FuncToSPIRV
does not check for capability) - @memref_complex_types_no_cap
- @memref_64bit_StorageBuffer
- @integer64 (
- builtins-opencl.mlir
- builtins-vulkan.mlir
- entry-point.mlir
- gpu-to-spirv.mlir
- load-store.mlir
- module-opencl.mlir
- reductions.mlir
- shuffle.mlir
- index-to-spirv.mlir
- @ceildivs
- @ceildivu
- @floodivs
- @index_cast_from (4 return values)
- @index_cast_to (4 return values)
- math-to-core-spirv.mlir
- math-to-gl-spirv.mlir
- @ctlz_scalar
- @tensor_1d (not supported by SPIR-V, so report error?)
- math-to-opencl-spirv.mlir
- @float32_unary_scalar, @float32_unary_vector, @float32_binary_scalar, @float32_binary_vector, @float32_ternary_scalar, @float32_ternary_vector, @int_unary (function bodies empty)
- @tensor_1d (not supported by SPIR-V, so report error?)
- alloc.mlir
- @alloc_dynamic_size, @alloc_unsupported_memory_space, @dealloc_dynamic_size, @dealloc_unsupported_memory_space, @zero_size (not supported by SPIR-V)
- alloca.mlir
- @alloc_dynamic_size, @alloc_unsupported_memory_space, @dealloc_dynamic_size, @dealloc_unsupported_memory_space, @zero_size (not supported by SPIR-V)
- atomic.mlir
- bitwidth-emulation.mlir
- map-storage-class.mlir
- memref-to-spirv.mlir
- @load_store_i32_physical
- @load_store_i8_physical
- @load_store_i1_physical
- @load_store_f32_physical
- @load_nontemporal_aligned
- for.mlir
- if.mlir
- @unsupported_yield_type
- unsupported.mlir
- @func (
scf.parallel
conversion is not supported yet)
- @func (
- use-indices.mlir
- @forward (function body empty)
- while.mlir
- @while_loop2
- @while_loop_before_typeconv
- @while_loop_after_typeconv
- tensor-ops-to-spirv.mlir
- @tensor_0d, @tensor_1d, @tensor_2d (function bodies empty)
- ub-to-spirv.mlir
- @check_poison (function body empty)
- vector-reduction-to-spirv-dot-prod.mlir
- @to_sdot_i64
- @to_sdot_acc_i64
- @too_long
- vector-to-spirv.mlir
- @bitcast (2 return values?)
- @extract_element_size5_vector (5 elements)
- @vector_load, @vector_store, @vector_load_2d, @vector_store_2d (different from the check comments)
- Handle vectors with illegal sizes
- Vector rolling to transform vectors into 1-D
- SPIR-V does not support multiple return values. A
spirv.func
can only return zero or one values. - It might be possible to wrap the return values in a
spirv.struct
.
scf.parallel
documentationspirv.mlir.loop
documentation- The idea is to convert
scf.parallel
into one ore morespirv.mlir.loop
(s). If there are reductions, then the number of loops will be equal to the number of reductions. Otherwise, thre will only be one loop.