brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · c3575cb Raw
51 lines · cpp
1//===- LoopCoalescing.cpp - Pass transforming loop nests into single loops-===//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/Affine/Passes.h"10 11#include "mlir/Dialect/Affine/IR/AffineOps.h"12#include "mlir/Dialect/Affine/LoopUtils.h"13#include "mlir/Dialect/Func/IR/FuncOps.h"14#include "mlir/Dialect/SCF/IR/SCF.h"15#include "mlir/Dialect/SCF/Utils/Utils.h"16 17namespace mlir {18namespace affine {19#define GEN_PASS_DEF_LOOPCOALESCING20#include "mlir/Dialect/Affine/Passes.h.inc"21} // namespace affine22} // namespace mlir23 24#define PASS_NAME "loop-coalescing"25#define DEBUG_TYPE PASS_NAME26 27using namespace mlir;28using namespace mlir::affine;29 30namespace {31struct LoopCoalescingPass32    : public affine::impl::LoopCoalescingBase<LoopCoalescingPass> {33 34  void runOnOperation() override {35    func::FuncOp func = getOperation();36    func.walk<WalkOrder::PreOrder>([](Operation *op) {37      if (auto scfForOp = dyn_cast<scf::ForOp>(op))38        (void)coalescePerfectlyNestedSCFForLoops(scfForOp);39      else if (auto affineForOp = dyn_cast<AffineForOp>(op))40        (void)coalescePerfectlyNestedAffineLoops(affineForOp);41    });42  }43};44 45} // namespace46 47std::unique_ptr<OperationPass<func::FuncOp>>48mlir::affine::createLoopCoalescingPass() {49  return std::make_unique<LoopCoalescingPass>();50}51