#pragma once #include "mlir/IR/BuiltinTypeInterfaces.h" #include "llvm/Support/Casting.h" #include #include #include #include #include "../SpatialOps.hpp" #include "src/Support/TypeUtilities.hpp" using CPU = int; using Weight_t = int; class TaskDCP; class GraphDCP; using Edge_t = std::pair; using Edge_pair = std::pair; using EdgesIndex = std::tuple; template void fastRemove(std::vector>& vector, T* to_remove) { auto position = std::find_if(vector.begin(), vector.end(), [to_remove](Edge_t edge) { return edge.first == to_remove; }); if (position != vector.end()) { std::swap(*(vector.end() - 1), *position); vector.pop_back(); } } inline void fastRemove(std::vector& vector, TaskDCP* to_remove) { auto position = std::find_if(vector.begin(), vector.end(), [to_remove](TaskDCP* element) { return element == to_remove; }); if (position != vector.end()) { std::swap(*(vector.end() - 1), *position); vector.pop_back(); } } template void fastRemove(std::vector>& vector, P position) { if (position != vector.end()) { std::swap(*(vector.end() - 1), *position); vector.pop_back(); } } // TODO Fare qualcosa di sensato inline int64_t getSpatWeightCompute(onnx_mlir::spatial::SpatWeightedCompute spatWeightedCompute) { int64_t tot = 0; for (auto& region : spatWeightedCompute.getBody()) { for (auto& inst : region) { for (auto result : inst.getResults()) if (auto element = llvm::dyn_cast(result.getType())) tot += onnx_mlir::getSizeInBytes(element); } } return tot; }