blob: ca0db15bd5556a175cfdc70f58fdceb1afebf4e4 [file]
// Copyright 2023 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_HAL_LOCAL_EXECUTABLE_LIBRARY_UTIL_H_
#define IREE_HAL_LOCAL_EXECUTABLE_LIBRARY_UTIL_H_
#include "iree/base/api.h"
#include "iree/hal/api.h"
#include "iree/hal/local/executable_library.h"
#include "iree/hal/local/executable_loader.h"
// Verifies the |library| matches the |executable_params|.
iree_status_t iree_hal_executable_library_verify(
const iree_hal_executable_params_t* executable_params,
const iree_hal_executable_library_v0_t* library);
// Allocates and resolves import function and context storage on |environment|
// using |import_provider|. All imports will be called through |import_thunk|.
iree_status_t iree_hal_executable_library_initialize_imports(
iree_hal_executable_environment_v0_t* environment,
const iree_hal_executable_import_provider_t import_provider,
const iree_hal_executable_import_table_v0_t* import_table,
iree_hal_executable_import_thunk_v0_t import_thunk,
iree_allocator_t host_allocator);
// Frees environment imports previously allocated with
// iree_hal_executable_library_allocate_imports. Must only be called after all
// existing references to the environment have been dropped.
void iree_hal_executable_library_deinitialize_imports(
iree_hal_executable_environment_v0_t* environment,
iree_allocator_t host_allocator);
// Returns the number of exports in the library.
iree_host_size_t iree_hal_executable_library_export_count(
const iree_hal_executable_library_v0_t* library);
// Returns information about the given executable-local function.
iree_status_t iree_hal_executable_library_export_info(
const iree_hal_executable_library_v0_t* library,
iree_hal_executable_function_t function,
iree_hal_executable_function_info_t* out_info);
// Populates parameter information for the given executable-local function.
iree_status_t iree_hal_executable_library_export_parameters(
const iree_hal_executable_library_v0_t* library,
iree_hal_executable_function_t function, iree_host_size_t capacity,
iree_hal_executable_function_parameter_t* out_parameters);
// Looks up an executable-local function by name.
iree_status_t iree_hal_executable_library_lookup_export_by_name(
const iree_hal_executable_library_v0_t* library, iree_string_view_t name,
iree_hal_executable_function_t* out_function);
#if defined(IREE_HAL_EXECUTABLE_LIBRARY_CALL_HOOK)
#if !IREE_HAVE_ATTRIBUTE_WEAK
#error IREE_HAL_EXECUTABLE_LIBRARY_CALL_HOOK requires toolchain support for weak symbols.
#endif
IREE_ATTRIBUTE_WEAK void iree_hal_executable_library_call_hook_begin(
iree_string_view_t executable_identifier,
const iree_hal_executable_library_v0_t* library, iree_host_size_t ordinal);
IREE_ATTRIBUTE_WEAK void iree_hal_executable_library_call_hook_end(
iree_string_view_t executable_identifier,
const iree_hal_executable_library_v0_t* library, iree_host_size_t ordinal);
#define IREE_HAL_EXECUTABLE_LIBRARY_CALL_HOOK_BEGIN(executable_identifier, \
library, ordinal) \
do { \
if (iree_hal_executable_library_call_hook_begin /* weak symbol */) { \
iree_hal_executable_library_call_hook_begin(executable_identifier, \
library, ordinal); \
} \
} while (0)
#define IREE_HAL_EXECUTABLE_LIBRARY_CALL_HOOK_END(executable_identifier, \
library, ordinal) \
do { \
if (iree_hal_executable_library_call_hook_end /* weak symbol */) { \
iree_hal_executable_library_call_hook_end(executable_identifier, \
library, ordinal); \
} \
} while (0)
#else // defined(IREE_HAL_EXECUTABLE_LIBRARY_CALL_HOOK)
#define IREE_HAL_EXECUTABLE_LIBRARY_CALL_HOOK_BEGIN(executable_identifier, \
library, ordinal)
#define IREE_HAL_EXECUTABLE_LIBRARY_CALL_HOOK_END(executable_identifier, \
library, ordinal)
#endif // defined(IREE_HAL_EXECUTABLE_LIBRARY_CALL_HOOK)
#if IREE_TRACING_FEATURES & IREE_TRACING_FEATURE_INSTRUMENTATION
// Publishes all source files in the library to the tracing provider, if any.
void iree_hal_executable_library_publish_source_files(
const iree_hal_executable_library_v0_t* library);
iree_zone_id_t iree_hal_executable_library_call_zone_begin(
iree_string_view_t executable_identifier,
const iree_hal_executable_library_v0_t* library, iree_host_size_t ordinal);
#define IREE_HAL_EXECUTABLE_LIBRARY_CALL_TRACE_ZONE_BEGIN( \
zone_id, executable_identifier, library, ordinal) \
iree_zone_id_t zone_id = iree_hal_executable_library_call_zone_begin( \
executable_identifier, library, ordinal)
#else
static inline void iree_hal_executable_library_publish_source_files(
const iree_hal_executable_library_v0_t* library) {}
#define IREE_HAL_EXECUTABLE_LIBRARY_CALL_TRACE_ZONE_BEGIN( \
zone_id, executable_identifier, library, ordinal) \
iree_zone_id_t zone_id = 0; \
(void)zone_id;
#endif // IREE_TRACING_FEATURES & IREE_TRACING_FEATURE_INSTRUMENTATION
#endif // IREE_HAL_LOCAL_EXECUTABLE_LIBRARY_UTIL_H_