//===- InterfaceSupport.cpp - MLIR Interface Support Classes --------------===// // // Part of the LLVM Project, 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 // //===----------------------------------------------------------------------===// // // This file defines several support classes for defining interfaces. // //===----------------------------------------------------------------------===// #include "mlir/Support/InterfaceSupport.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" #define DEBUG_TYPE "interfaces" using namespace mlir; detail::InterfaceMap::InterfaceMap( MutableArrayRef> elements) : interfaces(elements.begin(), elements.end()) { llvm::sort(interfaces, [](const auto &lhs, const auto &rhs) { return compare(lhs.first, rhs.first); }); } void detail::InterfaceMap::insert( ArrayRef> elements) { // Insert directly into the right position to keep the interfaces sorted. for (auto &element : elements) { TypeID id = element.first; auto *it = llvm::lower_bound(interfaces, id, [](const auto &it, TypeID id) { return compare(it.first, id); }); if (it != interfaces.end() && it->first == id) { LLVM_DEBUG(llvm::dbgs() << "Ignoring repeated interface registration"); free(element.second); continue; } interfaces.insert(it, element); } }