blob: 37d51b3b3862dc5b9bfcacc6778bdb1dea156d10 [file] [log] [blame]
// 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_