brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · d45aaf7 Raw
58 lines · cpp
1//===- TestDataLayoutPropagation.cpp --------------------------------------===//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#include "mlir/Dialect/Affine/IR/AffineOps.h"8#include "mlir/Dialect/Linalg/Transforms/Transforms.h"9#include "mlir/Pass/Pass.h"10#include "mlir/Pass/PassManager.h"11#include "mlir/Transforms/GreedyPatternRewriteDriver.h"12 13using namespace mlir;14 15namespace {16struct TestDataLayoutPropagationPass17    : public PassWrapper<TestDataLayoutPropagationPass, OperationPass<>> {18  MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestDataLayoutPropagationPass)19 20  void getDependentDialects(DialectRegistry &registry) const override {21    registry.insert<affine::AffineDialect, linalg::LinalgDialect,22                    tensor::TensorDialect>();23  }24 25  StringRef getArgument() const final {26    return "test-linalg-data-layout-propagation";27  }28  StringRef getDescription() const final {29    return "Test data layout propagation";30  }31 32  void runOnOperation() override {33    MLIRContext *context = &getContext();34    RewritePatternSet patterns(context);35    linalg::populateDataLayoutPropagationPatterns(36        patterns, [](OpOperand *opOperand) { return true; },37        /*poisonPaddingOk=*/true);38    linalg::ControlPropagationFn controlExtract =39        [](OpOperand *opOperand) -> bool {40      Operation *producer = opOperand->get().getDefiningOp();41      Operation *consumer = opOperand->getOwner();42      return consumer->getBlock() == producer->getBlock();43    };44    linalg::populateExtractSliceSinkingPatterns(patterns, controlExtract);45    if (failed(applyPatternsGreedily(getOperation(), std::move(patterns))))46      return signalPassFailure();47  }48};49} // namespace50 51namespace mlir {52namespace test {53void registerTestDataLayoutPropagation() {54  PassRegistration<TestDataLayoutPropagationPass>();55}56} // namespace test57} // namespace mlir58