45 lines · cpp
1//===- BufferViewFlowOpInterfaceImpl.cpp - Buffer View Flow Analysis ------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "mlir/Dialect/Arith/Transforms/BufferViewFlowOpInterfaceImpl.h"10 11#include "mlir/Dialect/Arith/IR/Arith.h"12#include "mlir/Dialect/Bufferization/IR/BufferViewFlowOpInterface.h"13 14using namespace mlir;15using namespace mlir::bufferization;16 17namespace mlir {18namespace arith {19namespace {20 21struct SelectOpInterface22 : public BufferViewFlowOpInterface::ExternalModel<SelectOpInterface,23 SelectOp> {24 void25 populateDependencies(Operation *op,26 RegisterDependenciesFn registerDependenciesFn) const {27 auto selectOp = cast<SelectOp>(op);28 29 // Either one of the true/false value may be selected at runtime.30 registerDependenciesFn(selectOp.getTrueValue(), selectOp.getResult());31 registerDependenciesFn(selectOp.getFalseValue(), selectOp.getResult());32 }33};34 35} // namespace36} // namespace arith37} // namespace mlir38 39void arith::registerBufferViewFlowOpInterfaceExternalModels(40 DialectRegistry ®istry) {41 registry.addExtension(+[](MLIRContext *ctx, arith::ArithDialect *dialect) {42 SelectOp::attachInterface<SelectOpInterface>(*ctx);43 });44}45