//===- 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; void detail::InterfaceMap::insert(TypeID interfaceId, void *conceptImpl) { // Insert directly into the right position to keep the interfaces sorted. auto *it = llvm::lower_bound(interfaces, interfaceId, [](const auto &it, TypeID id) { return compare(it.first, id); }); if (it != interfaces.end() && it->first == interfaceId) { LLVM_DEBUG(llvm::dbgs() << "Ignoring repeated interface registration\n"); free(conceptImpl); return; } interfaces.insert(it, {interfaceId, conceptImpl}); }