brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 528f6ef Raw
41 lines · cpp
1//===- TopologicalSort.cpp - Topological sort pass ------------------------===//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/Transforms/Passes.h"10 11#include "mlir/Analysis/TopologicalSortUtils.h"12#include "mlir/IR/RegionKindInterface.h"13 14namespace mlir {15#define GEN_PASS_DEF_TOPOLOGICALSORT16#include "mlir/Transforms/Passes.h.inc"17} // namespace mlir18 19using namespace mlir;20 21namespace {22struct TopologicalSortPass23    : public impl::TopologicalSortBase<TopologicalSortPass> {24  void runOnOperation() override {25    // Topologically sort the regions of the operation without SSA dominance.26    getOperation()->walk([](RegionKindInterface op) {27      for (auto it : llvm::enumerate(op->getRegions())) {28        if (op.hasSSADominance(it.index()))29          continue;30        for (Block &block : it.value())31          sortTopologically(&block);32      }33    });34  }35};36} // end anonymous namespace37 38std::unique_ptr<Pass> mlir::createTopologicalSortPass() {39  return std::make_unique<TopologicalSortPass>();40}41