brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · ca95072 Raw
52 lines · cpp
1//===- ValueBoundsOpInterfaceImpl.cpp - Impl. of ValueBoundsOpInterface ---===//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/Vector/IR/ValueBoundsOpInterfaceImpl.h"10 11#include "mlir/Dialect/Vector/IR/ScalableValueBoundsConstraintSet.h"12#include "mlir/Dialect/Vector/IR/VectorOps.h"13#include "mlir/Interfaces/ValueBoundsOpInterface.h"14 15using namespace mlir;16 17namespace mlir::vector {18namespace {19 20struct VectorScaleOpInterface21    : public ValueBoundsOpInterface::ExternalModel<VectorScaleOpInterface,22                                                   VectorScaleOp> {23  void populateBoundsForIndexValue(Operation *op, Value value,24                                   ValueBoundsConstraintSet &cstr) const {25    auto *scalableCstr = dyn_cast<ScalableValueBoundsConstraintSet>(&cstr);26    if (!scalableCstr)27      return;28    auto vscaleOp = cast<VectorScaleOp>(op);29    assert(value == vscaleOp.getResult() && "invalid value");30    if (auto vscale = scalableCstr->getVscaleValue()) {31      // All copies of vscale are equivalent.32      scalableCstr->bound(value) == cstr.getExpr(vscale);33    } else {34      // We know vscale is confined to [vscaleMin, vscaleMax].35      scalableCstr->bound(value) >= scalableCstr->getVscaleMin();36      scalableCstr->bound(value) <= scalableCstr->getVscaleMax();37      scalableCstr->setVscale(vscaleOp);38    }39  }40};41 42} // namespace43} // namespace mlir::vector44 45void mlir::vector::registerValueBoundsOpInterfaceExternalModels(46    DialectRegistry &registry) {47  registry.addExtension(+[](MLIRContext *ctx, vector::VectorDialect *dialect) {48    vector::VectorScaleOp::attachInterface<vector::VectorScaleOpInterface>(49        *ctx);50  });51}52