| // Copyright 2024 The IREE Authors | |
| // | |
| // Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| #ifndef IREE_TOOLING_FUNCTION_IO_H_ | |
| #define IREE_TOOLING_FUNCTION_IO_H_ | |
| #include "iree/base/api.h" | |
| #include "iree/hal/api.h" | |
| #include "iree/io/stream.h" | |
| #include "iree/vm/api.h" | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| //===----------------------------------------------------------------------===// | |
| // Parsing | |
| //===----------------------------------------------------------------------===// | |
| // Parses zero or more variants from the provided |specs| list. | |
| // |device_allocator| is used for any HAL buffers required and on devices that | |
| // require it an optional |device| will be used for transfer operations. | |
| // | |
| // Supported input string specifiers (and examples): | |
| // - Special values: | |
| // `(null)` (a null vm ref) | |
| // - Primitive value types: | |
| // `123` (i32) | |
| // `3.14` (f32) | |
| // - Shaped tensor types (using HAL buffer view parsing): | |
| // `f32=1.2` (tensor<f32>) | |
| // `2x2xf32=1,2,3,4` (tensor<2x2xf32>) | |
| // `2x2xi32=[[1 2][3 4]]` (tensor<2x2xi32>) | |
| // - Numpy files: | |
| // `@file.npy` (first array from the file) | |
| // `+file.npy` (next array from the file) | |
| // `*file.npy` (all following arrays from the file) | |
| // - Binary files: | |
| // `2x2xf32=@file.ext` (dense tensor<2x2xf32> at the start of the file) | |
| // `4xf32=+file.ext` (dense tensor<4xf32> following the prior input) | |
| // - Storage buffers for output arguments (shape/type used for sizing): | |
| // `&4xf32` (tensor<4xf32> as a HAL buffer for output operands) | |
| // `&4xf32=1,2,3,4` (tensor<4xf32> storage with an initial value) | |
| iree_status_t iree_tooling_parse_variants( | |
| iree_string_view_t cconv, iree_string_view_list_t specs, | |
| iree_hal_device_t* device, iree_hal_allocator_t* device_allocator, | |
| iree_allocator_t host_allocator, iree_vm_list_t** out_list); | |
| //===----------------------------------------------------------------------===// | |
| // Printing | |
| //===----------------------------------------------------------------------===// | |
| // Formats a variant list to |builder| as strings with newlines between them. | |
| // |list_name| will be printed alongside each element ordinal. When printing | |
| // |max_element_count| is used to limit the number of buffer view elements. | |
| // The textual format of this is subject to change. | |
| // | |
| // Prints scalars in the format: | |
| // value | |
| // Prints buffers in the IREE standard shaped buffer format: | |
| // [shape]xtype=[value] | |
| // described in | |
| // https://github.com/iree-org/iree/tree/main/runtime/src/iree/hal/api.h | |
| iree_status_t iree_tooling_format_variants(iree_string_view_t list_name, | |
| iree_vm_list_t* list, | |
| iree_host_size_t max_element_count, | |
| iree_string_builder_t* builder); | |
| // Prints a variant list to |stream|. | |
| // |list_name| will be printed alongside each element ordinal. When printing | |
| // |max_element_count| is used to limit the number of buffer view elements. | |
| // The textual format of this is subject to change. | |
| // | |
| // Prints scalars in the format: | |
| // value | |
| // Prints buffers in the IREE standard shaped buffer format: | |
| // [shape]xtype=[value] | |
| // described in | |
| // https://github.com/iree-org/iree/tree/main/runtime/src/iree/hal/api.h | |
| iree_status_t iree_tooling_print_variants(iree_string_view_t list_name, | |
| iree_vm_list_t* list, | |
| iree_host_size_t max_element_count, | |
| iree_io_stream_t* stream, | |
| iree_allocator_t host_allocator); | |
| //===----------------------------------------------------------------------===// | |
| // Writing | |
| //===----------------------------------------------------------------------===// | |
| // Outputs a variant list to |stream| or the targets defined by |specs|. | |
| // If provided values will be printed to |default_stream| ala | |
| // iree_tooling_print_variants if their spec is `-`. When printing | |
| // |max_element_count| is used to limit the number of buffer | |
| // view elements. The textual format of this is subject to change. | |
| // | |
| // Supported string output specifiers (and examples): | |
| // - Ignore a list element (don't output): | |
| // `` | |
| // - Print to the specified |default_stream| ala iree_tooling_print_variants: | |
| // `-` | |
| // - Numpy files: | |
| // `@file.npy` (write array from the specified file, discarding) | |
| // `+file.npy` (append array to the specified file) | |
| // - Binary files: | |
| // `@file.ext` (write buffer contents to the specified file, discarding) | |
| // `+file.ext` (append buffer contents to the specified file) | |
| iree_status_t iree_tooling_write_variants(iree_vm_list_t* list, | |
| iree_string_view_list_t specs, | |
| iree_host_size_t max_element_count, | |
| iree_io_stream_t* default_stream, | |
| iree_allocator_t host_allocator); | |
| #ifdef __cplusplus | |
| } // extern "C" | |
| #endif | |
| #endif // IREE_TOOLING_FUNCTION_IO_H_ |