/* * Copyright (c) 2022 Arm Limited. * * SPDX-License-Identifier: MIT * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #ifdef ENABLE_EXPERIMENTAL_DYNAMIC_FUSION #ifndef ARM_COMPUTE_EXPERIMENTAL_DYNAMICFUSION_CLKERNELDESCRIPTORS_H #define ARM_COMPUTE_EXPERIMENTAL_DYNAMICFUSION_CLKERNELDESCRIPTORS_H #include "arm_compute/core/experimental/OperatorGraph.h" namespace arm_compute { namespace experimental { namespace dynamic_fusion { struct ClDirectConv2dKernelDescriptor { friend bool operator==(const ClDirectConv2dKernelDescriptor &desc0, const ClDirectConv2dKernelDescriptor &desc1) { return desc0.conv2d == desc1.conv2d; } Conv2dDescriptor conv2d{}; }; struct ClEltwiseAddKernelDescriptor { friend bool operator==(const ClEltwiseAddKernelDescriptor &desc0, const ClEltwiseAddKernelDescriptor &desc1) { return desc0.add == desc1.add; } AddDescriptor add{}; }; struct ClActivationKernelDescriptor { friend bool operator==(const ClActivationKernelDescriptor &, const ClActivationKernelDescriptor &) { return true; } }; enum class ClippingStrategy { TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT, }; /** Component: Store */ struct TileDescriptor { Size2D tile_dims{}; Size2D boundaries{}; ClippingStrategy clipping{ ClippingStrategy::TOP_LEFT }; TileDescriptor() { } TileDescriptor(Size2D dims, const Size2D &bound, const ClippingStrategy &clip) : tile_dims(dims), boundaries(bound), clipping(clip) { } bool empty() const { return (tile_dims.area() == 0) || (boundaries.area() == 0); } friend bool operator==(const TileDescriptor &tile0, const TileDescriptor &tile1) { return tile0.tile_dims == tile1.tile_dims && tile0.boundaries == tile1.boundaries && tile0.clipping == tile1.clipping; } }; enum class StoreType { VStore, VStorePartial, StoreRow, ConvertStoreRow, StoreBlock, ConvertStoreBlock, StoreRowPartial, StoreBlockPartial, StoreBlockBoundaryAware, StoreVectorSelect, TStoreIndirectWidthSelect }; } // namespace dynamic_fusion } // namespace experimental } // namespace arm_compute #endif //ARM_COMPUTE_EXPERIMENTAL_DYNAMICFUSION_CLKERNELDESCRIPTORS_H #endif /* ENABLE_EXPERIMENTAL_DYNAMIC_FUSION */